如何利用 Git 與 GitHub 進(jìn)行多人協(xié)作開發(fā)

1. 首先 “Fork” 他人的 repository(代碼倉庫)

? ? ? ?“Fork” 的名詞是 “叉子” 的意思盆犁,不過這里取的是動(dòng)詞 “分叉,建一個(gè)分支” 的意思篡九。進(jìn)入你想?yún)⑴c合作開發(fā)的倉庫界面谐岁,點(diǎn)擊右上角的?“Fork”?圖標(biāo),此時(shí)你已經(jīng)復(fù)制了一個(gè)副本在你的 GitHub 倉庫中了榛臼,或者是說一個(gè)新的代碼倉庫被創(chuàng)建了伊佃,可以打開你的 GitHub 主頁看一看。

? ? ? ?注意沛善,這個(gè)遠(yuǎn)程倉庫是屬于你自己的航揉。這里 “Fork” 不同于 “Clone”,“Clone” 是發(fā)生在你的本地機(jī)器中金刁,相當(dāng)于你復(fù)制了一個(gè)完全相同的副本在你的終端上帅涂,但該副本的遠(yuǎn)程倉庫連接的仍然是原作者的倉庫议薪,所以你并不是這個(gè)項(xiàng)目倉庫的擁有者,沒有更新它的權(quán)限媳友。

? ? ? ?因此斯议,“Fork” 正是我們所需要的。

? ? ? ? 點(diǎn)擊之后可以看到庆锦,自己帳號(hào)內(nèi)有一個(gè)新的代碼倉庫被創(chuàng)建了捅位。

? ? ? 然后將這個(gè)代碼倉庫 “Clone”(克隆)到你的本地機(jī)器中搂抒,可以使用命令行或者 IDE(比如 Intellij IDEA)的?VCS?功能來實(shí)現(xiàn)艇搀。“Clone”?成功之后你就可以自主修改里面的內(nèi)容,然后?“Push”?到遠(yuǎn)程倉庫中求晶,注意焰雕,這是你自己的遠(yuǎn)程倉庫。但是不使用 “Fork”芳杏,而是直接 “Clone”(克戮仄ā)原作者的倉庫的話,你會(huì)得到一個(gè) “fatal: unable to access” 的提示爵赵,無法訪問吝秕。

? ? ? ?在這一環(huán)節(jié),所有的修改只發(fā)生在你的遠(yuǎn)程倉庫中空幻,原作者的代碼倉庫內(nèi)容是不會(huì)發(fā)生任何改變的烁峭。這里最需要理解的是,“Clone” 下來的本地倉庫連接的是你 GitHub 上的遠(yuǎn)程倉庫秕铛。

2. 開始參與開發(fā)前的一些準(zhǔn)備

(1)在你做任何開發(fā)前约郁,最好先詳細(xì)閱讀該項(xiàng)目的?CONTRIBUTING.md 文件

(2)瀏覽該項(xiàng)目的?Issues(問題)公告但两,甚至可以自己創(chuàng)建一個(gè)?Issue鬓梅。

(3)一般不要將自己做的修改提交到?master branch(主分支)上,而是應(yīng)該提交到某個(gè)明確的?topic branch(主題分支谨湘,解決某個(gè)bug或者添加某一功能的分支)上绽快。注意,我們應(yīng)該自己建一個(gè) topic branch紧阔,然后在上面作修改谎僻,而不在 master 分支直接修改,因?yàn)檫@樣更具有直觀性寓辱。

(4)最好每次只提交較小的修改艘绍,并寫好清晰明確的?Commit Messages(提交說明).

(5)如果有需要,請(qǐng)更新?README 文件秫筏。

3. 創(chuàng)建一個(gè) Pull Request

? ? ? ?按自己的需要去修改項(xiàng)目?jī)?nèi)容诱鞠,然后將所做的修改提交(Add+Commit)到自己的代碼倉庫挎挖,接著到倉庫頁面,點(diǎn)擊?New pull request?按鈕航夺。

? ? ? ?點(diǎn)擊去之后可以看到蕉朵,左邊紅框是你 “Fork” 的原項(xiàng)目倉庫和分支,右邊紅框是你當(dāng)前選擇的項(xiàng)目倉庫和分支阳掐。其實(shí)這里就是將兩個(gè)紅框內(nèi)的內(nèi)容作對(duì)比始衅,并把不相同的地方顯示出來。因?yàn)榇藭r(shí)兩個(gè)倉庫和分支的內(nèi)容是完全一樣的缭保,所有沒有什么信息顯示出來(我沒有做修改)汛闸。不太理解的話,可以自由去嘗試四個(gè)下拉框里不同的選項(xiàng)艺骂,很快你就會(huì)知道是怎么回事了诸老。

? ? ? ?我這里任意選擇了原項(xiàng)目的另一個(gè)分支,因?yàn)檫@兩個(gè)分支不完全相同钳恕,所以可以看到出現(xiàn)了一個(gè)?“Create pull request”?的按鈕别伏,點(diǎn)擊它。

? ? ? ?填寫你的請(qǐng)求信息忧额,說明你做了些什么之類的厘肮。這個(gè)請(qǐng)求是發(fā)給該項(xiàng)目的維護(hù)者(擁有者)的,完成之后點(diǎn)擊?“Create pull request”?按鈕即可睦番。

? ? ? ?之后項(xiàng)目的維護(hù)者會(huì)受到你的請(qǐng)求类茂,只要他/她通過了你的請(qǐng)求,你所做的修改就會(huì)被整合到原項(xiàng)目的倉庫里了抡砂。

左邊是你的本地倉庫,中間是你在 GitHub 上 Fork 建立的倉庫恬涧,右邊是項(xiàng)目的原倉庫注益。

4. 與原倉庫保持同步更新

? ? ? ?說到合作開發(fā)就會(huì)有一個(gè)問題,如何與他人的代碼保持同步溯捆?在自己做開發(fā)的過程中丑搔,難免會(huì)遇到你 “Fork” 的項(xiàng)目已經(jīng)有了新的更新,這時(shí)當(dāng)然是希望自己倉庫中的代碼也能同步進(jìn)行更新提揍∑≡拢可是,你本地倉庫所連接的遠(yuǎn)程倉庫的是你自己的 GitHub 倉庫劳跃,而不是原作者的倉庫谎仲。解決方法其實(shí)很簡(jiǎn)單,為你的本地倉庫再添加一個(gè)遠(yuǎn)程倉庫源刨仑。

查看當(dāng)前項(xiàng)目所連接的遠(yuǎn)程倉庫

打開終端郑诺,進(jìn)入到項(xiàng)目的 Git 倉庫所在目錄夹姥,一般就是項(xiàng)目目錄,輸入:

git remote -v

? ? ? 可以看到目前只連接了我自己的遠(yuǎn)程倉庫辙诞。

添加原作者的遠(yuǎn)程倉庫連接

git remote add upstream https://github.com/GoogleChrome/lighthouse.git

(注意替換原倉庫的 http 鏈接)

? ? ? 如圖辙售,現(xiàn)在已經(jīng)成功添加原項(xiàng)目的遠(yuǎn)程倉庫了。

還差一點(diǎn)就大功告成了

(1)從原倉庫獲取最新版本到本地

git fetch upstream master

(2)保證當(dāng)前位于 master 分支上

git checkout master

(3)將最新版本整合到本地 master 分支上

git merge upstream/master

(4)將更新發(fā)送到自己的 GitHub 倉庫里

git push origin master

(1)(2)(3)步可以用

git pull upstream master

這條命令替代飞涂,可以這樣不太安全旦部,因?yàn)槟?fetch(獲取)之后可以通過

gitlog--oneline --graph --decorate --all

來查看更新的情況较店,再?zèng)Q定是否?merge(整合)到一起士八。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市泽西,隨后出現(xiàn)的幾起案子曹铃,更是在濱河造成了極大的恐慌,老刑警劉巖捧杉,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件陕见,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡味抖,警方通過查閱死者的電腦和手機(jī)评甜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來仔涩,“玉大人忍坷,你說我怎么就攤上這事∪壑” “怎么了佩研?”我有些...
    開封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)霞揉。 經(jīng)常有香客問我旬薯,道長(zhǎng),這世上最難降的妖魔是什么适秩? 我笑而不...
    開封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任绊序,我火速辦了婚禮,結(jié)果婚禮上秽荞,老公的妹妹穿的比我還像新娘骤公。我一直安慰自己,他們只是感情好扬跋,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開白布阶捆。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪趁猴。 梳的紋絲不亂的頭發(fā)上刊咳,一...
    開封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天,我揣著相機(jī)與錄音儡司,去河邊找鬼娱挨。 笑死,一個(gè)胖子當(dāng)著我的面吹牛捕犬,可吹牛的內(nèi)容都是我干的跷坝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼碉碉,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼柴钻!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起垢粮,我...
    開封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤贴届,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后蜡吧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體毫蚓,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年昔善,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了元潘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡君仆,死狀恐怖翩概,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情返咱,我是刑警寧澤钥庇,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站咖摹,受9級(jí)特大地震影響评姨,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜楞艾,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一参咙、第九天 我趴在偏房一處隱蔽的房頂上張望龄广。 院中可真熱鬧硫眯,春花似錦、人聲如沸择同。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敲才。三九已至裹纳,卻和暖如春择葡,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背剃氧。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來泰國打工敏储, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朋鞍。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓已添,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親滥酥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子更舞,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 金蟾望月月無華,青頭觀龍龍有靈坎吻。 迷洞縈回?zé)o去處缆蝉,飛石無聲鳥獸散。
    唐璜一閱讀 190評(píng)論 0 0
  • 晴空如洗瘦真,坐一朵巨大的云刊头。 你靜立草原,裙裾飛揚(yáng)吗氏, 孤單的影子瘦成芒草芽偏。 及腰的黑精靈笑出聲來, 沙啞弦讽,蒼涼污尉,溫柔...
    司徒鏡心閱讀 280評(píng)論 0 1
  • 2015年收官,并不算完美往产,各大品類綠意盎然被碗。 在這一片綠色之中,竟然還顯現(xiàn)著一抹紅仿村,額外耀眼锐朴。飄紅的品類逆市飛揚(yáng)...
    柳二白閱讀 492評(píng)論 0 0