天天看點

【轉載】花20分鐘寫的-大白話講解如何給github上項目貢獻代碼

      本文獻給對 git 很迷茫的新手,注意是新手,但至少會點基本操作,有點基本概念的新手,我不會從怎麼用 github 和 git 是什麼開始講的。如果作為新手你看書又看不進去,原理又太複雜,有沒有直接了當告訴我們怎麼給項目貢獻代碼,并和項目同步代碼的大體流程。于是我快速寫了這麼個東西。一來整理下自己混亂的思路,二來想号召大家一起用 git 開發點東西,可是好幾個同鞋隻會寂寞的給自己 push。 

我先說下 我之前對 github 操作的一些迷茫曆程,然後之後是怎麼解惑的。 

1. 最最開始,我以為 git clone [項目位址],也就是把代碼 clone 下來然後修改,然後 push 到項目裡就可以了。 後來發現,這種情況隻适合該項目屬于你自己的情況,如果你 git clone 别人的項目代碼,你想push 都 push 不上去,因為 git push 不是需要你輸入github 帳号密碼麼。 

2. 然後我就知道了 github上 不是有個 fork 麼, 好,那麼給别人的項目送出代碼的方式就有了,先 fork 下别人的代碼,于是你的 github 上就出現了同名的項目,這個項目就屬于你自己了,你把這個自己的項目 git clone 到本地,修修改改,然後 push 到你自己的項目裡,那麼你如何把你對自己項目的改動,給發到之前 fork 的那個原項目呢,看見了沒,在 github 上你的項目頁面有個按鈕,叫 pull request,對 你點它就會把你的修改發到對方的項目裡,人還會收到郵件呢,由原項目主人決定是否接受你的修改。 

      但是,這樣問題就出來了,在你 fork 他的項目之後,如果他又更新了代碼,你自己 fork 的項目怎麼做到和原項目同步呢?  我就想啊,是不是我還得重新 git clone 原項目的代碼,然後手動合并到我 fork 的項目裡呢。。。 

      梁老師說,你丫這太蛋疼了,肯定不是這麼麻煩,我細想,也是啊,這不 2 麼。。。 

3. 然後,從《pro git》上看到一個知識點,我擦,github 居然可以給項目添加合作者,也就是說,假如你,對,說你呢,戴眼鏡那個,你想參與我的項目,你跟我說一聲,我就把你添加到我的項目裡作為合作者,這個選項在項目的設定裡面有,隻要我添加你了,你就可以 git clone 我的代碼然後修修改改,然後直接 push 上來就行了,就不用 fork 那麼麻煩了,如果你要更新伺服器代碼,隻要 git pull 就行了,看,合作者這東西多友善,就像我們在公司用 svn 似的。 

4. 然後我就想啊,有了合作者還需要你丫 fork 這個功能幹啥?仔細一想,你寫個好項目,不能随便加合作者啊,加了個熊孩子把你代碼改廢了可咋整,這年頭熊孩子很多,我自己不就是一個麼。是以 fork 肯定還是需要,fork 就是專門預防熊孩子的,這就是真相!那麼前面說到 fork 之後如何與原項目同步的問題還在啊,沒有得到解決。 

5. 于是《pro git》再次給了我一個解答,具體流程是你啊想給我的項目做貢獻,你先 git clone 我的代碼到本地,然後修修改改,然後你不是不能 push 到我的項目裡麼,你可以先在 github 頁面上 fork 我的項目,有了你自己的項目位址(url)之後呢,你在本地操作 git remote add [sort name] [your url],意思就是添加第二個遠端倉庫位址,這個倉庫的“昵稱”就是你剛指定的 [sort name],然後,你之後 push 檔案呢,就通過指定這個[sort name]來 push 到這個你自己的倉庫裡。等你覺得想要把你改的發給原項目同步,就在你的項目上點 pull request 按鈕。說下另一種情況,如果是原項目發生了改動,你要想同步到本地,就直接從 git fetch origin 從原項目的位址同步代碼,然後再 merge 就好了。當然,如《pro git》上所寫,你可以通過建立分支的方式往自己的項目上 push,這樣同步的時候直接 fetch 就行了。這塊如果我沒寫明白或者你想知道怎麼建立分支的方式 push 到自己的項目裡,可以直接參考《pro git》的“公開的小型項目”一節,那我的貢獻就是指點你如何從這本書裡快速的找到你想要的。= =。 

好了,時間有限,我寫的快不一定講明白,歡迎跟我讨論。 

感謝 linus,感謝 git,感謝 github,感謝 kindle,感謝《pro git》,感謝梁老師,感謝我自己,感謝所有的熊孩子們。