GitPython与向Git对象发送命令
GitPython 是一个可以让你用 Python 来操作 git 的工具。我想通过这个模块来使用一些基本的 git 命令,比如 git commit -m "message"
。根据 这个文档,我应该通过 Git 模块来访问这些命令。以下是我尝试让这些命令正常工作的步骤:
>>> import git
>>> foo = git.Git("~/git/GitPython")
>>> bar = "git commit -m 'message'"
>>> beef = git.Git.execute(foo,bar)
结果出现了一个错误,提示说没有这样的文件或目录。我还尝试了以下路径来指向我的 git 目录:
~/git/GitPython/.git
/Users/bacon/git/gitclient/
另外一个可能性是命令写错了,所以我也尝试了 commit -m "message"
,结果还是显示“没有这样的文件或目录”。
我需要做些什么才能让这些 git 命令正常工作呢?
4 个回答
0
在教程里说...
The first step is to create a ``Repo`` object to represent your repository.
>>> from git import *
>>> repo = Repo("/Users/mtrier/Development/git-python")
我没有看到你的代码库。
我正在查看GitPython的文档目录下名为tutorial.rst的文件。
0
一般来说,~ 这个符号的扩展是由你的命令行工具(也就是“shell”)来完成的,而不是文件系统的功能,所以你不应该指望它能正常工作。
os.path.expanduser 这个函数可以帮你进行扩展,但通常来说,写出完整的路径会更好(这样无论谁运行这个脚本,只要他们有权限访问你的文件,就能正常工作)。
我猜你想要的是:
'/Users/bacon/git/GitPython'
20
我还没验证过,但看起来git.Git.execute需要一个命令行参数的列表(如果你给它一个字符串,它会精确匹配这个字符串,包括空格等,这样自然找不到),所以我觉得像这样应该可以:
import git
import os, os.path
g = git.Git(os.path.expanduser("~/git/GitPython"))
result = g.execute(["git", "commit", "-m", "'message'"])
其他更改:
- 我认为使用带有~的路径可能不行,所以我用了os.path.expanduser来把~扩展成你的主目录
- 一般来说,使用实例.方法(*args)比类.方法(实例, *args)更受欢迎,所以我做了这个改动,不过用另一种方式也能工作
不过,可能还有比手动运行提交命令更好的方法(我在快速浏览源码时没注意到),所以我建议在这样做之前,先确认一下有没有更高级的方法。