使用pygit2从远程拉取的步骤

使用pygit2从远程拉取的步骤,git,pygit2,Git,Pygit2,使用pygit2库时,一个简单的repo.fetch()会获取所有差异。 答案描述了步骤,即 1. 远程.fetch() 2. 存储库。创建\u reference()或reference.target= 3. 存储库。签出\u head() 我不确定第二步引擎盖下发生了什么,需要传递哪些参数。 r.repo.create\u参考:(self、name、target、force=False) 创建指向一个对象或另一个对象的新引用“名称” 参考资料 根据目标参数的类型和值,此方法尝试 猜测它是直接

使用pygit2库时,一个简单的repo.fetch()会获取所有差异。 答案描述了步骤,即
1. <代码>远程.fetch()
2. <代码>存储库。创建\u reference()或
reference.target=

3. <代码>存储库。签出\u head()

我不确定第二步引擎盖下发生了什么,需要传递哪些参数。
r.repo.create\u参考:(self、name、target、force=False)

创建指向一个对象或另一个对象的新引用“名称”
参考资料

根据目标参数的类型和值,此方法尝试
猜测它是直接引用还是符号引用

关键字参数:


如果为True,则将覆盖引用,否则(默认值)为 提出了例外情况

例如:

回购创建参考('refs/heads/foo',回购头目标)
repo.创建参考('refs/tags/foo','refs/heads/master')
回购创建参考(“参考文件/标签/foo”,“bbb78a9cec580”)

第二步中发生了什么以及
Reference.target=
它应该指向哪里? 所有这些是如何使用
Remote.fetch()
操作的?

更改目标,以便所述目标包含(引用)名称

在这里,获取后,您需要将本地分支(您要签出)的引用设置为右远程跟踪分支(您刚刚获取):


您可以在
.git
文件夹中查找文件“
refs/heads/master
”:这是一个简单的文件,其中包含引用,以便该分支在
remote.fetch()
之后指向(引用)另一个分支SHA1。

@avck“,收到的对象保存在哪里?”:在“
refs/remotes/xxx
”中,使用
xxx
作为您在repo中声明的远程设备的名称(默认情况下为“
origin
”)@avck设置引用的目标():通常为SHA1或分支/标记名():因此您可以修改现有引用或创建一个引用。在master分支的情况下,由于您可能已经拥有master,您将使用
Reference.target
而不是
create_Reference()
@avck请参阅@avck yes中大量使用“
Reference.target
”的示例,但您需要在
refs/remotes/xxx
中选择一个引用,比如
refs/remotes/origin/master
。检查差异后,在推送任何内容之前,您仍然需要将远程跟踪分支合并到本地分支,否则推送将不会是快进的。@avck注意,带有强制选项(
repo.checkout(
)的签出(HEAD)也会重置工作树:
repo.create_reference('refs/remotes/origin/master', 'refs/heads/master')