# 理解如何在Github使用Pull Request (PR) tags: `Github` `git clone` `git pull` `Pull Request` `codeshiba` ## 學習重點 1. ``git clone`` 完整複製他人專案到自己電腦 2. 建立與切換 branch 3. 設定 upstream 4. 發送 Pull Request 請求合併 5. ``git pull`` 更新既有專案狀態至最新 6. ``clone``和``pull``差別在哪 7. 總結 Pull Request 的流程 8. 為什麼需要透過 Pull Request 來開發 ### 1.``git clone`` 完整複製他人專案到自己電腦 - 找到想要複製的專案頁面,這邊複製的是「mentor-program-2nd」 - 點擊「code」,選擇「SSH」,複製「git@.....」整串指令並貼至終端機內。這樣就能把整個專案內容複製一份到本機,且存在同名的目錄裡。  > [高見龍:這裡指的「內容」不是只有檔案,而是指所有整個專案的歷史紀錄、分支、標籤等內容都會複製一份下來。](https://gitbook.tw/chapters/github/clone-repository.html) - 下載回來後,可以看到同名的目錄,以及目前處於``main``分支。  ### 2. 建立與切換 branch - 新增名為「judy-mission-19」的分支,在終端機中輸入``git branch judy-mission-19``  - 輸入``git branch``查看,確實已成功建立分支  (按鍵盤``q``離開) - 輸入``git checkout judy-mission-19``從「main」切換至「judy-mission-19」分支  - 在此分支之下,新增名為「judy」的資料夾,並於其中再新增「mission19」資料夾,在資料夾內新增檔案。  - 輸入指令``git add .``把所有異動加入工作目錄索引之中。 - 輸入指令``git commit -m "add description.md"``在字串中說明異動內容,並把異動提交到本機端儲存庫中。(這裡我說明自己新增了一個名為「description」的md檔) - 可以輸入指令``git status``檢查目前為止的狀態,查看有沒有什麼異動漏掉提交的。如果已經是最新狀態,就會顯示「working tree clean」  ### 3. 設定 upstream - 輸入指令``git push``把所有修改推上Github專案中 - 這邊git跳出錯誤提示,告知遠端並沒有相對應名稱的分支,git會不知道要推去給誰,指示我們``push``的同時需在遠端伺服器那邊也新增一個同名的分支作為上游(upstream)。  - 複製git給的指令 ``git push --set-upstream origin judy-mission-19`` 貼上再執行一次。 > [高見龍:設定 upstream 是什麼意思](https://gitbook.tw/chapters/github/push-to-github.html) - 顯示成功``push``上去。  ### 4. 發送 Pull Request 請求合併 到Github「mentor-program-2nd」專案頁面,點擊「New pull request」,比較「judy-mission-19」這個分支內所做的事情,與原本的「main」分支的差異。請原作者審核是否接受並``merge``。 點擊右上角綠色鍵  選擇要compare的分支名稱  PR頁面  可以在Pull Request列表中看到剛才提交的PR  ### 5. ``git pull`` 更新既有專案狀態至最新 團隊裡面的大家各自發了新的PR給專案管理者,經過merge之後,則此時專案內容已經跟我當初``clone``下來的不同,因此需要下``git pull``指令,把遠端最新狀態拉下來,更新至本機端。 之後若要再發新的PR,一樣是要再新創一個branch,切換分支,然後才去進行後續的異動。 ### 6. ``clone``和``pull``差別在哪 **git clone** 首次把別人的專案完整內容,下載到自己的本機端,是從無到有的過程。 **git pull** 則是已經下載回來的專案,更新至與遠端線上版狀態相同。也就是說本機端這邊,必須有一個既存專案,才會用``pull``去更新它。 ### 7. 總結 Pull Request 的流程 基本上就是 * clone專案下來至本機端 * 建立新branch並切換到新branch * 進行修改與commit * push上去Github * 發PR去比較新branch與main這個原本branch之間的差異,附上敘述告知專案管理者我做了什麼,管理者再審核是否接受這些修改並``merge``到「main」分支之中。 > [高見龍的文章教學還有多一個前置步驟「fork」](https://gitbook.tw/chapters/github/pull-request.html) > 是先把別人的專案「fork」到自己的Github帳號底下,才從自己帳號去「clone」到本機端。但「mentor-program-2nd」沒有開放「fork」功能,所以我省去「fork」步驟,直接把專案「clone」到我的本機。 ### 8. 為什麼需要透過 Pull Request 來開發 使用PR來進行專案的狀態修正與維護,能保障專案不會因為團隊成員中的任何一人,做了某項修改以後就直接覆蓋掉別人的貢獻。所有的異動提交,最終會由專案管理者審核接受與否,避免出錯。就是一種大家提出意見,主席最終裁定與彙整的概念。 而且PR的相關紀錄,團隊成員彼此都看得到,也能在上面進行修改討論,有助於開發互動。
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up