到目前为止,我的代码正在执行以下操作。我想摆脱subprocess.call()的东西
import git
from subprocess import call
repo = git.Repo(repo_path)
repo.remotes.origin.fetch(prune=True)
repo.head.reset(commit='origin/master', index=True, working_tree=True)
# I don't know how to do this using GitPython yet.
os.chdir(repo_path)
call(['git', 'submodule', 'update', '--init'])
答案 0 :(得分:10)
我的简短回答:它既方便又简单。
完整的答案如下。假设你有你的repo变量:
repo = git.Repo(repo_path)
然后,只需:
for submodule in repo.submodules:
submodule.update(init=True)
您可以通过submodule.module()
(类型为git.Repo
)对您的普通仓库执行的子模块执行所有操作,如下所示:
sub_repo = submodule.module()
sub_repo.git.checkout('devel')
sub_repo.git.remote('maybeorigin').fetch()
我在自己的瓷器中使用这些东西而不是用来管理一些项目的git瓷器。
此外,为了更直接地执行此操作,您可以使用call()
或subprocess
,而不是使用repo = git.Repo(repo_path)
output = repo.git.submodule('update', '--init')
print(output)
或git submodule update --init
:
print()
您可以打印它,因为该方法会返回您通常通过运行SELECT * FROM table WHERE Activities = '{$activities}' AND Climate = '{$climate}' AND Continent = '{$continent}
获得的输出(显然tx = graph.cypher.begin()
tx.append("my cypher statement, i.e. MATCH STUFF")
tx.process()
....
tx.commit()
部分depends on Python version)。
答案 1 :(得分:0)
简短的回答:你不能。
完整答案:你不能,也没有意义。 GitPython
不是整个Git的完整实现。它只是为一些常见事物提供了一个高级接口。虽然一些操作直接在Python中实现,但很多调用实际上使用Git command line interface来处理内容。
您的fetch
行就是这样做的。虽然他们调用Git可执行文件来处理使用结果的子进程,但有一些trick used可以使一些调用看起来像Python。
所以你可以尝试弄清楚如何使用git cmd接口GitPython提供支持这些调用的工作(你可以使用repo.git
访问该cmd处理程序的实例),或者你只是继续使用“无聊” “子进程直接调用。