Git原理与实践
举例说明,在修改某个文档时,可能会有多个更改版本,此时存在多个修改版本,如果某个修改需要回退,需要打开多个文件进行查找十分不便
版本控制:增加修改描述及版本号
增加修改描述信息能够更为直观的展示版本的变化
一天中可能会产生多个副本,为明确这些副本的演进关系,增加版本号信息:
文件名中添加修改描述及版本号信息,可以直观看到每个副本所对应的修改内容,以及多个副本在时间维度的演进关系

当论文被多个导师评审修改意见后,出现新的问题



涉及多人修改的情况,文件名还需要添加修改人信息
版本控制系统所起的作用,跟上述例子起名作用类似
版本控制简介:对软件开发过程中程序代码、配置文件及说明文档等文件变更的管理,可以记录一个或若干文件的内容变化,追踪文件的变更,以便将来查阅特定版本修订情况
作用:
记录每一次修改并且备注修改的内容及修改人
可以在项目的各个历史版本之间自如切换
可以一目了然的比较出两个版本之间的差异
可以从当前的修改中撤销某些操作
可以自如创建分支,合并分支
可以多人协作开发

版本控制系统分类:
版本控制系统根据其工作方式分为:


本地版本控制系统 集中式版本控制系统

分布式版本控制系统
本地版本控制系统:安装在一台本地PC上的,采用某种简单的数据库来记录文件的历次更新差异,利用这些差异可以重新计算出各个版本的文件内容,保证内容不会丢失。本地所以无法多人协作开发
集中式版本控制系统:有一个单一的集中管理服务器,保存所有文件的修订版本,协同工作的人们通过客户端连接到这台服务器,去除最新的文件或者提交更新,相对于本地版本控制系,集中式版本控制系统可以多人开发,管理员轻松掌握用户开发权限,但缺点是服务器单点故障,如果网络不通,开发者都无法提交更新,如果服务器磁盘损坏,没有备份,那么所有数据都会丢失,包括项目整个变更历史,集中式代码管理的核心是服务器,所有开发者在开始新一天的工作之前必须从服务器上获取最新代码,然后开发,解决冲突,提交,脱离服务器开发者无法工作
分布式版本控制系统:相较于集中式版本控制系统最大区别于 客户端不只是提取最新版本的文件快照。而是把整个代码仓库完整的镜像,如果远程仓库服务器网络不通,开发者可以提交到本地仓库,同时也可以回退文件到任意一个历史版本。而集中式版本控制系统则不行,因为集中式版本控制系统,变更记录都是保存在中央服务器上的,网络不同的话,客户端无法获得变更记录,分布式版本的服务器发生故障,事后都可以用任何一个开发者的本地仓库回复,在容灾与备份方面有天生优势
分布式版本控制系统基本概念:
远程仓库:在服务器上创建的代码仓库
本地仓库:开发人员在本地的PC代码仓库
分支:代码仓库中代码的一个副本
克隆:将远程仓库复制到本地PC
推送:将本地仓库的代码修改合入到远程仓库
分布式版本控制系统工作原理:


Git是开源的分布式软件版本控制工具,用于管理软件开发过程中的变化

应用场景:


基本概念:
·远程长款:远端服务器上保存版本信息的仓库
·git仓库:git用来保存版本信息的本地仓库
·工作区:开发者的当前目录,可以提交变更到仓库
·暂存区:工作区与仓库之间的区域,开发者提交到仓库前必须先提交到暂存区
·分支:代码仓库中代码的一个副本
·检出:从本地git仓库提取出某个版本的内容到工作区
·获取:把远程仓库的修改更新到本地仓库,但是不会把修改检出到工作区
·拉取:把远程仓库的修改更新到本地仓,并检出到工作区
工作区文件修改提交到git仓库,需要通过暂存区中转,先添加文件到暂存区,再提交到git仓


git仓库就是开发者克隆下来的在本地PC的仓库
git本地工作空间包括 工作区 暂存区 git仓库
git仓库保存了所有的历史快照
工作区是对git仓库中项目的某个版本独立提取出来的内容,这些从git仓库压缩数据库中提取出来的文件,放在工作区供开发者使用和修改
暂存区保存了下次将要提交到git仓库的文件列表信息
远程仓库:一个git服务器,成为origin,与本地仓库一样,跟开发者的本地仓库平等
可以用来永久保存代码备份,也可以让其他开发者通过该仓库来协作
远程仓库与本地仓库区别:
1)提供URL方便远程访问代码仓库
2)提供SSH安全连接方式
基于git服务器创建的配置管理仓库有:
github gitlab、codehub、码云等
相关命令:
克隆远程仓库:git clone
将本地分支推送到远程仓库:git push
获取远程仓库更新:git fetch
拉取远程仓库更新并合并到本地分支:git pull

创建Master分支:
在git中分支只是一个指针,Master分支拥有一个Master指针,指向Master分支的头部,其他分支也拥有自己的指针。HEAD指针代表当前工作目录指向分支
创建Hotfix分支
分支创建:从开发主线上分离开,不影响主线的同时继续工作,创建分支并不会进行物理靠北,只有修改分支的文件并提交,才会真正存储
分支切换:同一个工作目录下面,可以切换到同一仓库的不同分支;切换分支,就是修改HEAD指针指向,git会用该分支的最后提交的快照替换你的工作目录的内容

创建并切换到当前分支:git checkout -b
创建分支:git branch
切换分支:git switch
合并某分支到当前分支:git merge
删除分支:git branch -d
git工具:
git有命令行和图形界面两种方式,命令行是默认方式
图形界面有多种,如 TortoiseGit、SourceTree,SmartGit,GitEye,下面以TortoiseGit为主,其有中文语言包可以安装

克隆(命令行)




克隆(TortoiseGit)

拉取(命令行)




拉取(TortoiseGit)

推送(命令行):将本地分支的修改推送到Git远程仓库




推送(TortoiseGit)

合并(命令行):合并是一个分支的内容合入另一个分支




合并(TortoiseGit)

切换到hotfix分支,进行工作并提交到本地仓库

切换回master分支,合并hotfix分支的修改

华为云的代码托管

编码步骤

本地PC生成SSH密钥



创建项目:华为云代码托管服务依赖项目管理服务,使用前开通项目管理服务

添加SSH公钥:

设置HTTPS密码:

创建代码仓:

克隆到本地:

云端管理代码:

Git安装:双击运行安装包,在弹出的窗口一次单击下一步(NEXT),最后点击安装(INSTALL)完成安装


路径根据自身需求
GIT配置:
在“开始”搜索栏中搜索 git bash 打开命令行终端
输入以下命令行创建用户


配置好后可以用 git config -l查看配置
生成SSH密钥,用以和Git远程仓库服务端进行鉴权认证:
ssh-keygen -t rsa -C “<您的邮箱>”
然后输入3个回车即可,密钥保存在“~/.ssh/id_rsa、~/.ssh/id_rsa.pub”



TortoiseGit安装:需要先安装Git才能运行
安装程序与中文包见附件

按照默认设置安装程序
中文包安装


安装之后在TortoiseGit右键菜单常规设置中,语言栏有English和中文
配置:Tortoise也需要一个密钥和代码托管服务端进行鉴权认证,之前在Git bash中已经生成了密钥,将TortoiseGit设置的Network选项中的SSH client修改成Git安装目录下的ssh.exe 即可使用Git bash生成的SSH密钥

操作方式在上述内容中已经讲解
创建本地Git库

使用git init命令将该文件夹转换成git可以管理的仓库

执行命令后 Git仓库就创建好了,是一个空仓库,在原先的空文件夹下多了一个.git文件夹,用来跟踪管理版本库的

提交修改到本地Git仓库
编写一个read.txt文件输入 this is a git repository,添加到git仓库
使用git status 可以查看git仓库状态

Untracked files 表示还没有被Git跟踪的文件,使用git add命令将文件添加到暂存区

继续使用git status查看git仓库状态

changes to be commited表示待提交
new file 表示新增文件
使用git commit提交修改

-m表示本次提交说明,这样方便地从历史记录里找到这次提交记录
查看历史提交记录

–pretty=oneline表示一行显示一条历史记录

更多信息参考Git – Viewing the Commit History

创建分支然后使用switch切换到分支

在命令行中显示已经切换到该分支
在分支中新增一个helloworld.md文件,代表新增功能

可以看到在feature分支下创建了一个新文件

合并分支
切换回master分支
合并feature分支
git merge输出显示,新增了一个文件

制造冲突
冲突是合并中可能的情况,合入分支和被合入分支同时对某一文件进行修改,合并这两个分支时,有可能会产生冲突而导致无法合并,这时需要解决冲突
切换到feature分支,对helloworld.md文件修改后提交到git


切换到master,对helloworld.md文件进行修改后提交到git

在master分支合入feature分支

CONFILCT表示冲突
这时在命令行显示有MERGING字段

解决冲突
使用git status查看产生冲突的文件

显示同时对helloworld.md文件进行了修改,需要打开冲突文件进行手动修改
vim helloworld.md



重新添加到暂存区
输入git commit 然后在弹出的窗口输入:q 重新合入

使用git log 待–graph选项命令 查看分支合并过程

TortoiseGit图形化操作方式
使用TortoiseGit创建Git仓库,首先创建一个文件夹,并在下面创建一个.git文件夹,该文件夹是TortoiseGit创建的Git仓库所在文件夹,外层文件夹是本地工作空间,Git仓库会将文件检出到外层文件夹供开发人员编码工作

在GitLearning文件夹内部空白处右键,单击 Git Create Repostitory here 点击OK


此时,外层文件夹图标有一个标志

这是TortoiseGit显示状态的标志
之前创建的.git文件夹已经变成透明状态,并且TortoiseGit在其内部生成了一些文件,并将该文件夹初始化为Git仓库

在GitLearning文件夹下,用记事本创建文件夹,输入This is a Git Repository

可以直观看出,read.txt没有被git管理,因为没有任何状态标识
在文件夹空白处右键单击Git commit


勾选新增文件,设置上传时间和用户,附带备注消息然后点击commit


查看历史提交记录


创建分支



创建一个文件提交到feature分支下


合并分支
切换分支回到master


工作空间恢复了


合并分支
选择要合并的分支


制造冲突:
切换到f分支对helloworld.md文件修改后提交到仓库
切换到m分支对helloworld.md文件修改后提交到仓库
f文件文本为:
Hello,World!
This is a feature branch.
m文件文本为:
Hello,World!
This is a master branch.

合并分支制造冲突
在master分支上合并feature


在resolve可以看到产生冲突的文件

双击文件

1为feature分支文件内容,2为当前分支,3是文件合并内容,此时因为文件冲突需要手动合并,点击Mark as resolved然后关闭窗口,在文件夹空白区域右键点击Git commit 弹出


查看历史记录

华为云代码托管实践:

打开https://devcloud.huaweicloud.com/codehub/home/
点击设置密钥

添加密钥

设置HTTPS密码

项目创建
1、进入Devcloud主页面,选择华北-北京四

2、新建Scrum项目-新建项目-Scrum-填写名称和描述
3、进入项目,此为工作区
切换到代码托管页面
菜单-代码-代码托管

新建仓库-普通仓库

新建的代码仓库只有一个自带的readme.md文件
本地git仓库与远程仓库交互
1、进入代码仓库,点击克隆/下载 复制SSH克隆地址



git clone可以在仓库地址后加文件夹名称 表示本地文件夹
若加文件夹名称表示将远程仓库克隆到本地仓库的该文件夹下 不带参数的情况下,本地文件夹名称默认与远程仓库相同
推送
在本地新增功能推送到远程仓库
新增一个py文件


提交到本地仓库



git push 推送 -f意为忽略版本强制推送

更新
若有他人将新的py文件修改后推送到远程仓库,我们需要更新到本地

![]()
将修改后的helloworld.py提交到本地仓库,推送到远程仓库


![]()
![]()
将开发人员B的推送拉取到本地
![]()
![]()
TortoiseGit操作与上述步骤基本机制,且图形化操作界面更为方便,如有不认识的可以多背单词:)
更新: 2025-03-13 18:47:11
原文: https://www.yuque.com/yuhui.net/network/evggfskhn6eshm0x

评论(0)
暂无评论