【问题标题】:Steps for pulling from remote using pygit2使用 pygit2 从远程拉取的步骤
【发布时间】:2014-08-30 00:37:08
【问题描述】:

使用 pygit2 库时,一个简单的 repo.fetch() 会获取所有差异。 答案here 描述了步骤即
1.Remote.fetch()
2.Repository.create_reference()Reference.target=
3.Repository.checkout_head()

我不确定第二步的幕后情况以及需要传递哪些参数。 r.repo.create_reference: (self, name, target, force=False)

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

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

关键字参数:

强制
如果 True 引用将被覆盖,否则(默认)an
引发异常。

例子::

repo.create_reference('refs/heads/foo', repo.head.target)
repo.create_reference('refs/tags/foo', 'refs/heads/master')
repo.create_reference('refs/tags/foo', 'bbb78a9cec580')

第二步发生了什么以及Reference.target=是什么意思 它应该指向哪里? 而这一切又是如何使用Remote.fetch() 操作的?

【问题讨论】:

    标签: git pygit2


    【解决方案1】:

    create_reference method 更改目标以使所述目标包含(引用)名称。

    在这里,在获取之后,您需要将本地分支的引用(您想要结帐)设置为正确的远程跟踪分支(您刚刚获取):

    repo.create_reference('refs/remotes/origin/master', 'refs/heads/master')
    

    您可以在.git 文件夹中查找文件“refs/heads/master”:它是一个简单的文件,它必须包含引用才能使该分支指向(引用)另一个分支 SHA1。

    【讨论】:

    • @avck "在remote.fetch() 之后接收到的对象保存在哪里?":在 "refs/remotes/xxx" 中,xxx 是您在 repo 中声明的遥控器的名称(默认情况下'origin')
    • @avck 设置引用的目标 (github.com/libgit2/pygit2/blob/master/docs/references.rst):通常是 SHA1 或分支/标签名称 (github.com/libgit2/pygit2/blob/…):因此您可以修改现有引用或创建一个。在 master 分支的情况下,由于您可能已经拥有 master,您将使用 Reference.target 而不是 create_reference()
    • @avck 在github.com/libgit2/pygit2/blob/master/test/test_refs.py 中看到很多“reference.target”用法示例
    • @avck 是的,但是您需要在refs/remotes/xxx 中选择一个引用,例如refs/remotes/origin/master。一旦你检查了差异,你仍然需要在推送任何东西之前将远程跟踪分支合并到本地分支,否则你的推送不会是快进的。
    • @avck 请注意,带有 FORCE 选项 (repo.checkout('HEAD', pygit2.GIT_CHECKOUT_FORCE)) 的 checkout(HEAD) 将重置工作树:github.com/libgit2/pygit2/blob/…
    猜你喜欢
    • 2014-06-05
    • 2015-03-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2011-06-14
    • 2022-08-23
    相关资源
    最近更新 更多