目标:使用gitpython在python脚本中执行以下git命令。
cmdLine版本:
git log -L :dataLoad:/home/ubuntu/projects/alpha-draw/py/enigma.py
脚本版本:
repo.git.log(f'-L :dataLoad:/home/ubuntu/projects/alpha-draw/py/enigma.py')
这将导致以下错误,
git.exc.GitCommandError: Cmd('git') failed due to: exit code(128)
cmdline: git log -L :dataLoad:/home/ubuntu/projects/alpha-draw/py/enigma.py
stderr: 'fatal: -L argument not 'start,end:file' or ':funcname:file': :dataLoad:/home/ubuntu/projects/alpha-draw/py/enigma.py'
当我将错误中的cmdLine版本直接复制并粘贴到...命令行中时,它按预期工作。
我的假设是,当实际的工作分支不是master时,gitpython正在查看master分支。
该假设的原因:
1)我发现很多帖子都在讨论该命令的使用
repo.git.checkout("<branch>")
它的作用是让我知道我的分支是最新的。使用此命令后,当我从存储库中查询提交时,我仍然会从主服务器中获取提交。
2)认为这是未成功更改gitpython中的分支的问题的另一个原因是以下示例。
commits = list(repo.iter_commits('<branch>'))[:5]
当我更改分支时,可以获得与指定的关联的提交的预期结果。
我愿意使用其他python git库。无论如何不与gitpython绑定。我想另一种选择是放弃git库,并通过python命令行调用与git交互。
感谢所有帮助,谢谢!
答案 0 :(得分:2)
您需要将命令行参数拆分为*args
(列表):
来自:
repo.git.log('-L :dataLoad:/home/ubuntu/projects/alpha-draw/py/enigma.py')
收件人:
repo.git.log('-L', ':dataLoad:/home/ubuntu/projects/alpha-draw/py/enigma.py')
(逗号)