2
2
=== 远程分支
3
3
4
4
(((branches, remote)))(((references, remote)))
5
- 远程分支是对远程仓库的分支状态的引用(指针)。
6
- 你在本地不能移动远程分支,当你做任何网络通信操作时,它们会自动移动。
7
- 远程分支像是你上次连接到远程仓库时,那些分支所处状态的书签。
5
+ 远程引用是对远程仓库的引用(指针),包括分支、标签等等。
6
+ 你可以通过 `git ls-remote (remote)` 来显式地获得远程引用的完整列表,或者通过 `git remote show (remote)` 获得远程分支的更多信息。
7
+ 然而,一个更常见的做法是利用远程跟踪分支。
8
+
9
+ 远程跟踪分支是远程分支状态的引用。
10
+ 它们是你不能移动的本地引用,当你做任何网络通信操作时,它们会自动移动。
11
+ 远程跟踪分支像是你上次连接到远程仓库时,那些分支所处状态的书签。
8
12
9
13
它们以 `(remote)/(branch)` 形式命名。
10
14
例如,如果你想要看你最后一次与远程仓库 `origin` 通信时 `master` 分支的状态,你可以查看 `origin/master` 分支。
@@ -18,13 +22,15 @@ Git 也会给你一个与 origin 的 `master` 分支在指向同一个地方的
18
22
[NOTE]
19
23
.``origin'' 并无特殊含义
20
24
====
21
- 远程仓库名字 ``origin'' 与分支名字 ``master'' 一样,在 Git 中并没有任何特别的含义一样。同时 ``master'' 是当你运行 `git init` 时默认的起始分支名字,原因仅仅是它的广泛使用,``origin'' 是当你运行 `git clone` 时默认的远程仓库名字。如果你运行 `git clone -o booyah`,那么你默认的远程分支名字将会是 `booyah/master`。(((origin)))
25
+ 远程仓库名字 ``origin'' 与分支名字 ``master'' 一样,在 Git 中并没有任何特别的含义一样。
26
+ 同时 ``master'' 是当你运行 `git init` 时默认的起始分支名字,原因仅仅是它的广泛使用,``origin'' 是当你运行 `git clone` 时默认的远程仓库名字。
27
+ 如果你运行 `git clone -o booyah`,那么你默认的远程分支名字将会是 `booyah/master`。(((origin)))
22
28
====
23
29
24
30
.克隆之后的服务器与本地仓库
25
31
image::images/remote-branches-1.png[克隆之后的服务器与本地仓库。]
26
32
27
- 如果你在本地的 master 分支做了一些工作,然而在同一时间,其他人推送提交到 `git.ourcompany.com` 并更新了它的 `master` 分支,那么你的提交历史将向不同的方向前进。
33
+ 如果你在本地的 ` master` 分支做了一些工作,然而在同一时间,其他人推送提交到 `git.ourcompany.com` 并更新了它的 `master` 分支,那么你的提交历史将向不同的方向前进。
28
34
也许,只要你不与 origin 服务器连接,你的 `origin/master` 指针就不会移动。
29
35
30
36
.本地与远程的工作可以分叉
@@ -45,7 +51,7 @@ image::images/remote-branches-3.png[`git fetch` 更新你的远程仓库引用
45
51
image::images/remote-branches-4.png[添加另一个远程仓库。]
46
52
47
53
现在,可以运行 `git fetch teamone` 来抓取远程仓库 `teamone` 有而本地没有的数据。
48
- 因为那台服务器上现有的数据是 `origin` 服务器上的一个子集,所以 Git 并不会抓取数据而是会设置远程分支 `teamone/master` 指向 `teamone` 的 `master` 分支。
54
+ 因为那台服务器上现有的数据是 `origin` 服务器上的一个子集,所以 Git 并不会抓取数据而是会设置远程跟踪分支 `teamone/master` 指向 `teamone` 的 `master` 分支。
49
55
50
56
.远程跟踪分支 `teamone/master`
51
57
image::images/remote-branches-5.png[远程跟踪分支 `teamone/master`。]
@@ -83,9 +89,11 @@ Git 自动将 `serverfix` 分支名字展开为 `refs/heads/serverfix:refs/heads
83
89
[NOTE]
84
90
.如何避免每次输入密码
85
91
====
86
- 如果你正在使用 HTTPS URL 来推送,Git 服务器会询问用户名与密码。默认情况下它会在终端中提示服务器是否允许你进行推送。
92
+ 如果你正在使用 HTTPS URL 来推送,Git 服务器会询问用户名与密码。
93
+ 默认情况下它会在终端中提示服务器是否允许你进行推送。
87
94
88
- 如果不想在每一次推送时都输入用户名与密码,你可以设置一个 ``credential cache''。最简单的方式就是将其保存在内存中几分钟,可以简单地运行 `git config --global credential.helper cache` 来设置它。
95
+ 如果不想在每一次推送时都输入用户名与密码,你可以设置一个 ``credential cache''。
96
+ 最简单的方式就是将其保存在内存中几分钟,可以简单地运行 `git config --global credential.helper cache` 来设置它。
89
97
90
98
想要了解更多关于不同验证缓存的可用选项,查看 <<_credential_caching>>。
91
99
====
@@ -103,11 +111,11 @@ From https://github.com/schacon/simplegit
103
111
* [new branch] serverfix -> origin/serverfix
104
112
----
105
113
106
- 要特别注意的一点是当抓取到新的远程分支时 ,本地不会自动生成一份可编辑的副本(拷贝)。
114
+ 要特别注意的一点是当抓取到新的远程跟踪分支时 ,本地不会自动生成一份可编辑的副本(拷贝)。
107
115
换一句话说,这种情况下,不会有一个新的 `serverfix` 分支 - 只有一个不可以修改的 `origin/serverfix` 指针。
108
116
109
117
可以运行 `git merge origin/serverfix` 将这些工作合并到当前所在的分支。
110
- 如果想要在自己的 `serverfix` 分支上工作,可以将其建立在远程分支之上 :
118
+ 如果想要在自己的 `serverfix` 分支上工作,可以将其建立在远程跟踪分支之上 :
111
119
112
120
[source,console]
113
121
----
@@ -122,7 +130,7 @@ Switched to a new branch 'serverfix'
122
130
==== 跟踪分支
123
131
124
132
(((branches, tracking)))(((branches, upstream)))
125
- 从一个远程分支检出一个本地分支会自动创建一个叫做 ``跟踪分支''(有时候也叫做 ``上游分支'')。
133
+ 从一个远程跟踪分支检出一个本地分支会自动创建一个叫做 ``跟踪分支''(有时候也叫做 ``上游分支'')。
126
134
跟踪分支是与远程分支有直接关系的本地分支。
127
135
如果在一个跟踪分支上输入 `git pull`,Git 能自动地识别去哪个服务器上抓取、合并到哪个分支。
128
136
@@ -160,10 +168,12 @@ Branch serverfix set up to track remote branch serverfix from origin.
160
168
[NOTE]
161
169
.上游快捷方式
162
170
====
163
- 当设置好跟踪分支后,可以通过 `@{upstream}` 或 `@{u}` 快捷方式来引用它。所以在 `master` 分支时并且它正在跟踪 `origin/master` 时,如果愿意的话可以使用 `git merge @{u}` 来取代 `git merge origin/master`。
171
+ 当设置好跟踪分支后,可以通过 `@{upstream}` 或 `@{u}` 快捷方式来引用它。
172
+ 所以在 `master` 分支时并且它正在跟踪 `origin/master` 时,如果愿意的话可以使用 `git merge @{u}` 来取代 `git merge origin/master`。
164
173
====
165
174
166
- 如果想要查看设置的所有跟踪分支,可以使用 `git branch` 的 `-vv` 选项。这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。
175
+ 如果想要查看设置的所有跟踪分支,可以使用 `git branch` 的 `-vv` 选项。
176
+ 这会将所有的本地分支列出来并且包含更多的信息,如每一个分支正在跟踪哪个远程分支与本地分支是否是领先、落后或是都有。
167
177
168
178
[source,console]
169
179
----
@@ -174,9 +184,15 @@ $ git branch -vv
174
184
testing 5ea463a trying something new
175
185
----
176
186
177
- 这里可以看到 `iss53` 分支正在跟踪 `origin/iss53` 并且 ``ahead'' 是 2,意味着本地有两个提交还没有推送到服务器上。也能看到 `master` 分支正在跟踪 `origin/master` 分支并且是最新的。接下来可以看到 `serverfix` 分支正在跟踪 `teamone` 服务器上的 `server-fix-good` 分支并且领先 2 落后 1,意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送。最后看到 `testing` 分支并没有跟踪任何远程分支。
187
+ 这里可以看到 `iss53` 分支正在跟踪 `origin/iss53` 并且 ``ahead'' 是 2,意味着本地有两个提交还没有推送到服务器上。
188
+ 也能看到 `master` 分支正在跟踪 `origin/master` 分支并且是最新的。
189
+ 接下来可以看到 `serverfix` 分支正在跟踪 `teamone` 服务器上的 `server-fix-good` 分支并且领先 2 落后 1,意味着服务器上有一次提交还没有合并入同时本地有三次提交还没有推送。
190
+ 最后看到 `testing` 分支并没有跟踪任何远程分支。
178
191
179
- 需要重点注意的一点是这些数字的值来自于你从每个服务器上最后一次抓取的数据。这个命令并没有连接服务器,它只会告诉你关于本地缓存的服务器数据。如果想要统计最新的领先与落后数字,需要在运行此命令前抓取所有的远程仓库。可以像这样做:`$ git fetch --all; git branch -vv`
192
+ 需要重点注意的一点是这些数字的值来自于你从每个服务器上最后一次抓取的数据。
193
+ 这个命令并没有连接服务器,它只会告诉你关于本地缓存的服务器数据。
194
+ 如果想要统计最新的领先与落后数字,需要在运行此命令前抓取所有的远程仓库。
195
+ 可以像这样做:`$ git fetch --all; git branch -vv`
180
196
181
197
==== 拉取
182
198
@@ -203,4 +219,5 @@ To https://github.com/schacon/simplegit
203
219
- [deleted] serverfix
204
220
----
205
221
206
- 基本上这个命令做的只是从服务器上移除这个指针。Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的。
222
+ 基本上这个命令做的只是从服务器上移除这个指针。
223
+ Git 服务器通常会保留数据一段时间直到垃圾回收运行,所以如果不小心删除掉了,通常是很容易恢复的。
0 commit comments