Pythonを使用してgitリポジトリから単一のファイルをダウンロードしたい。
現在、私はgitpython
libを使用しています。 Gitクローンは以下のコードで正常に動作していますが、ディレクトリ全体をダウンロードしたくありません。
import os
from git import Repo
git_url = '[email protected]:/home2/git/stack.git'
repo_dir = '/root/gitrepo/'
if __name__ == "__main__":
Repo.clone_from(git_url, repo_dir, branch='master', bare=True)
print("OK")
Pythonでsubprocess
を使用することもできます。
import subprocess
args = ['git', 'clone', '--depth=1', '[email protected]:/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を使用してこれを実行できるはずです。 参照
Gitリポジトリをファイルのコレクションではなく、スナップショットのコレクションと考えてください。 Gitではダウンロードするファイルを選択できません ただし、ダウンロードするスナップショットの数は選択できます。
git clone [email protected]:/home2/git/stack.git
すべてのファイルのすべてのスナップショットをダウンロードしますが、
git clone --depth 1 [email protected]:/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('[email protected]:/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)
この質問の範囲を完全に反映していないため、これを直接の重複としてフラグを立てたくありませんが、 this SO post 。要するに、gitは部分的なダウンロードを許可していませんが、特定のプロバイダー(GitHubなど)は許可しています、生のコンテンツを介して。
そうは言っても、Pythonはダウンロードできるさまざまなライブラリを提供しますが、最もよく知られているのは rllib.request です。