6.3 維護(hù)項(xiàng)目

2018-02-24 15:22 更新

維護(hù)項(xiàng)目

現(xiàn)在我們可以很方便地向一個(gè)項(xiàng)目貢獻(xiàn)內(nèi)容,來看一下另一個(gè)方面的內(nèi)容:創(chuàng)建、維護(hù)和管理你自己的項(xiàng)目。

創(chuàng)建新的版本庫(kù)

讓我們創(chuàng)建一個(gè)版本庫(kù)來分享我們的項(xiàng)目。通過點(diǎn)擊面板右側(cè)的“New repository”按鈕,或者頂部工具條你用戶名旁邊的 + 按鈕來開始我們的旅程。 參見 Figure?6-30。

Figure 6-30. 這是 “New repository” 下拉列表.

這會(huì)帶你到 “new repository” 表單:

“檢出遠(yuǎn)程分支”._ 講到它。如果你愿意,你可以創(chuàng)建并切換到一個(gè)主題分支,然后運(yùn)行這個(gè)命令把合并請(qǐng)求合并進(jìn)來。

還有一些有趣的 URL,像 .diff.patch ,就像你猜的那樣,它們提供 diff 和 patch 的標(biāo)準(zhǔn)版本。你可以技術(shù)性地用下面的方法合并“合并請(qǐng)求”:

$ curl http://github.com/tonychacon/fade/pull/1.patch | git am

在合并請(qǐng)求上進(jìn)行合作

就像我們?cè)?“GitHub 流程”,_ 說過的,現(xiàn)在你可以跟開啟合并請(qǐng)求的人進(jìn)行會(huì)話。你既可以對(duì)某些代碼添加注釋,也可以對(duì)整個(gè)提交添加注釋或?qū)φ麄€(gè)合并請(qǐng)求添加注釋,在任何地方都可以用 GitHub Flavored Markdown。

每次有人在合并請(qǐng)求上進(jìn)行注釋你都會(huì)收到通知郵件,通知你哪里發(fā)生改變。他們都會(huì)包含一個(gè)到改變位置的鏈接,你可以直接在郵件中對(duì)合并請(qǐng)求進(jìn)行注釋。

“引用規(guī)格” 有更多的細(xì)節(jié)說明。

實(shí)際上 GitHub 在服務(wù)器上把合并請(qǐng)求分支視為一種 “假分支”。默認(rèn)情況下你克隆時(shí)不會(huì)得到它們,但它們還是隱式地存在,你可以很容易地訪問到它們。

為了展示這個(gè),我們要用到一個(gè)叫做 ls-remote 的低級(jí)命令(通常被叫做“plumbing”,我們會(huì)在 “底層命令和高層命令” 讀到更多相關(guān)內(nèi)容)。這個(gè)命令在日常 Git 操作中基本不會(huì)用到,但在顯示服務(wù)器上有哪些引用(reference)時(shí)很管用。

如果在我們之前用過的 “blink” 版本庫(kù)上使用這個(gè)命令,我們會(huì)得到一個(gè)版本庫(kù)里所有的分支,標(biāo)簽和其它引用(reference)的列表。

$ git ls-remote https://github.com/schacon/blink
10d539600d86723087810ec636870a504f4fee4d    HEAD
10d539600d86723087810ec636870a504f4fee4d    refs/heads/master
6a83107c62950be9453aac297bb0193fd743cd6e    refs/pull/1/head
afe83c2d1a70674c9505cc1d8b7d380d5e076ed3    refs/pull/1/merge
3c8d735ee16296c242be7a9742ebfbc2665adec1    refs/pull/2/head
15c9f4f80973a2758462ab2066b6ad9fe8dcf03d    refs/pull/2/merge
a5a7751a33b7e86c5e9bb07b26001bb17d775d1a    refs/pull/4/head
31a45fc257e8433c8d8804e3e848cf61c9d3166c    refs/pull/4/merge

當(dāng)然,如果你在你自己的版本庫(kù)或其它你想檢查的遠(yuǎn)程版本庫(kù)中使用 git ls-remote origin ,它會(huì)顯示相似的內(nèi)容。

如果版本庫(kù)在 GitHub 上并且有打開的合并請(qǐng)求,你會(huì)得到一些以 refs/pull/ 開頭的引用。它們實(shí)際上是分支,但因?yàn)樗鼈儾辉?refs/heads/ 中,所以正常情況下你克隆時(shí)不會(huì)從服務(wù)器上得到它們?—?抓取過程正常情況下會(huì)忽略它們。

每個(gè)合并請(qǐng)求有兩個(gè)引用 - 其中以 /head 結(jié)尾的引用指向的提交記錄與合并請(qǐng)求分支中的最后一個(gè)提交記錄是同一個(gè)。所以如果有人在我們的版本庫(kù)中開啟了一個(gè)合并請(qǐng)求,他們的分支叫做 bug-fix,指向 a5a775 這個(gè)提交記錄,那么在 我們的 版本庫(kù)中我們沒有 bug-fix 分支(因?yàn)槟鞘窃谒麄兊?fork 中),但我們 可以 有一個(gè) pull/<pr#>/head 指向 a5a775。這意味著我們可以很容易地拉取每一個(gè)合并請(qǐng)求分支而不用添加一堆 remote。

現(xiàn)在,你可以像直接抓取引用一樣抓取那些分支或提交。

$ git fetch origin refs/pull/958/head
From https://github.com/libgit2/libgit2
 * branch            refs/pull/958/head -> FETCH_HEAD

這告訴 Git: “連接到 origin 這個(gè) remote,下載名字為 refs/pull/958/head 的引用?!盙it 高高興興去執(zhí)行,下載構(gòu)建那個(gè)引用需要的所有內(nèi)容,然后把指針指向 .git/FETCH_HEAD 下面你想要的提交記錄。然后你可以用 git merge FETCH_HEAD 把它合并到你想進(jìn)行測(cè)試的分支,但那個(gè)合并的提交信息看起來有點(diǎn)怪。然而,如果你需要審查 一大批 合并請(qǐng)求,這樣操作會(huì)很麻煩。

還有一種方法可以抓取 所有的 合并請(qǐng)求,并且在你連接到遠(yuǎn)程(remote)的時(shí)候保持更新。用你最喜歡的編輯器打開 .git/config ,查找 origin 遠(yuǎn)程(remote)。看起來差不多像下面這樣:

[remote "origin"]
    url = https://github.com/libgit2/libgit2
    fetch = +refs/heads/*:refs/remotes/origin/*

fetch = 開頭的行是一個(gè) “refspec.”它是一種把 remote 的名稱映射到你本地 .git 目錄的方法。這一條(就是上面的這一條)告訴 Git,“remote 上 refs/heads 下面的內(nèi)容在我本地版本庫(kù)中都放在 refs/remotes/origin 。”你可以把這一段修改一下,添加另一個(gè) refspec:

[remote "origin"]
    url = https://github.com/libgit2/libgit2.git
    fetch = +refs/heads/*:refs/remotes/origin/*
    fetch = +refs/pull/*/head:refs/remotes/origin/pr/*

最后一行告訴 Git: “所有看起來像 refs/pull/123/head 的引用應(yīng)該在本地版本庫(kù)像 refs/remotes/origin/pr/123 一樣存儲(chǔ)”現(xiàn)在,如果你保存那個(gè)文件,執(zhí)行 git fetch

$ git fetch
# …
 * [new ref]         refs/pull/1/head -> origin/pr/1
 * [new ref]         refs/pull/2/head -> origin/pr/2
 * [new ref]         refs/pull/4/head -> origin/pr/4
# …

現(xiàn)在所有的合并請(qǐng)求在本地像分支一樣展現(xiàn),它們是只讀的,當(dāng)你執(zhí)行抓取時(shí)它們也會(huì)更新。這讓在本地測(cè)試合并請(qǐng)求中的代碼變得超級(jí)簡(jiǎn)單:

$ git checkout pr/2
Checking out files: 100% (3769/3769), done.
Branch pr/2 set up to track remote branch pr/2 from origin.
Switched to a new branch 'pr/2'

你的鷹眼系統(tǒng)會(huì)發(fā)現(xiàn)在 refspec 的 remote 部分的結(jié)尾有個(gè) head 。在 GitHub 那邊也有一個(gè) refs/pull/#/merge 引用,它代表的是如果你在網(wǎng)站上按了 “merge” 按鈕對(duì)應(yīng)的提交記錄。這甚至讓你可以在按按鈕之前就測(cè)試這個(gè)合并。

合并請(qǐng)求之上的合并請(qǐng)求

你不僅可以在主分支或者說 master 分支上開啟合并請(qǐng)求,實(shí)際上你可以在網(wǎng)絡(luò)上的任何一個(gè)分支上開啟合并請(qǐng)求。其實(shí),你甚至可以在另一個(gè)合并請(qǐng)求上開啟一個(gè)合并請(qǐng)求。

如果你看到一個(gè)合并請(qǐng)求在向正確的方向發(fā)展,然后你想在這個(gè)合并請(qǐng)求上做一些修改或者你不太確定這是個(gè)好主意,或者你沒有目標(biāo)分支的推送權(quán)限,你可以直接在合并請(qǐng)求上開啟一個(gè)合并請(qǐng)求。

當(dāng)你開啟一個(gè)合并請(qǐng)求時(shí),在頁(yè)面的頂端有一個(gè)框框顯示你要合并到哪個(gè)分支和你從哪個(gè)分支合并過來的。如果你點(diǎn)擊那個(gè)框框右邊的 “Edit” 按鈕,你不僅可以改變分支,還可以選擇哪個(gè) fork。

Figure 6-38. 輸入 @ 來提醒某人.

你也可以提醒不在列表中的用戶,但是通常自動(dòng)補(bǔ)全用起更快。

當(dāng)你發(fā)布了一個(gè)帶用戶提醒的評(píng)論,那個(gè)用戶會(huì)收到通知。這意味著把人們拉進(jìn)會(huì)話中要比讓他們投票有效率得多。對(duì)于 GitHub 上的合并請(qǐng)求,人們經(jīng)常把他們團(tuán)隊(duì)或公司中的其它人拉來審查問題或合并請(qǐng)求。

如果有人收到了合并請(qǐng)求或問題的提醒,他們會(huì)"訂閱"它,后面有新的活動(dòng)發(fā)生他們都會(huì)持續(xù)收到提醒。如果你是合并請(qǐng)求或者問題的發(fā)起方你也會(huì)被訂閱上,比如你在關(guān)注一個(gè)版本庫(kù)或者你評(píng)論了什么東西。如果你不想再收到提醒,在頁(yè)面上有個(gè) “Unsubscribe” 按鈕,點(diǎn)一下就不會(huì)再收到更新了。

Figure 6-40. 通知中心選項(xiàng).

有兩個(gè)選項(xiàng),通過"郵件(Email)"和通過"網(wǎng)頁(yè)(Web)",你可以選用一個(gè)或者都不選或者都選。

網(wǎng)頁(yè)通知

網(wǎng)頁(yè)通知只在 GitHub 上存在,你也只能在 GitHub 上查看。如果你打開了這個(gè)選項(xiàng)并且有一個(gè)你的通知,你會(huì)在你屏幕上方的通知圖標(biāo)上看到一個(gè)小藍(lán)點(diǎn)。參見 Figure?6-41。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)