git权威指南总结六:git协议和工作协同

本文详细介绍了Git支持的各种协议,包括智能协议如SSH、GIT和本地协议,以及哑协议如FTP。文章还介绍了如何使用这些不同协议进行版本库克隆,并探讨了多用户协同工作时可能出现的问题及其解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

git支持的协议
git提供了丰富的协议支持,比如:SSH/GIT/HTTP/HTTPS/FTP等等。所有的协议主要可以分为两大类:智能协议和哑协议
智能协议:在会话中使用智能协议,会在会话的两个版本库的各自一段中打开相应的程序进行数据交换。使用智能协议最直观的印象就是在数据传输过程中会有清晰的进度显示,并且因为是按需传输所以传输量更小,传输速度更快。SSH/GIT及本地协议(file://)等就属于智能协议
哑协议:和智能协议相对的就是哑协议。使用哑协议访问远程版本库的时候,远程版本库不会自动运行辅助程序,而是完全依靠客户端去主动发现。使用哑协议最直观的印象就是传输速度慢,而且传输进度不可见,不知道什么时候才能完成数据传输。FTP等就属于哑协议
以git项目本身为例,看看如何使用不同的协议地址进行版本库克隆的
使用智能git协议:git clone git://git.kernel.org/pub/scm/git/git.git
使用HTTP(S)哑协议:git clone http://www.kernel.org/pub/scm/git.git
使用HTTP(S)智能协议:git clone https://github.com/git/git.git


多用户协同的本地模拟
这里我们使用本地协议模拟多用户操作,本地协议地址为:file:///path/repo.git
首先,创建一个裸版本库git init --bare test/share.git,这里需要注意一点是:创建的裸版本库需要放在gitpath目录下,即bin目录所在包下
然后,我们创建第一个user1用户克隆之前创建的版本库,不过这次克隆和之前的克隆不一样,我们使用本地协议进行克隆:git clone file:///test/share.git user1,即可假设user1为一个用户
可以为用户设置专属用户名和邮箱地址:git config user.name Xxx git config user.email Xxxx,这里只是进行局部配置,不需要使用任何参数
接下来,user1中进行一次提交echo "hello world" > index.txt; git add index.txt; ;git commit -m "async commit test1;",然后将user1用户的提交推送到上游版本库中git push origin master
然后我们创建用户user2克隆版本库,模拟多个用户进行操作git clone file:///test/share.git user2
可以为用户设置专属用户名和邮箱地址:git config user.name Xxx git config user.email Xxxx,这里只是进行局部配置,不需要使用任何参数
然后现在使用命令:git log --pretty=oneline -1查看历史提交版本,可以看到历史提交版本会显示之前在user1中提交ID


强制非快进式推送
首先我们需要知道什么叫做非快进式推送,所谓快进式推送,是指要推送的本地版本库的提交是建立在远程版本库相应分支的现有提交基础上的,简单来说就是远程版本库相应分支的最新提交和本地版本库最新提交的祖先提交相等
比如user1用户修改了readme.txt文件并进行了提交,而user2用户此时也对readme.txt文件进行修改并进行提交,而此时的user2的提交会失败,这是因为非快进式推送导致的,git不能判断提交哪一个推送,所以就默认只会保存第一个提交
如果此时想要强制提交user2用户对readme.txt文件的修改,可以使用强制提交命令:git push -f origin master即可


避免非快进式推送:合并后推送
事实上,理性的工作协同要尽量避免使用非快进式推送,如果在向服务器推送过程中由于他人的提交导致遇到了非快进式推送的警告,可以使用如下操作代替强制推送:执行git pull获取服务器最新数据并和本地的提交进行合并,合并成功后再向服务器进行提交
主要来说,合并后推送主要分为两步:
1.git pull:获取上游版本库最新提交,并和本地的提交进行合并
2.git push:将合并后的数据进行提交


如何禁止非快进式推送
有两种方式来禁止该推送方式:
1.改变版本库的配置变量:receive denyNonFastForwords设置为true可以禁止任何用户的非快进式推送
git config receive.denyNonFastForwords true
2.通过钩子脚本进行设置,这种方式可以设置:只对部分用户进行限制,而允许特定的用户执行非快进式推送


参考文献
git权威指南一书
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值