在github上,當看到好的項目代碼時鹤盒,有兩種方式可以將代碼“下載”到本地进陡。一是可以直接clone原項目髓削,二是通過github的“fork”功能“拷貝”項目到我們自己的主頁上,再從主頁上clone“拷貝項目”。
兩種方式最重要的區(qū)別是奖蔓,如果我們修改了clone到本地的代碼赞草,想push一下,顯然第一種方式不可行吆鹤,因為項目的遠程信息是別人的(通過git remote -v 可以查看)厨疙,而第二種方式,由于創(chuàng)建者相當于是我們自己疑务,是能夠push的(當然先要add 和commit)沾凄。但是我們push之后,原項目的主人是看不到我們修改的代碼的知允,如果想讓原作者接受并merge你的修改撒蟀,這時可以發(fā)起pull request,這樣原作者就能收到pull request請求温鸽,并可以審閱你的代碼是否合理保屯,如果他比較滿意,就可以merge你的修改涤垫,這樣原項目就得到了完善姑尺,而你也就成為了光榮的“貢獻者”之一。
一般情況我們是不需要fork的蝠猬。很多人錯誤的在使用fork切蟋,把它當成一種“收藏”功能,這其實并沒有什么必要榆芦。一來敦姻,可以直接用“watching”來關(guān)注該項目,當有新的issue歧杏,commit镰惦,pull request時,你會收到相應的郵件提醒(前提是設置了郵箱)犬绒。二來fork的項目只是保留了fork當時的狀態(tài)旺入,如果項目作者在你fork之后更新了項目,你是看不到的凯力。這就帶來一個問題:如何實現(xiàn)fork后的項目與原項目的同步茵瘾?這是我今天參與一個項目的時候才意識到的,以前沒有思考過這個問題(諸位莫要見怪)咐鹤。查閱了一些資料拗秘,找到了一個比較簡單可行的答案。方法如下:
在我的主頁上有一個項目“zhihu-api”,可以看到祈惶,它是從“l(fā)zjub567/zhihu-api”fork來的雕旨。
1. 將自己主頁的項目clone到本地扮匠,如下圖:
此時,若我們查看項目的遠程信息凡涩,發(fā)現(xiàn)結(jié)果都是關(guān)于我自己主頁的棒搜,origin是分支名稱:
2. 為項目添加遠程分支:
其中 upstream是遠程分支名,后面的鏈接是原作者的倉庫地址活箕,此時再重新查看項目的遠程信息力麸,發(fā)現(xiàn)多了upstream的信息,是剛剛添加的原作者的倉庫
3. 如果遠程項目進行了更新育韩,我們需要從upstream分支進行拉取克蚂,這樣本地的代碼就和原作者的代碼同步了。
4. 將本地代碼提交到自己主頁的分支筋讨,即origin上了陨舱,這樣,我自己主頁的項目就和原作者的項目進行了同步版仔。
總結(jié)一下:實現(xiàn)fork的項目和原項目同步的方法是利用本地的項目作為“中轉(zhuǎn)”游盲,為本地的項目添加兩個遠程信息,拉取原倉庫的新代碼蛮粮,push到自己的倉庫上益缎,就達到了“同步”。
實現(xiàn)這個目的的做法不止這一種然想,只是我剛好看到了莺奔,覺得比較簡單,就記錄到這里備忘变泄。
推薦文章: