繁体   English   中英

如何使用python从git存储库下载单个文件

[英]How to download single file from a git repository using python

我想使用python从我的git存储库下载单个文件。

目前我正在使用gitpython lib。 下面的代码Git克隆工作正常,但我不想下载整个目录。

import os
from git import Repo
git_url = 'stack@127.0.1.7:/home2/git/stack.git'
repo_dir = '/root/gitrepo/'
if __name__ == "__main__":
    Repo.clone_from(git_url, repo_dir, branch='master', bare=True)
    print("OK")

不要将Git repo视为文件集合,而是快照集合。 Git不允许您选择下载的文件 ,但允许您选择下载的快照数量:

git clone stack@127.0.1.7:/home2/git/stack.git

将下载所有文件的所有快照,同时

git clone --depth 1 stack@127.0.1.7:/home2/git/stack.git

只会下载所有文件的最新快照。 您仍然会下载所有文件,但至少要忽略所有文件。

在这些文件中,您只需选择所需的文件,然后删除其余文件:

import os
import git
import shutil
import tempfile

# Create temporary dir
t = tempfile.mkdtemp()
# Clone into temporary dir
git.Repo.clone_from('stack@127.0.1.7:/home2/git/stack.git', t, branch='master', depth=1)
# Copy desired file from temporary dir
shutil.move(os.path.join(t, 'setup.py'), '.')
# Remove temporary dir
shutil.rmtree(t)

你也可以在python中使用subprocess

import subprocess

args = ['git', 'clone', '--depth=1', 'stack@127.0.1.7:/home2/git/stack.git']
res = subprocess.Popen(args, stdout=subprocess.PIPE)
output, _error = res.communicate()

if not _error:
    print(output)
else:
    print(_error)

但你的主要问题仍然存在:

Git不支持下载存储库的部分内容。 你必须下载所有这些。 但你应该能够用GitHub做到这一点。 参考

我不想将此标记为直接复制,因为它没有完全反映这个问题的范围,但是根据这篇SO帖子 ,路西法在答案中所说的部分似乎是要走的路。 简而言之, git不允许部分下载,但某些提供者(如GitHub)通过原始内容进行。
话虽这么说,Python确实提供了许多不同的库供下载,其中最着名的是urllib.request

您需要请求文件的原始版本! 你可以从raw.github.com获得它

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM