python - 如何使用 python 从 git 存储库中下载单个文件
问题描述
我想使用 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")
解决方案
不要将 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)
推荐阅读
- jquery - 单击评论按钮时,如何显示每个容器的评论框?
- coq - Coq 不承认依赖列表的相等性
- ffmpeg - 使ffmpeg从指定的块而不是开始读取m3u8
- c++ - C ++中的电话号码验证?
- json - 使用 JsonReader.setLenient(true) 在改造中的第 1 行第 1 列路径 $ 处接受格式错误的 JSON
- c# - 如何在 ListBox 中转到下一行?
- javascript - 如何呼叫那些拥有更多数据的人?json
- visual-studio-code - 如何将文件夹添加到我在 VS Code 中打开的 git 存储库中?
- sql - SQLite 插入 - 如何在使用参数化值避免语法错误的同时插入任何文本
- javascript - 更改链接颜色