首页 > 解决方案 > 如何使用 python 从 git 存储库中下载单个文件

问题描述

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

目前我正在使用gitpythonlib。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")

标签: pythonpython-3.xgitgitpython

解决方案


不要将 Git 存储库视为文件的集合,而是快照的集合。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)

推荐阅读