问题描述
我最近发现了 gitpython,并且鉴于我目前正在尝试创建一个 Python 脚本,该脚本可以自动推送到 Git 存储库并从其中提取,我很高兴尝试一下。
当使用命令行 Git 提交到存储库时,我调用 git add -A
,几乎排除所有其他参数。我知道您可以改为调用 git add .
,或者按名称添加/删除文件;我从来没有觉得有必要使用该功能。 (这对我来说是不好的做法吗?)但是,我今天一直在尝试编写一个 gitpython 脚本,尽管梳理了 the API reference,但我找不到任何直接的方法来模拟 {{1 }} 命令。
这是我迄今为止努力的一个片段:
git add -A
这会引发以下错误:repo = Repo(absolute_path)
repo.index.add("-A")
repo.index.commit("Commit message.")
repo.remotes.origin.push()
。相反,如果我尝试调用 FileNotFoundError: [Errno 2] No such file or directory: '-A'
,我会得到:repo.index.add()
。我知道 TypeError: add() missing 1 required positional argument: 'items'
想让我按名称指定要添加的文件,但在我看来,gitpython 的全部意义在于它自动化!必须手动命名文件违背了模块的目的!
是否可以在 gitpython 中模拟 .add()
?如果是这样,如何?
解决方法
您链接的 API 转到支持 invoking the Git binaries themselves directly 的 GitPython 版本,因此您可以让它为您运行 git add -A
。
除此之外,git add -A
means:
不仅在工作树具有与
如果在使用 所以 这个选项主要是为了帮助那些习惯了旧版本Git的用户,他们的“git add 因此,如果您想要 2.0 之前的行为,您还需要 如果您打算在不使用 -A
选项时没有给出 git add -A
与工作树顶层的 git add .
相同。如果您想要旧的(2.0 之前的)git add -A
行为,请从工作树的较低级别运行 git add .
;要获得 2.0 或更高版本的 git add -A
行为,请从工作树的顶层运行 git add .
。但另请参阅--no-all
:--no-all
。git.cmd.Git
类的情况下在 GitPython 中完成所有这些操作,根据我的经验,我还要补充一点,Git 位的各种 Python 实现在保真度上各不相同,例如 { {1}}(和/或它们到 2.0 之前的 Git、2.0 之后的 Git、2.23 之后的 Git 等的映射),因此如果您打算依赖这些行为,您应该测试