我确实有以下问题。我正在编写一个脚本,该脚本搜索文件夹中的存储库,在网络上查找遥控器并将所有新数据拉入存储库,通知我新的更改。主要思想是清楚的。我在windows 7 x64上使用python 2.7,使用pygit2访问git特性。命令行支持简单的命令“git pull'origin'”,但是git api更复杂,我看不到方法。好吧,我做到了:
import pygit2orepository=pygit2.Repository("path/to/repository/.git")oremote=repo.remotes[0]result=oremote.fetch()
此代码检索新对象并将其下载到存储库中,但不会更新主分支或签出新数据。通过使用tortoisegit检查存储库,我发现没有任何方法可以签出,甚至在显示日志时也不会显示新的日志消息。我需要使用git pull命令来刷新存储库和工作副本。现在我的问题是:要使用pygit2来完成这一切,我需要做什么?我是说,我通过获取这些更改来下载它们,但是我需要做什么呢?我想更新主分支和工作副本…
提前谢谢你帮我解决问题。
谨致问候。

最佳答案

Remote.fetch()不会更新workdir中的文件,因为这与它的工作相去甚远。如果要更新当前分支并签出这些文件,还需要执行这些步骤,通过Repository.create_reference()Reference.target=执行,具体取决于您当时拥有的数据,然后如果您决定更新,则执行Repository.checkout_head()等步骤。
git-pull是一个脚本,根据所传递的配置和标志执行许多不同的步骤。当您编写一个工具来在多个存储库上模拟它时,您需要弄清楚您想要做什么,而不是希望一切都设置好,这样git-pull就不会让您感到惊讶。

08-26 12:33