天天看點

多人協作 Git 部分

多人協作 Git 部分

文章目錄

  • ​​多人協作 Git 部分​​
  • ​​二、完成任務并推送到自己的倉庫​​
  • ​​三、提 PR & 檢查合并 PR​​
  • ​​四、同步主倉庫​​

以組員的身份克隆自己的 work 倉庫到實驗環境,由于之前已經設定了實驗環境的 SSH 公鑰到 GitHub,是以我們使用 git 開頭的位址來克隆:

多人協作 Git 部分

連結的結尾 .git 是不需要的:

多人協作 Git 部分

二、完成任務并推送到自己的倉庫

現在我們要完成組長倉庫的一個 issue,注意每個 issue 在建立後都會生成一個編号,我們首先完成 1 号 issue:

多人協作 Git 部分

建立檔案,添加到暫存區,送出,檢視本地倉庫分支狀态:

多人協作 Git 部分
多人協作 Git 部分

注意在執行 commit 指令時,備注資訊裡有個 “fix #1”,這是必要的,當備注資訊中含有此字樣的 commit 出現在組長倉庫,倉庫中編号為 #1 的 issue 就會自動關閉。類似的字樣還有 “fixes #xxx、fixed #xxx、closes #xxx、close #xxx、closed #xxx”,這些并不重要,選擇字母最少的 fix 就可以了。當然偶爾忘記寫這個字樣也不要緊的,issue 可以手動關閉,甚至關掉的 issue 還能再開。

完成以上操作,組員的 GitHub 倉庫會發生變化,新增一個版本号為 b374 的送出:

多人協作 Git 部分

三、提 PR & 檢查合并 PR

接下來,怎麼把修改從組員的倉庫添加到組長的倉庫呢?這就用到了 pull request 方法,簡稱 PR。這個詞組比較費解,兩個詞都有動詞屬性,字面意思是 “拉,請求”,可以了解為這是一個名詞性詞組,意為 “允許被拉取的請求”,建立一個 PR 就是從甲分支向乙分支提一個請求,該請求中有一個或多個送出,對方覺得可以、沒問題,就合并(merge) 這個請求,也就是把請求中所有送出的修改增加到乙分支上,整個過程簡稱 “提 PR”、“檢查合并 PR”。提 PR 既可以在倉庫内,也可以跨使用者跨倉庫。

好,現在我們從組員的 work 倉庫 master 分支給組長的 work 倉庫 master 分支提一個 PR:

多人協作 Git 部分

如下圖所示,仔細檢查紫色框中的内容是否正确,再看綠色橢圓形框中的綠色字樣 “Able to merge.”,說明這個 PR 中的修改跟目标分支沒有沖突:

多人協作 Git 部分

從上圖還可得知一些資訊:該 PR 裡有 1 個送出,1 個檔案改動,1 個貢獻者。點選上圖綠色按鈕跳轉到确認頁面,再次點選下圖綠色按鈕即可完成本次 “提 PR” 工作:

多人協作 Git 部分

完成後,頁面自動跳轉到組長的 work 倉庫 PR 的合并頁面:

多人協作 Git 部分

該頁面隻有參與項目協作的成員有權限進入,目前 GitHub 的登入使用者是組員,是以可見,且對這個倉庫有完全的管理權限,除了删除倉庫。當然了,檢查合并 PR 的權限也是有的。重要的一點:提了 PR 之後,一定要求參與項目的其他成員來檢查合并,不要自己來,盡管自己有權限。

上圖中綠色按鈕是個下拉按鈕,合并 PR 的方法有三種,分别解釋一下:

​Create a merge commit​

​ :這種方式會在組長倉庫的 master 分支上生成一個新的送出,且保留 PR 中的所有送出資訊。這是一種正常操作,用得最多。

​Squash and merge​

​ :壓縮合并,它會把 PR 中的全部送出壓縮成一個。此方法的優點就是讓送出清單特别整潔。一個 PR 裡有很多送出,每個送出都是很細小的改動,保留這些送出沒什麼意義,這種情況就使用此方法合并 PR。

​Rebase and merge​

​ :這種方法不會生成新的送出,例如 PR 中有 6 個送出,用此方法合并後,組長倉庫也會新增 6 個送出。注意,這些送出的版本号與組員的送出不同,此外完全一樣。

現在切換到另一個登入組長賬号的浏覽器,打開合并 PR 的頁面,用第一種方法合并:

多人協作 Git 部分

這就是第一種方式合并的結果,生成了一個新的送出,這個送出裡沒有修改。因為樣子不太美觀,這是我最不喜歡用的方式。仔細看上圖的 issue,變成了 1 個,也就是說在合并 PR 後,#1 issue 被關閉了。

以上就是一次完整的修改、送出、推送、提 PR、合并 PR 的過程。

需要注意的一點:從 A 向 B 提 PR 後,在 PR 合并或關閉前,A 上所有新增的送出都會出現在 PR 裡。

四、同步主倉庫

因為組長的 master 分支新增了一個空送出,是以需要讓組員的倉庫同步組長的倉庫,使它們的送出版本一緻。作為組員,要時刻保持自己的 master 分支與組長的一緻,以避免在下次提 PR 時出現沖突,該操作叫做 “同步主倉庫”,組長的倉庫就是主倉庫。

提 PR、合并 PR 隻能在 GitHub 頁面上操作。同步主倉庫是要用 Git 操作的。現在回到實驗環境中操作。首先,使用 ​

​remote​

​​ 系列指令來增加一個關聯主機,執行 ​

​git remote add [主機名] [主倉庫的位址]​

​,注意,主倉庫的位址使用 https 開頭的:

多人協作 Git 部分

如上圖所示,主機名是随意定義的,隻要不是 origin 就可以,因為自己的倉庫位址對應的主機名是 origin,主倉庫的主機名通常定義為 up 或 upstream,這個主機名其實就是一個變量,它的值就是倉庫位址,例如 ​

​git push origin master​

​​ 完全等于 ​

​git push [email protected]:Manchangdx/work master​

​ 。

如此說來,關聯主倉庫後也沒什麼變化嘛,确實如此,即使位址寫錯也不會報出來。現在可以使用前面課程介紹過的 ​

​fetch​

​ 指令來拉取主倉庫的全部分支資訊到本地倉庫了,我有時使用這個指令看上一個指令是否有拼寫錯誤:

多人協作 Git 部分
多人協作 Git 部分

如何同步主倉庫哩?方法有二,一是執行 ​

​git pull --rebase up master​

​​ ,此指令需聯網,二是執行 ​

​git rebase up/master​

​​,此指令不聯網,因為前面已經執行了 ​

​git fetch up​

​ 這個需要聯網的指令,本地已經有了最新的主倉庫 master 分支資訊,是以可以這麼操作。

總結一下:​

​git pull --rebase​

​​ = ​

​git fetch​

​​ + ​

​git rebase​

​。現在使用方法二來同步:

多人協作 Git 部分
多人協作 Git 部分