前段时间加了一个博客群,有幸参加了群主组织的一个开源项目,在多人开发中使用git也遇到了一些问题,这里总结一下,但愿对你们有用;
GIT(分布式版本控制系统)当上游源码库发生提交改变的时候后咱们fork下来的库是不会自动更新的,须要咱们手动更新,本文简单介绍一下用命令行实现的过程;git
因开发人数比较多,咱们采用了pr(Pull Requests)的方式操做,这里简单说下pr的操做流程,首先咱们要找到项目而后Fork下来:github
这样在咱们本身的github上就会有对应的代码库:ssh
而后根据ssh克隆fork库,这样咱们就能在本地开发了,开发完之后正常的四步走上传到fork库,到目前为止你是能够再本身的fork中看到本身的代码的,而后就是最后一步pr:分布式
弄好之后直接提交等上游库审查合并就能够了(个人已经提交了全部没有提交按钮);fetch
如今问题来了,当我下次须要开发的时候我须要先pull线上的代码,可是我直接pull 分以后提示我spa
明明上游库已经有更新过的啊,命令行
打开上游代码库,以及本身fork下来的库对比一下:版本控制
上游库的commit数量和本地不一样,说明fork的库没有自动更新,须要咱们手动更新。code
下面我来讲说怎么解决这个问题:blog
$ git remote -v origin git@github.com:username/fork.git (fetch) origin git@github.com:username/fork.git (push)
$ git remote add upstream ssh.git
$ git remote -v origin git@github.com:username/fork.git (fetch) origin git@github.com:username/fork.git (push) upstream ssh (fetch) upstream ssh (push)
$ git fetch upstream remote: Enumerating objects: 33, done. remote: Counting objects: 100% (33/33), done. remote: Compressing objects: 100% (31/31), done. remote: Total 33 (delta 11), reused 12 (delta 2), pack-reused 0 Unpacking objects: 100% (33/33), done. From github.com:JinJieTan/Palantir * [new branch] dev -> upstream/dev * [new branch] develop/kk -> upstream/develop/kk * [new branch] develop/nn0917 -> upstream/develop/nn0917 * [new branch] master -> upstream/master * [new branch] peter -> upstream/peter
$ git checkout master Switched to branch 'master' Your branch is ahead of 'origin/master' by 1 commit. (use "git push" to publish your local commits)
$ git merge upstream/master $ git push origin master
之后每次更新都重抓取原仓库的修改文件执行一遍就能够了
其实后面三步能够合并成一条命令
git pull upstream master
第一个参数pustream 表示远程主repo
第二个参数master 表示本身fork库的master分支
跟着上面操做就能够首先上游代码库与fork库代码同步了,是否是很很神奇?