[教學] 如何自由參與開放原碼專案開發 - 討論區

[教學] 如何自由參與開放原碼專案開發

文章瀏覽次數 632 文章回覆數 11

coscell

coscell圖像(預設)

2021-01-05 11:33:42

From:180.176.111.5

學了幾年程式設計,是不是躍躍欲試想要大展身手?
這通常有兩種管道:
一種是已經有自己的想法,開始閉門造車做出自己的作品。
如果還沒有想法,可以考慮參與有興趣的開放專案。

後者可以觀摩別人的作法,學習的價值大於作品。
還能認識一群同道,拓展視野人脈。
吸取經驗的同時還能順便有所貢獻,留下紀錄,一舉數得。

以下就來說明身為名不見經傳的路人甲要如何參與別人專案的流程,
期間用到的指令(git)如果還不熟悉,
推薦可以參閱特種兵的教學。

  1. https://github.com 註冊一個帳號。
  2. 連線到你想參與的專案頁面,例如 NVDA: https://github.com/nvaccess/nvda
    上面的 nvaccess 就是 github 上的帳號兒 nvda 就是他的專案名稱或資料夾。
  3. 點晉謁面上的 fork 連結就會複製一份專案原碼到你註冊的帳號下。
  4. 關閉瀏覽器回到本機建立一個專案資料夾例如 nvda。
  5. 執行指令進入建立好的資料夾例如 cd nvda
  6. 執行指令複製剛才 fork 的專案原碼例如 git clone https://github.com/coscell/nvda.git
  7. 建立一個要修改的任務分之並進入該分之例如 git branch -b mytask
  8. 開始大展身手進行修改,過程中記得隨時將修改過和心增加的檔案送入站存區 git add 檔案名稱
  9. 完成一個小階段要提交成果 git commit -m "此處簡要描述提交內容"
  10. 最後一次 commit 任務就完成了就要把成果推送出去,但是等等。
    由於完成任務一定需要一段不短的時間,這段時間內可能原來的專案原碼已經更動多次,
    為了盡量減小衝突的機率,我們推送成果之前先要合併原來的專案原碼,
    最簡單的作法就是回到原來的專案網頁再 fork 一次。
    接著回到本機專案資料夾,先切回本之 git checkout master
    再合併原碼 git pull
  11. 推送成果 git push origin mytask
  12. 連上您的 github 帳號下的專案網頁例如 https://github.com/coscell/nvda
    點進 pull request -> create pull request 田選所需資料就可以等候原來的專案管理員處理了。

期待哪天能在某個專案李看到你的大名喔!
※最後更新時間:2021-01-11 11:15:08 From:211.23.21.202 By:特種兵

留言

#1

特種兵

特種兵圖像(預設)

2021-01-07 09:28:03

From:211.23.21.202

想確認一下,既然是在其他分支開發,也是上傳該分支
那為什麼還要處理 master?

#2

coscell

coscell圖像(預設)

2021-01-07 12:22:39

From:180.176.111.5

你只哪個步驟?

#3

阿慶

阿慶圖像

2021-01-07 15:46:18

From:211.23.21.202

應該只要處理好自己分支就OK了
提出pull request讓作者來把自己的分支合併到master

#4

特種兵

特種兵圖像(預設)

2021-01-07 22:55:03

From:1.161.140.230

為了盡量減小衝突的機率,我們推送成果之前先要合併原來的專案原碼,
最簡單的作法就是回到原來的專案網頁再 fork 一次。
接著回到本機專案資料夾,先切回本之 git checkout master
再合併原碼 git pull

  1. 推送成果 git push origin mytask

#5

coscell

coscell圖像(預設)

2021-01-08 10:16:50

From:180.176.111.5

上面有說為了避免衝突,這時候 pull 它會告知有否衝突。

#6

特種兵

特種兵圖像(預設)

2021-01-08 13:43:14

From:211.23.21.202

既然是另外開分支作業,這樣會跟誰衝突?
除非有要併到 master 裡面

#7

coscell

coscell圖像(預設)

2021-01-08 15:04:26

From:180.176.111.5

開闢分之的目的市為了不要影響 master, 但是任務完成後還是要歸入 master.
既然你要提出 pull reques 當然也教表示你的任務已經完成。

#8

特種兵

特種兵圖像(預設)

2021-01-09 18:21:35

From:1.161.138.243

文中好像沒提到合併進 master 的過程操作,還是說他把這些都減化了?

#9

tsengwoody

tsengwoody圖像(預設)

2021-01-09 20:21:20

From:220.135.204.66

合併進最終的 master 是你 pull requests 後由管理者進行的,在 pull request 設定時會要選用哪個分支,以文中例子就是選 mytask 分支
從後續看是推送 mytask 分支,第 10 點的部份省略了從 master 合併到 mytask 的說明,只提到 git pull
git pull 就會做 fetch+merge 沒錯,前提是要設定好 tracking branch
所以第10點是有些問題的,只切 master 下 git pull 只有 master 更新合併,並沒有在 mytask 上更新合併,應改為以下幾種方式之一
(1) 切 master 下 git pull 然後切回 mytask 在 git merge master
(2) 設定好 mytask 的tracking branch(origin/master) 由 git pull 幫你做
(3) 下 git fetch 然後在 mytask 上 git merge origin/master
補充一下用 git clone 其實就會將 origin 設定為 clone 的倉庫地址,所以 git fetch 也才知道去哪捉資料

#10

coscell

coscell圖像(預設)

2021-01-13 12:25:36

From:180.176.111.5

感謝無敵大師指正!
我在 push 之前確實沒有 merge 但是原作者還是合併到了我的 mytask 請教這是怎麼回事?
還有能請您補充 pull request 的步驟嘛?
網頁實在看不太懂,純粹亂點誤打誤撞成功的,謝謝!

#11

tsengwoody

tsengwoody圖像(預設)

2021-01-14 20:58:30

From:220.135.204.66

到要 pull request 的倉庫點 repository 連結->New pull request
分別選擇好 base repository/base, head repository/compare
base repository/base 是要合併更新的專案倉庫與分支,預設分支應是該 repository 的 master 以 nvda 來舉例就是 nvaccess/nvda:master
head repository/compare 是開發者完成的倉庫與分支,以我舉例就是 tsengwoody/nvda:master
這4個選好了就可以 create pull request 了
如果是沒有 merge 還是有成功更新給開發者的話,推測是用 pull 自動合併了吧,但看步驟又有切回 master 並 git push 所以才覺得有點怪,可能有記錯或是一些我不知道的自動處理吧,還有一種可能是以下情形
依文中第 10 點做完是更新了本地 master 的資料(不是 mytask 的),但第 11 點的 git push origin mytask 是將本地的 mytask 推到 github 上自己倉庫的 mytask 分支,這時 mytask 是沒合併 master 的內容才對,所以猜測有可能是你 PR 了 mytask 分支,然後管理者合併時沒衝突或幫忙解了後合併
PS:我不是大師只是個小碼農~