在这里,这部分我无法使其发挥作用。
# -*- coding: utf-8 -*-
import requests
url = "https://github.com/llacroix/node-nfc.git/git-upload-pack"
def make_line(line):
prefix = "%0.4x" % (len(line) + 4)
return "%s%s" % (prefix, line)
data = ""
data += make_line("want ba9007f12771f6fddf2b1b22888af90352588197\0 \n")
data += make_line("have 5cec4d0c777aa2bda27c6c9be8e6108ef0f08d62\n")
data += "0000"
req = requests.post(url, data, headers={'Content-Type': 'application/x-git-upload-pack-request'})
print req.text
我不明白我是如何让它发挥作用的。我在本地尝试了以下命令:
git-upload-pack --stateless-rpc .
但我无法弄清楚协议是否正常工作。它要么失败要么在本地没有返回。而且远程地,它始终失败:
IncompleteRead(0字节读取)',...
答案 0 :(得分:0)
好的,首先解决问题的方法基于这个类似问题的答案。
https://stackoverflow.com/a/31953327/54606
我链接的文档错误或过时。 NUL分隔符不是" \ 0"但是" 0000"。 " 0000"实际上并没有结束沟通,而是“完成了”#34;实际上是这样做的。
该行前面的四个字符实际上是包含换行符的行的长度,除了0000之外的4个字符是从它们开始的行。不看源代码,我期待" 0000"表现得像重置或冲洗。
完成的行也必须以9个字符为前缀,包括换行符。
最终结果如下:
upload_pack = '%s/git-upload-pack'
url = upload_pack % (options.url)
def make_line(line):
prefix = "%0.4x" % (len(line) + 5)
return "%s%s\n" % (prefix, line)
def make_want(obj):
line = make_line("want %s" % obj)
return line + "0000"
def make_have(obj):
return make_line("have %s" % obj)
def make_request(from_obj, to_obj):
data = ""
data += make_want(to_obj)
data += make_have(from_obj)
data += make_line("done")
return data
headers = {
'Content-Type': 'application/x-git-upload-pack-request',
}
req_data = make_request(options.from_obj, options.to_obj)
req = requests.post(url, req_data, headers=headers)
print req.content