问题标签 [gitpython]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
6 回答
29959 浏览

python - 在 GitPython 中签出或列出远程分支

我在此模块中看不到结帐或列出远程/本地分支的选项:https ://gitpython.readthedocs.io/en/stable/

0 投票
2 回答
1174 浏览

git - 裸存储库可以有索引吗?这是一个错误吗?

我正在尝试让GitPython 0.3将文件提交到存储库。粗略地说,我这样做如下:

使用非裸存储库,这可以按预期工作。请注意,我从不明确接触文件系统,只接触 Git 的对象数据库。

但是,对于裸存储库,这是行不通的:该IndexFile.add函数用git_working_dir装饰器装饰:

这个装饰器尝试 chdir 到 repo 的working_tree_dir,以便可以正确解析路径引用。但是,working_tree_dir对于裸存储库无效,会引发AssertionError.

有谁知道为什么这个装饰器在这里?它只是用于路径解析,还是无法在裸存储库中创建索引?这是 GitPython 中的错误,还是我对 Git 的理解?


编辑:同样,IndexFile.remove函数断言(通过default_index装饰器)我们是默认索引。裸存储库当然没有默认索引,但它们可以没有索引对象吗?

0 投票
1 回答
1184 浏览

python - 如何从工作线程导入 Python 异步模块?

我正在使用GitPython 包从 Python 访问 Git 存储库。这会引入async 包。在async/__init__.py中,会发生以下情况:

如果一切都在主线程中,这可以正常工作。然而,当git(以及因此async)的第一次导入发生在另一个线程上时,事情变得繁荣起来:

由于所有这些都在 Django 框架内运行,因此我无法控制线程。

我发现的一种解决方法是 put import asyncinto settings.py,它(显然)是在主线程上导入的。但是,这需要在每次安装的基础上完成,所以它对我的 Django 应用程序的用户不是很好。

我尝试捕获异常,但引发异常的导入并未完全完成,因此下一个import async也会失败。

你能想出任何半途而废的方法来解决这个问题吗?


更新:我注意到 Apache 的 mod_wsgi 足够聪明,可以忽略signal调用:

不过,问题仍然存在于 Django 开发服务器上。

0 投票
2 回答
12094 浏览

python - Python os.getlogin 问题

如果我创建一个文件,如:

并用cron运行它,我得到一个例外

如果我在 shell 中手动运行它——它可以工作。

问题是,commit() 中的 GitPython 0.3.1 使用了这个函数,我需要使用它。

有什么解决方法吗?

我已经在 Ubuntu10.10/python2.6.6 和 Debian5.0.6/python2.5.2 上测试过了。

0 投票
1 回答
1736 浏览

python - Git Python找不到提交

我无法通过导航提交树找到标记指向的提交。对于这个特定示例,我使用的是直接从 Github 克隆的 Tornado Web 存储库。

这是假设在 git 的直接无环图中找到所有提交,但是,我尝试了另一种方法,通过递归函数递归地导航 dag,它提供了相同的结果。

我做错了什么,我该如何解决这个问题?任何帮助表示赞赏!

我正在使用 git-python v0.3.1。

0 投票
1 回答
380 浏览

python - 推送到服务器时获取所有提交

我正在制作一个 git post-commit 挂钩来将我的提交消息发布到 Twitter。我已经在服务器上设置了钩子,这意味着它只在我调用git push.

为了与 python 中的 git 交互,我正在使用GitPython。在我的代码中,我repo.head.commit.message用来获取最新的提交消息。这意味着如果我推送多个提交,它只会得到最后一个。

这就是我到目前为止所拥有的。

如何从推送中获取所有提交?或者,我怎样才能获得推送的提交数量?

repo.iter_commits('master', max_count=5)可以得到尽可能多的提交,所以如果我知道有多少提交,我可以使用它。

编辑:我正在测试,当我运行时git push,似乎这个钩子从最后一次提交中获得了头部,而不是我刚刚推送的那个。如何制作一个提交后挂钩,从我刚刚推送到服务器的提交中获取消息?

编辑 2:我实际上使用的是更新挂钩,而不是提交后挂钩,这是在服务器上使用的正确挂钩吗?

0 投票
1 回答
1523 浏览

python - 使用 GItPython 将本地更改恢复到文件

GitPython库下有没有办法将本地更改恢复到单个文件?

在 Git 命令行下我只会使用git checkout filename但尝试在 GitPython API 下执行此操作,就像这样

导致以下错误,

git.exc.CheckoutError:由于本地修改,某些文件无法从索引中签出:['foo']

0 投票
2 回答
2881 浏览

python - GitPython:获取尚未应用的远程提交列表

我正在编写一个 Python 脚本来获取即将由git pull操作应用的提交列表。优秀的GitPython 库是一个很好的入门基础,但 git 微妙的内部运作让我感到厌烦。现在,这是我目前所拥有的(简化和注释版本):

本质上,它会获取将在下一个中应用的所有提交的作者git pull。这运行良好,但存在以下问题:

  • 当本地提交在远程之前,我的代码只是将所有提交打印到第一个。
  • 远程提交可以有多个父级,本地提交可以是第二个父级。这意味着我的代码永远不会在远程存储库中找到本地提交。

我可以处理位于本地存储库之后的远程存储库:只需同时查看另一个方向(本地到远程),代码会变得混乱但它可以工作。但是最后一个问题让我很生气:现在我需要导航一个(可能无限的)树来找到本地提交的匹配项。这不仅仅是理论上的:我的最新更改是一个 repo 合并,它提出了这个问题,所以我的脚本不起作用。

在远程存储库中获取提交的有序列表,例如repo.iter_commits()本地存储库,将是一个很大的帮助。但我还没有在文档中找到如何做到这一点。我可以只为远程存储库获取一个 Repo 对象吗?

有没有另一种方法可以让我到达那里,我正在用锤子钉螺丝?

0 投票
1 回答
5109 浏览

python - python没有获取环境变量,但它是在mac os上设置的

如果我运行 env 命令,我将获得以下输出:

我正在尝试使用 python 获取 GIT_PYTHON_GIT_EXECUTABLE 变量:

但输出打印:

因为它似乎没有查看 GIT_PYTHON_GIT_EXECUTABLE 变量?怎么了?

更新

我在 pycharm 中设置了环境变量,现在它读取了,但在我的实际应用程序中,我使用 pyqt 库的 QThread 类。我的应用程序在启动时构建在 pyqt 库之上,它执行一个 Qthread。在 Qthread 中会执行一个 gitpython 函数。GitPython 函数启动一个子进程并尝试读取 GIT_PYTHON_GIT_EXECUTABLE,但它无法读取变量。

0 投票
2 回答
22766 浏览

python - git log --follow,gitpython方式

我正在尝试访问单个文件的提交历史记录,如下所示:

我必须使用gitpython,所以我现在正在做的是:

然后我构建提交对象:

有没有办法以更 gitpython-ic 的方式做到这一点?我都尝试了commit.iter_parents()and commit.iter_items(),但他们都依赖git-rev-list,所以他们没有--follow选择。