前段時間加了一個博客羣,有幸參加了羣主組織的一個開源項目,在多人開發中使用git也遇到了一些問題,這裏總結一下,希望對大家有用;
GIT(分佈式版本控制系統)當上遊源碼庫發生提交改變的時候後我們fork下來的庫是不會自動更新的,需要我們手動更新,本文簡單介紹一下用命令行實現的過程;
Pull Requests
因開發人數比較多,我們採用了pr(Pull Requests)的方式操作,這裏簡單說下pr的操作流程,首先我們要找到項目然後Fork下來:
這樣在我們自己的github上就會有對應的代碼庫:
然後根據ssh克隆fork庫,這樣我們就能在本地開發了,開發完以後正常的四步走上傳到fork庫,到目前爲止你是可以再自己的fork中看到自己的代碼的,然後就是最後一步pr:
弄好以後直接提交等上游庫審查合併就可以了(我的已經提交了所有沒有提交按鈕);
現在問題來了,當我下次需要開發的時候我需要先pull線上的代碼,但是我直接pull 分之後提示我
明明上游庫已經有更新過的啊,
打開上游代碼庫,以及自己fork下來的庫對比一下:
上游庫的commit數量和本地不同,說明fork的庫沒有自動更新,需要我們手動更新。
同步上游代碼庫
下面我來說說怎麼解決這個問題:
- 查看線上庫的地址
$ git remote -v
origin [email protected]:username/fork.git (fetch)
origin [email protected]:username/fork.git (push)
- 配置上游庫的路徑
$ git remote add upstream ssh.git
- 查看是否添加成功
$ git remote -v
origin [email protected]:username/fork.git (fetch)
origin [email protected]: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
- 切換master分支
$ 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庫代碼同步了,是不是很很神奇?