git通过多个仓库之间的拉取和推送变化来达成多用户协作,下面模拟两人协作场景。场景假设如下:
- 用户A、B ,分别工作于仓库repo1和repo2
- 创建一个公共仓库repo
- 用户A修改后提交到repo1后,推送变化到repo。
- 用户B从共享仓库repo拉取更新到repo2.
- 用户B修改提交到repo2之后在推送变化到repo
下面在本地环境模拟
首先创建仓库repo1.
mkdir repo1
cd repo1
git init
接着创建用户A:
git config user.name 'A'
git config user.email 'A@repo.com'
然后在repo1下做修改提交。
git add .
git commit -m '用户A的第一次提交'
然后以clone的方式来创建一个共享仓库
cd ..
git clone --bare repo1 repo.git
参数--bare表示clone的共享仓库仅仅用来共享。共享仓库和一般仓库的区别在于共享仓库中没有工作目录。至于.git后缀随意
下面建立repo2,方法就是clone共享仓库
git clone repo.git repo2
现在我们有三个仓库了。其中一个是共享仓库
ls
输出:repo.git repo1 repo2
然后我们为repo2配置用户B
cd repo2
git config user.name 'B'
git config user.email 'B@repo.com'
可以看到B仓库的代码和A仓库一样了。
此时可以通过git log --oneline
查看提交记录,会发现有一条记录时用户A操作的
可以通过git remote -v
查看共享仓库情况
通过git branch -a
查看远端分支
然后B进行一系列修改提交
git add .
git commit -m 'B的第一次提交'
git push
将修改推送至共享仓库
此时用户A进入自己的仓库,拉取变化:
cd ..
cd repo1
git pull D:/aaa/git_test/repo.git master
上面D:/aaa/git_test/repo.git master是我的地址,对照写上自己的共享仓库地址就可以了
如果每次拉取都这样写显然很麻烦。我们可以设置仓库别名来简化
git remote add origin D:/aaa/git_test/repo.git master
然后下次拉取执行
git pull origin master
就可以了