2
2
=== 遠端分支
3
3
4
4
(((branches, remote)))(((references, remote)))
5
- 遠端參照是位於遠端版本庫上的參照 ,包括分支、標籤等等 ;
5
+ 遠端參照(references)是位於遠端版本庫上的參照 ,包括分支(branch)、標籤(tag)等等 ;
6
6
你可以使用 `git ls-remote [remote]` 明確地列出遠端參照完整的列表,或者使用 `git remote show [remote]` 取得更多遠端分支資訊;
7
- 然而,更好的方式是利用「遠端追蹤分支」。
7
+ 然而,更好的方式是利用「遠端追蹤分支(remote-tracking branch) 」。
8
8
9
9
遠端追蹤分支用來記錄遠端分支的狀態,
10
10
它們是無法移動的本地參照,但是會根據網路通訊的結果而自動移動;
11
11
它扮演著書籤的角色,用來提醒你上次與遠端通訊後那些遠端上的分支所在之處。
12
12
13
13
它們採用 `(遠端)/(分支)` 這樣的形式,
14
14
例如,你想看上次與 `origin` 版本庫通訊後,它的 `master` 分支指向哪一個提交,你應該查看 `origin/master` 分支;
15
- 如果你和同伴一起修正某個議題,而他先推送 `iss53` 分支到遠端版本庫;雖然在你的本地端可能也有一個 `iss53` 分支,但伺服器上的 `iss53` 分支會跟 `origin/iss53` 指向同一個提交。
15
+ 如果你和同伴一起修正某個議題,而他先推送 `iss53` 分支到遠端版本庫;雖然在你的本地端可能也有一個 `iss53` 分支,但伺服器上的 `iss53` 分支會跟 `origin/iss53` 指向同一個提交(commit) 。
16
16
17
17
可能有點令人困惑,所以讓我們直接舉例說明;
18
18
假設你的網路有一個 Git 伺服器位於 `git.ourcompany.com`,
@@ -30,14 +30,14 @@ Git 也會建立屬於你自己的 `master` 本地分支,同樣地,它也指
30
30
.克隆後,伺服器和本地端的版本庫
31
31
image::images/remote-branches-1.png[克隆後,伺服器和本地端的版本庫。]
32
32
33
- 如果你在本地分支 `master` 做了一些工作,與此同時,有人推送到 `git.ourcompany.com` 而更新了伺服器上的 `master` 分支,這會讓你的提交歷史朝著不同方向發展;
33
+ 如果你在本地分支 `master` 做了一些工作,與此同時,有人推送(push)到 `git.ourcompany.com` 而更新了伺服器上的 `master` 分支,這會讓你的提交歷史朝著不同方向發展;
34
34
不過只要你不和伺服器連絡,你的 `origin/master` 指標並不會移動。
35
35
36
36
.本地和遠端的歷史分離開來
37
37
image::images/remote-branches-2.png[本地和遠端的歷史分離開來。]
38
38
39
39
執行 `git fetch origin` 可以同步遠端伺服器上的資料到本地,
40
- 該命令首先尋找 `origin` 是哪個伺服器(本例是 `git.ourcompany.com`),從上面獲取你尚未擁有的資料 ,更新你本地的資料庫,然後把 `origin/master` 指標同步到最新的位置。
40
+ 該命令首先尋找 `origin` 是哪個伺服器(本例是 `git.ourcompany.com`),從上面獲取(fetch)你尚未擁有的資料 ,更新你本地的資料庫,然後把 `origin/master` 指標同步到最新的位置。
41
41
42
42
.`git fetch` 會更新你的遠端參照
43
43
image::images/remote-branches-3.png[`git fetch` 會更新你的遠端參照。]
@@ -62,7 +62,7 @@ image::images/remote-branches-5.png[遠端追蹤分支 `teamone/master`。]
62
62
(((pushing)))
63
63
當你想跟世界分享某個分支,你需要把它推送到一個你擁有寫入權限的遠端版本庫;
64
64
你的本地分支並不會自動同步到遠端上——你必需明確地推送你想分享的分支;
65
- 透過這種方式,你可以將無意分享的分支保留下來做為私用分支,而只推送需要協同工作的主題分支 。
65
+ 透過這種方式,你可以將無意分享的分支保留下來做為私用分支,而只推送需要協同工作的主題(topic)分支 。
66
66
67
67
如果你有個叫做 `serverfix` 的分支需要和其他人一起開發,
68
68
執行 `git push <遠端> <分支>`:(((git commands, push)))
@@ -89,10 +89,10 @@ Git 會把 `serverfix` 分支名稱自動地擴展為 `refs/heads/serverfix:refs
89
89
[NOTE]
90
90
.不想每次都輸入密碼
91
91
====
92
- 如果你正在使用 HTTPS URL 推送資料,Git 伺服器為了核對身份會詢問你的帳號和密碼 ;
92
+ 如果你正在使用 HTTPS URL 推送資料,Git 伺服器為了核對身份(authentication)會詢問你的帳號和密碼 ;
93
93
預設情況它會在終端提示你輸入相關資訊,這樣伺服器才能分辨你是否有推送權限。
94
94
95
- 如果你不想每次推送時都輸入它們,你可以設置「證書快取」;
95
+ 如果你不想每次推送時都輸入它們,你可以設置「證書快取(credential cache) 」;
96
96
最簡單的方式是執行 `git config --global credential.helper cache` 將它保留記憶體幾分鐘。
97
97
98
98
詳見 <<_credential_caching>> 以取得各種可使用的、詳細的證書快取方式。
@@ -130,7 +130,7 @@ Switched to a new branch 'serverfix'
130
130
==== 追蹤分支
131
131
132
132
(((branches, tracking)))(((branches, upstream)))
133
- 從遠端追蹤分支身上檢出的本地分支會自動升級為「追蹤分支」(它所追蹤的分支則稱為「上游分支」),
133
+ 從遠端追蹤分支身上檢出的本地分支會自動升級為「追蹤分支(tracking branch) 」(它所追蹤的分支則稱為「上游分支(upstream branch) 」),
134
134
追蹤分支是一種和某個遠端分支有直接聯繫的本地分支;
135
135
如果你切換到追蹤分支並執行 `git pull`,Git 會自動分辨要從哪一個伺服器獲取資料,然後自動辨別要合併哪一個分支進來(譯註:就是合併上游分支)。
136
136
@@ -164,7 +164,7 @@ Branch sf set up to track remote branch serverfix from origin.
164
164
Switched to a new branch 'sf'
165
165
----
166
166
167
- 現在你的本地分支 `sf` 將會自動從 `origin/serverfix` 拉取資料 。
167
+ 現在你的本地分支 `sf` 將會自動從 `origin/serverfix` 拉取(pull)資料 。
168
168
169
169
如果你已經有一個本地分支,並且想要它追蹤一個你剛下載的遠端追蹤分支,或者想要改變追蹤上游分支,在任何時候都可以使用 `git branch` 的 `-u` 或 `--set-upstream-to` 選項來明確地設定。
170
170
@@ -182,7 +182,7 @@ Branch serverfix set up to track remote branch serverfix from origin.
182
182
====
183
183
184
184
如果你想知道你設定了哪些追蹤本支,你可以使用 `git branch` 的 `-vv` 選項;
185
- 它以更詳盡的資訊列出本地分支,其中包括了它追蹤的分支為何,它們是超前、落後,或者二者都有!?
185
+ 它以更詳盡的資訊列出本地分支,其中包括了它追蹤的分支為何,它們是超前(ahead) 、落後(behind) ,或者二者都有!?
186
186
187
187
[source,console]
188
188
----
0 commit comments