我們經常在Github中Fork別人優秀的項目(在自己的GitHub下面生成一個repository),如果原倉庫作者或組織更新倉庫,此時你Fork的項目並不會更新,如果我們想要更新操作,該如何操作?在Gitee上面操作比較便捷,有一個pull按鈕。
這裏有兩種方式:
1. 在GitHub上面直接發起pull request;
2. 在本地倉庫使用命令行操作;
下面就這兩種方式進行介紹:
方式一:在GitHub上面直接發起pull request
這個方式適合新手,對git命令和原理不是很清楚的。按照下面的步驟進行操作,就拿spring-boot項目的Fork爲例!
-
打開fork 過來的項目如下所示:
-
點擊new pull request
-
在進入的界面, 後進行將左邊的設置爲你自己的倉庫, fork 過來的源在右邊.
-
當選擇完後會變成下圖:
-
接下來, 將其展示出可以調整狀態: 右邊改爲源fork地址
-
就會出現變更數據:
-
點擊create pull request
-
進行數據的合併:
-
最後合併:
到此就完成了:
方式二:在本地倉庫使用命令行操作;
該方式應該是使用的比較多的方法,因爲在本地一般都會有一個倉庫的。
參考文檔:
問題場景:
新公司要求所有的代碼提交都要先通過自己的庫提交到主repo上去,所以先在gitlab網頁上fork出一個自己的庫,在本地修改完代碼後提交到遠程自己庫上,然後在gitlab網頁上發起一個merge request請求,然後等待主repo主人review,同意之後合入。
問題是同時也有其他同學在主repo合入代碼,所以我要定期和主repo保持同步。
開始我的想法是
gitlab網頁上提供了git pull這樣的按鈕,這樣點一下就能讓自己fork的庫和原始庫保持同步。然後自己在本地git pull,就能間接和原始的庫保持同步。
但是我沒找到這個按鈕。但是我找到了下面這篇文章,照着操作之後,一步一步跟蹤觀察發現,每一步都能成功。
整體思路如下:
在自己的本地添加主repo爲上游代碼庫,注意只是配置原倉庫的路徑,並沒有真正clone原倉庫,
然後將遠程主repo同步到自己本地的機器,
然後本地的機器再push到自己的遠程的fork庫
所有的操作都要在本地命令行完成
下面是我轉載的,照着這個操作,完全沒問題:
我們在進行Github協同開發的時候,往往會去fork一個倉庫到自己的Github中,過一段時間以後,原倉庫可能會有各種提交以及修改,很可惜,Github本身並沒有自動進行同步的機制,這個需要我們手動去執行,現在我來演示一下如何進行自己的倉庫和原倉庫進行Gith同步的操作。
(1)我使用終端 命令行的方式在Mac中來操作。首先在終端中配置原倉庫的位置。進入項目目錄,執行如下命令:查看你的遠程倉庫的路徑。
(2)配置原倉庫的路徑:
下面這步操作即添加主repo爲上游代碼庫
注意一定要cd到你自己fork出來的庫裏面去,比如工程名叫luoluo,那要先cd到luoluo中去,然後才能操作
(3)再次查看遠程目錄的位置:
(4)抓取原倉庫的修改文件:
執行效果如下所示
(5)切換到master分支。
(6)合併遠程的master分支:
下面這行代碼執行結束之後,本地代碼會立刻和主庫保持同步,非常神奇
(7)此時,你的本地庫已經和原倉庫已經完全同步了。但是注意,此時只是你電腦上的本地庫和遠程的github原倉庫同步了,你自己的github倉庫還沒有同步,此時需要使用“git push”命令把你本地的倉庫提交到github中。
這是華麗的分割線
其實(4)(5)(6)可以合併成一條命令
git pull upstream master
第一個參數pustream 表示遠程主repo
第二個參數master 表示自己fork庫的master分支
這個是公司文檔上寫的,並不是從網上找來的
爲了說清楚這個問題,親自做了一張圖