问题标签 [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:如何提交更新的子模块
我已经在这几个小时了,虽然我有一种感觉我很接近,但我似乎无法弄清楚这一点。
我正在尝试制作一个脚本,该脚本采用 git 存储库,将该存储库中的子模块更新为指定版本,并提交该更改。
什么有效:
我可以找到存储库,获取子模块并检查我想要的提交。
什么不起作用:
我似乎无法添加更新的子模块哈希,所以我可以提交它。
我的代码:
此时我可以看到子模块更改。如果我检查 sourcetree,我可以在“未暂存的文件”中看到更改的子模块。问题是,我不知道如何进行更改,以便我可以提交。
我试过的:
- 如果我使用 提交
repos.index.commit('')
,它会创建一个空提交。 - 如果我尝试使用添加子模块的路径,则子模块中
repos.index.add([submodule.path])
的所有文件都将添加到存储库中,这绝对不是我想要的。 - 如果我尝试使用添加子模块本身(根据文档应该可以)
repos.index.add([submodule])
,似乎什么都没有发生。
git - 如何通过 Python 修改 Git 提交信息?
我曾经subprocess.check_output
得到 Git 命令的结果,但我想不出如何更新我们使用命令执行的提交消息git commit -amend
?
python - 使用 gitpython 获得提交的简短 sha
长 SHA 可以得到如下:
或者,在 git 3.1.7 中:
短的怎么样?(shortSHA
由repo的规模决定,所以不应该是这样的sha[:7]
)
python - 如何使用 GitPython 获取暂存文件?
我正在使用GitPython计算 git 中的暂存文件。
对于修改过的文件,我可以使用
但是对于暂存文件,我找不到解决方案。
我知道git status --porcelain
,但我正在寻找其他更好的解决方案。(我希望使用gitpython
not git命令,脚本会更快)
python - GitPython: git.diff(commit_a, commit_b) 总是返回空字符串
当我使用 GitPython 尝试以下代码时:
它总是返回一个空字符串。我在不同的提交中也尝试过多次更改文件。
我还尝试了以下代码,该代码将列出第一次和最后一次提交之间的所有更改文件。
python - 如何为 GitPython 克隆/拉取函数编写单元测试?
我有一个 python 项目,它使用 GitPython 对远程 Git 存储库执行克隆和拉取功能。
举个简单的例子:
我希望能够为此功能编写一个单元测试,但显然这需要与当前的外部系统联系。
我很好奇是否有人以类似于使用 Mock 来模拟 HTTP 调用的方式模拟这种外部交互。我希望能够以一种可以在测试时模拟的方式执行这些任务,而无需调用实际的 Git 遥控器。
我应该如何为此编写测试?
编辑:为了更清楚我的要求,我应该提到我是 Mock 的新手,并且正在努力理解如何模拟这些类的实例而不是类本身。我的问题应该表述得更好——类似于“我如何使用 Mock 来设置实例特定的属性,比如裸?”
从那以后,我对 Mock 了解了很多,并想出了如何做到这一点,所以我将为我自己的问题提供一个答案。
python - 在主管下使用 gitpython 时忽略 SSH 身份密钥
我有一个简单的 Flask 应用程序,它等待来自我的存储库主机的 webhook。webhookgit.pull()
使用gitpython
. gitpython
代码类似于:
该应用程序以用户身份使用主管脚本启动admin
,其 sshid_rsa.pub
公钥已在存储库中注册为部署密钥。
以注册用户身份登录后,admin
可以从命令行启动应用程序,并且可以成功从私有存储库中拉取应用程序。但是,当应用程序以 启动时supervisor
,git.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'
),但无济于事。
有没有人遇到过这样的事情?这是一个意想不到的问题,我在调试时遇到了麻烦。
gitpython - 如何使用 gitpython 进行更改
有谁知道git commit -a
gitpython 中的等价物是什么?
我试过repo.index.commit
了,但没有看到如何添加 -a 选项。
repo.index.add
仅添加新文件,不添加已修改的现有文件。它似乎不支持中的update
功能git add -u
。
我可以做类似的事情repo.git.commit('-a')
,甚至
但我认为高级接口应该能够做到这一点。我错过了什么吗?
提前致谢,
翻转
python - 如何通过 gitpython 检查 Git Repo 是否有未提交的更改
我试过了
但得到:
git.exc.GitCommandNotFound:[错误 2]
它是一个错误吗?