问题标签 [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 投票
1 回答
2401 浏览

python - GitPython:如何提交更新的子模块

我已经在这几个小时了,虽然我有一种感觉我很接近,但我似乎无法弄清楚这一点。

我正在尝试制作一个脚本,该脚本采用 git 存储库,将该存储库中的子模块更新为指定版本,并提交该更改。

什么有效:

我可以找到存储库,获取子模块并检查我想要的提交。

什么不起作用:

我似乎无法添加更新的子模块哈希,所以我可以提交它。

我的代码:

此时我可以看到子模块更改。如果我检查 sourcetree,我可以在“未暂存的文件”中看到更改的子模块。问题是,我不知道如何进行更改,以便我可以提交。

我试过的:

  • 如果我使用 提交repos.index.commit(''),它会创建一个空提交。
  • 如果我尝试使用添加子模块的路径,则子模块中repos.index.add([submodule.path])的所有文件都将添加到存储库中,这绝对不是我想要的。
  • 如果我尝试使用添加子模块本身(根据文档应该可以)repos.index.add([submodule]),似乎什么都没有发生。
0 投票
1 回答
1214 浏览

git - 如何通过 Python 修改 Git 提交信息?

我曾经subprocess.check_output得到 Git 命令的结果,但我想不出如何更新我们使用命令执行的提交消息git commit -amend

0 投票
6 回答
12889 浏览

python - 使用 gitpython 获得提交的简短 sha

长 SHA 可以得到如下:

或者,在 git 3.1.7 中:

短的怎么样?(shortSHA由repo的规模决定,所以不应该是这样的sha[:7]

0 投票
1 回答
5856 浏览

python - 如何使用 GitPython 获取暂存文件?

我正在使用GitPython计算 git 中的暂存文件。

对于修改过的文件,我可以使用

但是对于暂存文件,我找不到解决方案。

我知道git status --porcelain,但我正在寻找其他更好的解决方案。(我希望使用gitpythonnot git命令,脚本会更快)

0 投票
1 回答
1029 浏览

python - GitPython: git.diff(commit_a, commit_b) 总是返回空字符串

当我使用 GitPython 尝试以下代码时:

它总是返回一个空字符串。我在不同的提交中也尝试过多次更改文件。

我还尝试了以下代码,该代码将列出第一次和最后一次提交之间的所有更改文件。

0 投票
1 回答
4084 浏览

python - 如何为 GitPython 克隆/拉取函数编写单元测试?

我有一个 python 项目,它使用 GitPython 对远程 Git 存储库执行克隆和拉取功能。

举个简单的例子:

我希望能够为此功能编写一个单元测试,但显然这需要与当前的外部系统联系。

我很好奇是否有人以类似于使用 Mock 来模拟 HTTP 调用的方式模拟这种外部交互。我希望能够以一种可以在测试时模拟的方式执行这些任务,而无需调用实际的 Git 遥控器。

我应该如何为此编写测试?

编辑:为了更清楚我的要求,我应该提到我是 Mock 的新手,并且正在努力理解如何模拟这些类的实例而不是类本身。我的问题应该表述得更好——类似于“我如何使用 Mock 来设置实例特定的属性,比如裸?”

从那以后,我对 Mock 了解了很多,并想出了如何做到这一点,所以我将为我自己的问题提供一个答案。

0 投票
1 回答
559 浏览

python - 在主管下使用 gitpython 时忽略 SSH 身份密钥

我有一个简单的 Flask 应用程序,它等待来自我的存储库主机的 webhook。webhookgit.pull()使用gitpython. gitpython代码类似于:

该应用程序以用户身份使用主管脚本启动admin,其 sshid_rsa.pub公钥已在存储库中注册为部署密钥。

以注册用户身份登录后,admin可以从命令行启动应用程序,并且可以成功从私有存储库中拉取应用程序。但是,当应用程序以 启动时supervisorgit.pull()操作会失败并出现 ssh auth 错误:

Permission denied (publickey). fatal: Could not read from remote repository.

我可以确认启动supervisor托管应用程序的用户是正确的 ( admin)。这表明主管脚本没有为同一用户使用默认的 SSH 密钥。

我已经看到一些关于设置几个环境变量之一的参考,GIT_SSH_COMMAND或者一个旧的GIT_SSH. 我尝试将这些值设置为替换 ssh 字符串(即GIT_SSH_COMMAND='ssh -i /path/to/key')和可执行文件(即GIT_SSH='/path/to/myssh'),但无济于事。

有没有人遇到过这样的事情?这是一个意想不到的问题,我在调试时遇到了麻烦。

0 投票
2 回答
7661 浏览

python - GitPython:获取当前标签(分离头)

我使用库gitpython

如果本地 git 在签出标签上,我想获取标签的名称。

在命令行上,该git工具知道这一点。例子

我想通过 gitpython 获取字符串“release/1.2.3”。

0 投票
1 回答
6499 浏览

gitpython - 如何使用 gitpython 进行更改

有谁知道git commit -agitpython 中的等价物是什么?

我试过repo.index.commit了,但没有看到如何添加 -a 选项。 repo.index.add仅添加新文件,不添加已修改的现有文件。它似乎不支持中的update功能git add -u

我可以做类似的事情repo.git.commit('-a'),甚至

但我认为高级接口应该能够做到这一点。我错过了什么吗?

提前致谢,

翻转

0 投票
1 回答
1549 浏览

python - 如何通过 gitpython 检查 Git Repo 是否有未提交的更改

我试过了

但得到:

git.exc.GitCommandNotFound:[错误 2]

它是一个错误吗?