问题标签 [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.
python - 在 GitPython 中签出或列出远程分支
我在此模块中看不到结帐或列出远程/本地分支的选项:https ://gitpython.readthedocs.io/en/stable/
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
装饰器)我们是默认索引。裸存储库当然没有默认索引,但它们可以没有索引对象吗?
python - 如何从工作线程导入 Python 异步模块?
我正在使用GitPython 包从 Python 访问 Git 存储库。这会引入async 包。在async/__init__.py
中,会发生以下情况:
如果一切都在主线程中,这可以正常工作。然而,当git
(以及因此async
)的第一次导入发生在另一个线程上时,事情变得繁荣起来:
由于所有这些都在 Django 框架内运行,因此我无法控制线程。
我发现的一种解决方法是 put import async
into settings.py
,它(显然)是在主线程上导入的。但是,这需要在每次安装的基础上完成,所以它对我的 Django 应用程序的用户不是很好。
我尝试捕获异常,但引发异常的导入并未完全完成,因此下一个import async
也会失败。
你能想出任何半途而废的方法来解决这个问题吗?
更新:我注意到 Apache 的 mod_wsgi 足够聪明,可以忽略signal
调用:
不过,问题仍然存在于 Django 开发服务器上。
python - Python os.getlogin 问题
如果我创建一个文件,如:
并用cron运行它,我得到一个例外
如果我在 shell 中手动运行它——它可以工作。
问题是,commit() 中的 GitPython 0.3.1 使用了这个函数,我需要使用它。
有什么解决方法吗?
我已经在 Ubuntu10.10/python2.6.6 和 Debian5.0.6/python2.5.2 上测试过了。
python - Git Python找不到提交
我无法通过导航提交树找到标记指向的提交。对于这个特定示例,我使用的是直接从 Github 克隆的 Tornado Web 存储库。
这是假设在 git 的直接无环图中找到所有提交,但是,我尝试了另一种方法,通过递归函数递归地导航 dag,它提供了相同的结果。
我做错了什么,我该如何解决这个问题?任何帮助表示赞赏!
我正在使用 git-python v0.3.1。
python - 推送到服务器时获取所有提交
我正在制作一个 git post-commit 挂钩来将我的提交消息发布到 Twitter。我已经在服务器上设置了钩子,这意味着它只在我调用git push
.
为了与 python 中的 git 交互,我正在使用GitPython。在我的代码中,我repo.head.commit.message
用来获取最新的提交消息。这意味着如果我推送多个提交,它只会得到最后一个。
这就是我到目前为止所拥有的。
如何从推送中获取所有提交?或者,我怎样才能获得推送的提交数量?
repo.iter_commits('master', max_count=5)
可以得到尽可能多的提交,所以如果我知道有多少提交,我可以使用它。
编辑:我正在测试,当我运行时git push
,似乎这个钩子从最后一次提交中获得了头部,而不是我刚刚推送的那个。如何制作一个提交后挂钩,从我刚刚推送到服务器的提交中获取消息?
编辑 2:我实际上使用的是更新挂钩,而不是提交后挂钩,这是在服务器上使用的正确挂钩吗?
python - 使用 GItPython 将本地更改恢复到文件
GitPython库下有没有办法将本地更改恢复到单个文件?
在 Git 命令行下我只会使用git checkout filename
但尝试在 GitPython API 下执行此操作,就像这样
导致以下错误,
git.exc.CheckoutError:由于本地修改,某些文件无法从索引中签出:['foo']
python - GitPython:获取尚未应用的远程提交列表
我正在编写一个 Python 脚本来获取即将由git pull
操作应用的提交列表。优秀的GitPython 库是一个很好的入门基础,但 git 微妙的内部运作让我感到厌烦。现在,这是我目前所拥有的(简化和注释版本):
本质上,它会获取将在下一个中应用的所有提交的作者git pull
。这运行良好,但存在以下问题:
- 当本地提交在远程之前,我的代码只是将所有提交打印到第一个。
- 远程提交可以有多个父级,本地提交可以是第二个父级。这意味着我的代码永远不会在远程存储库中找到本地提交。
我可以处理位于本地存储库之后的远程存储库:只需同时查看另一个方向(本地到远程),代码会变得混乱但它可以工作。但是最后一个问题让我很生气:现在我需要导航一个(可能无限的)树来找到本地提交的匹配项。这不仅仅是理论上的:我的最新更改是一个 repo 合并,它提出了这个问题,所以我的脚本不起作用。
在远程存储库中获取提交的有序列表,例如repo.iter_commits()
本地存储库,将是一个很大的帮助。但我还没有在文档中找到如何做到这一点。我可以只为远程存储库获取一个 Repo 对象吗?
有没有另一种方法可以让我到达那里,我正在用锤子钉螺丝?
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,但它无法读取变量。
python - git log --follow,gitpython方式
我正在尝试访问单个文件的提交历史记录,如下所示:
我必须使用gitpython,所以我现在正在做的是:
然后我构建提交对象:
有没有办法以更 gitpython-ic 的方式做到这一点?我都尝试了commit.iter_parents()
and commit.iter_items()
,但他们都依赖git-rev-list
,所以他们没有--follow
选择。