我從github上下載了個開源代碼並用到了我的項目中,但是開源代碼一直在更新,如何能夠很方便的更新到呢?
我從github上下載了個開源代碼並用到了我的項目中,並做了些修改,但是開源代碼一直在更新,如何能夠很方便的更新到我的項目中呢,比如我項目裡面用了兩份開源代碼,fork就不適用了吧?
請先搞清楚 remote 的概念。以下引自 github 的幫助文檔 About remote repositories
A remote URL is Gits fancy way of saying "the place where your code is stored." That URL could be your repository on GitHub, or another users fork, or even on a completely different server.
"remote" 是 git 用來表示「你的代碼存儲位置」的 url 地址。這個地址可以是你在 github 上自己建立的倉庫,或者另外一個用戶 fork 的倉庫,或者在另一個 github 之外的伺服器上的 git 地址。
如果你的用戶名是 devMe, fork 的開源項目的用戶名叫 devA,項目名叫 foobar, 原始項目的 remote 地址就是
git@github.com:devA/foobar.git
你的 fork 項目地址就是
git@github.com:devMe/foobar.git
一般來說你建立的項目,不管是原創還是 fork,都會有一個默認的 remote 叫 origin,這個 origin 就會指向你自己的 fork 地址。
如果要同步原始項目,只要執行git pull git@github.com:devA/foobar.git master
就可以了,為了不每次都輸入完整的地址,可以用 add remote 命令來記錄一個快捷方式
git remote add source git@github.com:devA/foobar.git
這裡 source 就是你為原始 remote 地址取的名字。之後就可以
拉取原始項目更新:git pull source master
拉取自己 fork 項目的更新:
git pull origin master
更多參數請參考文檔
Adding a remote
Fetching a remote我們團隊有一半以上的成員都使用 fork + pull request 來提交功能和保證主版本的穩定性。大部分人的代碼同步都是建立在上述命令上的,非常簡單明了。
submodule 和 fork 的適用場景是完全不同的,submodule 並不能代替 fork 的功能,因為無法apply 自己的修改,以及通過 pull request 合併到原始地址。設置個upstream,
具體請參考:
github fork confusionHow do you make an existing Git branch track a remote branch?iOS嗎?用 cocoapods。否則 git submodule。
不要直接改源碼,好的代碼都會提供定製的方法,或者繼承下再定製。
對了,其它很多開 branch 的答案都是錯的,不用看。如果想簡單修改下上游的代碼,又不想push request,也可以git clone後,再新建一個branch,你在這個branch加自己的代碼,還可以修改clone的代碼。如果原作者更新了,git fetch再merge到你的branch。這樣的好處是方便修改上游bug,方便同步,沒有用高級功能,管理簡單。
其他方案就是:git submodule 和 git subtree。
git submodule 下想修改代碼也是可以的,還可以push到github上fork的分支。缺點要用到git submodule。建一個upstream,然後rebase
如果你的項目的依賴關係是全序的話,那用git submodule就可以了,他更新了你就update一下,繼續用。
@vczh 說的對。或者是用subtreeGit - Subtree Merging
推薦閱讀:
※git圖解:代碼區域總結
※讓你的終端更有趣——一句話心情
※【收藏】圖解GitHub基本操作
※Python 的數學仙境之旅
※github 和 sourceforge有什麼區別?
TAG:GitHub |