Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用pygit2拉取和集成远程更改_Python_Git_Fetch_Pull_Pygit2 - Fatal编程技术网

Python 使用pygit2拉取和集成远程更改

Python 使用pygit2拉取和集成远程更改,python,git,fetch,pull,pygit2,Python,Git,Fetch,Pull,Pygit2,我确实有以下问题。我正在编写一个脚本,它在文件夹中搜索存储库,在网上查找远程设备,并将所有新数据拉入存储库,通知我新的更改。主要思想是明确的。我在Windows7x64上使用Python2.7,使用pygit2访问git功能。命令行支持简单的命令“git-pull'origin'”,但是git-api更复杂,我看不出方法。好吧,我走了那么远: 导入pygit2 orepository=pygit2.Repository(“path/to/Repository/.git”) oremote=远程回

我确实有以下问题。我正在编写一个脚本,它在文件夹中搜索存储库,在网上查找远程设备,并将所有新数据拉入存储库,通知我新的更改。主要思想是明确的。我在Windows7x64上使用Python2.7,使用pygit2访问git功能。命令行支持简单的命令“git-pull'origin'”,但是git-api更复杂,我看不出方法。好吧,我走了那么远:
导入pygit2
orepository=pygit2.Repository(“path/to/Repository/.git”)
oremote=远程回购[0]
result=oremote.fetch()
此代码检索新对象并将其下载到存储库中,但不更新主分支或签出新数据。通过使用TortoiseGit检查存储库,我发现没有任何方式签出,甚至在显示日志时也不会显示新的日志消息。我需要使用git pull命令来刷新存储库和工作副本。现在我的问题是:使用pygit2我需要做什么来完成所有这些?我的意思是,我通过获取来下载更改,但是我需要做什么呢?我想更新主分支和工作副本太。。。 提前谢谢你帮我解决我的问题。 致以最诚挚的问候。

Remote.fetch()
不会更新workdir中的文件,因为这离它的工作很远。如果要更新当前分支并签出这些文件,还需要通过
存储库执行这些步骤。根据您当时拥有的数据,创建\u reference()
reference.target=
,然后,例如
存储库。签出\u head()
,如果您确实决定更新


git pull
是一个脚本,它根据所传递的配置和标志执行许多不同的步骤。当你编写一个工具在多个存储库上模拟它时,你需要弄清楚你想做什么,而不是希望一切都设置好,这样
git pull
就不会让你感到惊讶。

存储库.checkout\u head()和
Repository.checkout('head')
之间有什么区别。文档提到,不带参数调用
Repository.checkout
将以checkout\u索引作为默认值。更新引用后,如果我执行
Repository.checkout('HEAD')
,索引将保持修改状态,即
Repository.status()
显示一个有更改的文件。使用
存储库时,checkout\u head()
也会清除索引。你能解释一下这里发生了什么吗?如果看不到代码的顺序或命令的输出,这将非常困难。请注意,默认策略是
GIT\u CHECKOUT\u strategy\u SAFE
,如果发生冲突,它将中止签出,因为您说更改的文件“保持”。请参阅此处的详细代码调用Repository.CHECKOUT\u head()和Repository.CHECKOUT('head')之间没有区别。我希望文档很快会更新,以更清楚地表明这一点。