@@ -31,7 +31,7 @@ $ git clone http://server/simplegit-progit.git
31
31
ca82a6dff817ec66f44342007202690a93763949 refs/heads/master
32
32
----
33
33
34
- 现在,你得到了一个远程引用和 SHA 值的列表。
34
+ 现在,你得到了一个远程引用和 SHA-1 值的列表。
35
35
接下来,你要确定 HEAD 引用是什么,这样你就知道在完成后应该被检出到工作目录的内容:
36
36
37
37
[source]
@@ -110,7 +110,7 @@ P pack-816a9b2334da9953e530f27bcac22082a9f5b835.pack
110
110
(4k of binary data)
111
111
----
112
112
113
- 现在你有这个包文件的索引,你可以查看你要的对象是否在里面——因为索引文件列出了这个包文件所包含的所有对象的 SHA 值,和该对象存在于包文件中的偏移量。
113
+ 现在你有这个包文件的索引,你可以查看你要的对象是否在里面——因为索引文件列出了这个包文件所包含的所有对象的 SHA-1 值,和该对象存在于包文件中的偏移量。
114
114
你的对象就在这里,接下来就是获取整个包文件:
115
115
116
116
[source]
@@ -144,14 +144,13 @@ Git 会运行 `send-pack` 进程,它会通过 SSH 连接你的服务器。
144
144
[source,console]
145
145
----
146
146
$ ssh -x git@server "git-receive-pack 'simplegit-progit.git'"
147
- 005bca82a6dff817ec66f4437202690a93763949 refs/heads/master report-status \
147
+ 00a5ca82a6dff817ec66f4437202690a93763949 refs/heads/master report-status \
148
148
delete-refs side-band-64k quiet ofs-delta \
149
- agent=git/2:2.1.1+github-607-gfba4028 delete-refs
150
- 003e085bb3bcb608e1e84b2432f8ecbe6306e7e7 refs/heads/topic
149
+ agent=git/2:2.1.1+github-607-gfba4028 delete-refs
151
150
0000
152
151
----
153
152
154
- `git-receive-pack` 命令会立即为它所拥有的每一个引用发送一行响应——在这个例子中,就只有 `master` 分支和它的SHA值 。
153
+ `git-receive-pack` 命令会立即为它所拥有的每一个引用发送一行响应——在这个例子中,就只有 `master` 分支和它的 SHA-1 值 。
155
154
第一行响应中也包含了一个服务端能力的列表(这里是 `report-status`、`delete-refs` 和一些其它的,包括客户端的识别码)。
156
155
157
156
每一行以一个四位的十六进制值开始,用于指明本行的长度。
@@ -165,14 +164,14 @@ agent=git/2:2.1.1+github-607-gfba4028 delete-refs
165
164
166
165
[source]
167
166
----
168
- 0085ca82a6dff817ec66f44342007202690a93763949 15027957951b64cf874c3557a0f3547bd83b3ff6 \
167
+ 0076ca82a6dff817ec66f44342007202690a93763949 15027957951b64cf874c3557a0f3547bd83b3ff6 \
169
168
refs/heads/master report-status
170
- 00670000000000000000000000000000000000000000 cdfdb42577e2506715f8cfeacdbabc092bf63e8d \
169
+ 006c0000000000000000000000000000000000000000 cdfdb42577e2506715f8cfeacdbabc092bf63e8d \
171
170
refs/heads/experiment
172
171
0000
173
172
----
174
173
175
- Git 会为每一个将要更新的引用发送一行数据,包括该行长度,旧 SHA 值,新 SHA 值和将要更新的引用。
174
+ Git 会为每一个将要更新的引用发送一行数据,包括该行长度,旧 SHA-1 值,新 SHA-1 值和将要更新的引用。
176
175
第一行也包括了客户端的能力。
177
176
这里的全为 '0' 的 SHA-1 值表示之前没有过这个引用——因为你正要添加新的 experiment 引用。
178
177
删除引用时,将会看到相反的情况:右边的 SHA-1 值全为 '0'。
@@ -182,7 +181,7 @@ Git 会为每一个将要更新的引用发送一行数据,包括该行长度
182
181
183
182
[source]
184
183
----
185
- 000Aunpack ok
184
+ 000eunpack ok
186
185
----
187
186
188
187
====== HTTP(S)
@@ -194,8 +193,8 @@ HTTPS 与 HTTP 相比较,除了在“握手”过程略有不同外,其他
194
193
----
195
194
=> GET http://server/simplegit-progit.git/info/refs?service=git-receive-pack
196
195
001f# service=git-receive-pack
197
- 000000ab6c5f0e45abd7832bf23074a333f739977c9e8188 refs/heads/master \
198
- report-status delete-refs side-band-64k quiet ofs-delta \
196
+ 00ab6c5f0e45abd7832bf23074a333f739977c9e8188 refs/heads/master report-status \
197
+ delete-refs side-band-64k quiet ofs-delta \
199
198
agent=git/2:2.1.1~vmg-bitmaps-bugaloo-608-g116744e
200
199
0000
201
200
----
@@ -205,7 +204,7 @@ HTTPS 与 HTTP 相比较,除了在“握手”过程略有不同外,其他
205
204
206
205
[source]
207
206
----
208
- => POST http://server/simplegit-progit.git/git-receive/ pack
207
+ => POST http://server/simplegit-progit.git/git-receive- pack
209
208
----
210
209
211
210
这个 `POST` 请求的内容是 `send-pack` 的输出和相应的包文件。
@@ -230,27 +229,27 @@ $ ssh -x git@server "git-upload-pack 'simplegit-progit.git'"
230
229
231
230
[source]
232
231
----
233
- 00dfca82a6dff817ec66f44342007202690a93763949 HEADmulti_ack thin-pack \
232
+ 00dfca82a6dff817ec66f44342007202690a93763949 HEAD multi_ack thin-pack \
234
233
side-band side-band-64k ofs-delta shallow no-progress include-tag \
235
234
multi_ack_detailed symref=HEAD:refs/heads/master \
236
235
agent=git/2:2.1.1+github-607-gfba4028
237
- 003fca82a6dff817ec66f44342007202690a93763949 refs/heads/master
236
+ 003fe2409a098dc3e53539a9028a94b6224db9d6a6b6 refs/heads/master
238
237
0000
239
238
----
240
239
241
240
这与 `receive-pack` 的响应很相似,但是这里所包含的能力是不同的。
242
241
而且它还包含 HEAD 引用所指向内容(`symref=HEAD:refs/heads/master`),这样如果客户端执行的是克隆,它就会知道要检出什么。
243
242
244
- 这时候,`fetch-pack` 进程查看它自己所拥有的对象,并响应“want”和它需要的对象的 SHA 值。
245
- 它还会发送“have”和所有它已拥有的对象的 SHA 值。
243
+ 这时候,`fetch-pack` 进程查看它自己所拥有的对象,并响应 “want” 和它需要的对象的 SHA-1 值。
244
+ 它还会发送“have”和所有它已拥有的对象的 SHA-1 值。
246
245
在列表的最后,它还会发送“done”以通知 `upload-pack` 进程可以开始发送它所需对象的包文件:
247
246
248
247
[source]
249
248
----
250
- 0054want ca82a6dff817ec66f44342007202690a93763949 ofs-delta
249
+ 003cwant ca82a6dff817ec66f44342007202690a93763949 ofs-delta
251
250
0032have 085bb3bcb608e1e8451d4b2432f8ecbe6306e7e7
252
- 0000
253
251
0009done
252
+ 0000
254
253
----
255
254
256
255
====== HTTP(S)
@@ -262,7 +261,7 @@ $ ssh -x git@server "git-upload-pack 'simplegit-progit.git'"
262
261
----
263
262
=> GET $GIT_URL/info/refs?service=git-upload-pack
264
263
001e# service=git-upload-pack
265
- 000000e7ca82a6dff817ec66f44342007202690a93763949 HEADmulti_ack thin-pack \
264
+ 00e7ca82a6dff817ec66f44342007202690a93763949 HEAD multi_ack thin-pack \
266
265
side-band side-band-64k ofs-delta shallow no-progress include-tag \
267
266
multi_ack_detailed no-done symref=HEAD:refs/heads/master \
268
267
agent=git/2:2.1.1+github-607-gfba4028
0 commit comments