前段時間加了一個博客羣,有幸參加了羣主組織的一個開源項目,在多人開發中使用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庫代碼同步了,是否是很很神奇?