git archive --remote使用GitPython的命令

时间:2018-06-26 16:41:24

标签: git archive git-remote gitpython git-archive

如何通过GitPython使用命令(git archive --remote)?根据GitPython文档,我们可以直接使用git。我正在做类似的事情:

git = repo.git git.archive(remote ='http://path')

但是出现错误  “异常是:Cmd('git')由于以下原因而失败:退出代码(1)”

是否可以查看示例以python脚本执行git archive --remote?

谢谢

1 个答案:

答案 0 :(得分:0)

这个问题很老了,但我遇到了同样的问题,所以这是我的解决方案:

import git
import shutil

url = 'ssh://url-to.my/repo.git'
remote_ref = 'master'
tmprepo = 'temprepo'
tarball = 'contents.tar'

try:
    repo = git.Repo.init(tmprepo)
    repo.create_remote('origin', url)
    repo.remote().fetch(remote_ref)

    with open(tarball, 'wb') as f:
        repo.archive(f, f'remotes/origin/{remote_ref}', path=None)
    print('Success')
finally:
    shutil.rmtree(tmprepo)

一些注意事项:

  • 此解决方案创建一个临时存储库,获取请求的远程引用并将其存档。理想情况下,我们不需要所有这些额外的步骤,但我找不到更好的解决方案。请提出改进​​建议!
  • 如果您只想包含目录的子集,请将 path 参数设置为有意义的值
  • 因为我们不需要任何历史记录,所以可能可以优化 fetch() 调用。函数采用的 **kwargs 在这里可能会有所帮助(请参阅 man git-fetch