因?yàn)槲?Fork 了 Mojo 的項(xiàng)目,這樣才學(xué)會(huì)了如何使用 github. 因?yàn)槠渌恍╉?xiàng)目是自己創(chuàng)建的,也就學(xué)不會(huì)怎么和其它團(tuán)隊(duì)合作。 現(xiàn)在給這部分不一樣的經(jīng)驗(yàn)分享給大家。希望有利于大家參與到開源的項(xiàng)目來。
1. 提交自己本地項(xiàng)目的修改到 github 的庫中.
如果你自己的項(xiàng)目,或者是其它人的項(xiàng)目, 你 Fork 了以后, 一定是到本地來進(jìn)行開發(fā)和測(cè)試。所以當(dāng)你自己給自己的項(xiàng)目 clone 到本地后, 進(jìn)行了一系列的修改后, 當(dāng)你想提交時(shí), 最方便的方式是直接使用 HTTP 的方式進(jìn)行提交。 但當(dāng)你提交的時(shí)候, 就會(huì)發(fā)現(xiàn)一直權(quán)限出錯(cuò)的提示:
error: The requested URL returned error: 403 Forbidden while accessing http://xxx
這時(shí), 你需要修改你的項(xiàng)目目錄下的 .git/config 這個(gè) git 的配置文件。給其中的 url 選項(xiàng)中修改如下:
url = https://iakuf@github.com/iakuf/mojo
這其實(shí)就是給你的 github 的帳號(hào)名, 通過 @ 加到 URL 的前半部分, 這樣才能成為 HTTP 認(rèn)證的用戶信息來進(jìn)行接下來的認(rèn)證. 這樣就不用關(guān)心 SSH 的 Key 的問題了。
2. 當(dāng)自己 Fork 后的項(xiàng)目更新后, 提交 ( Pull Requests) 給原作者合并
我原來一直使用 github 但只會(huì)提交修改, 后來在陳子的指導(dǎo)下學(xué)會(huì)了 Pull Requests 到原來的作者。其實(shí)很簡單。 在界面上邊有個(gè) Pull Requests。
點(diǎn)進(jìn)去, 然后就可以見到你和原作者項(xiàng)目的差異的代碼,上面有個(gè) "Create pull request". 點(diǎn)擊后會(huì)讓你寫上本次提交合并“主題”,還有相關(guān)提交修改的內(nèi)容的一些介紹, 這方便原作者理解和了解你的修改,并會(huì)考慮是否給你的提交合并到他自己本身的代碼。 寫完這些信息后, 然后提交過去。 作者的項(xiàng)目就會(huì)收到你這個(gè)請(qǐng)求了。如果他認(rèn)為你寫的代碼沒問題,介紹也合理, 就會(huì)合并到你的代碼到他的主代碼中。
3. 更新自己 Fork 的代碼項(xiàng)目和原作者的項(xiàng)目進(jìn)度一致的方法
經(jīng)過一段時(shí)間, 有可能作者原來的代碼變化很大, 你想接著在他最新的代碼上修改, 這時(shí)你需要合并原作者的最新代碼過來, 讓你的項(xiàng)目變成最新的。這個(gè)需要接著在你的本地操作。假設(shè)前提是, 你現(xiàn)在你的代碼是克隆下來在本地的。 例如我 Fork 了 sri (Mojo 的作者) 的 Mojo 項(xiàng)目, 我的項(xiàng)目地址是 https://github.com/iakuf/mojo. 我現(xiàn)在克隆這個(gè)在我的本地了。
git clone https://github.com/iakuf/mojo
cd mojo
接著, 我只需要添加 sri 項(xiàng)目的地址,也就是主項(xiàng)目的 remote 地址, 我們加入后, 給代碼 fetch 過來, 然后進(jìn)行 merge 的合并操作。
git remote add sri https://github.com/kraih/mojo
git fetch sri
git merge sri/master
這樣就能給你的當(dāng)前本地的項(xiàng)目變成和原作者的主項(xiàng)目一樣。 然后你按正常的流程進(jìn)行修改并提交到你的項(xiàng)目就好了。
git commit -am '更新到原作者的主分支的進(jìn)度'
git push origin
要接著給修改提交給原作者,請(qǐng)參照第二步。