我想使用python从我的git存储库下载单个文件。
当前,我正在使用gitpython
lib。 Git clone使用下面的代码可以正常工作,但是我不想下载整个目录。
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")
答案 0 :(得分:2)
不要将Git存储库视为文件的集合,而是快照的集合。 Git doesn't allow you to select what files you download,但允许您选择下载的快照数量:
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)
答案 1 :(得分:1)
您还可以在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做到这一点。 Reference
答案 2 :(得分:0)
我不想将其标记为直接重复,因为它不能完全反映此问题的范围,但是this SO post指出,路西法在他的回答中所说的部分内容似乎仍然可行。 。简而言之, git 不允许部分下载,但是某些提供程序(例如GitHub)可以通过原始内容进行下载。
话虽这么说,Python确实提供了许多不同的库可供下载,其中最著名的是urllib.request。
答案 3 :(得分:-2)
您需要请求文件的原始版本!您可以从raw.github.com
获取它