使用pygit2拉取和整合远程更改

2 投票
1 回答
2436 浏览
提问于 2025-04-18 03:37

我遇到了一个问题。我正在写一个脚本,这个脚本会在一个文件夹里搜索代码库,查看网上的远程仓库,并把所有的新数据拉取到本地的代码库,同时通知我有哪些新变化。这个想法很简单。我在 Windows 7 x64 上使用 Python 2.7,并用 pygit2 来访问 git 的功能。命令行里可以用简单的命令“git pull 'origin'”,但 git 的 API 比较复杂,我不知道该怎么做。好吧,我已经做到这一步了:

import pygit2 orepository=pygit2.Repository("path/to/repository/.git") oremote=repo.remotes[0] result=oremote.fetch()

这段代码可以获取新的对象并下载到代码库里,但并没有更新主分支,也没有把新数据检出。通过 TortoiseGit 检查代码库时,我发现没有任何东西被检出,甚至新的日志信息在查看日志时也没有出现。我需要使用 git pull 命令来刷新代码库和工作副本。现在我的问题是:我需要做些什么才能通过 pygit2 完成这些操作?我的意思是,我已经通过 fetch 下载了变化,但接下来我需要做什么?我还想更新主分支和工作副本……

谢谢你提前帮我解决这个问题。

最好的祝福。

1 个回答

3

Remote.fetch() 这个功能不会更新工作目录里的文件,因为这不是它的主要任务。如果你想更新当前的分支并获取那些文件,你还需要执行一些额外的步骤,比如使用 Repository.create_reference() 或者 Reference.target=,这取决于你当时手头有什么数据。然后,如果你决定要更新的话,可以使用 Repository.checkout_head()

git-pull 是一个脚本,它会根据配置和传入的选项执行很多不同的步骤。当你在写一个工具来模拟它在多个仓库中的工作时,你需要先搞清楚你想要做什么,而不是指望一切都设置得刚好,让 git-pull 不会让你感到意外。

撰写回答