253

リモートの git リポジトリから単一のファイルの内容を取得するための最も効率的なメカニズム (転送されるデータと使用されるディスク容量に関して) は何ですか?

これまでのところ、私は思いつくことができました:

git clone --no-checkout --depth 1 git@github.com:foo/bar.git && cd bar && git show HEAD:path/to/file.txt

これはまだやり過ぎのようです。

リポジトリから複数のファイルを取得するのはどうですか?

4

24 に答える 24

78

ヤクブ答えに続く。 git archivetarまたはzipアーカイブを生成するため、ファイルの内容を取得するには、出力をtarにパイプする必要があります。

git archive --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -x

現在のディレクトリのリモートリポジトリのHEADから「filename」のコピーを保存します。

:path/to/directoryパーツはオプションです。除外された場合、フェッチされたファイルはに保存されます<current working dir>/path/to/directory/filename

さらに、git archive --remotegit-daemonによってホストされているGitリポジトリでの使用を有効にする場合は、daemon.uploadarch構成オプションを有効にする必要があります。https://kernel.org/pub/software/scm/git/docs/git-daemon.htmlを参照してください

于 2011-03-16T11:20:17.913 に答える
46

Web インターフェイス(gitweb、cgit、Gitorious、ginatra など) がデプロイされている場合は、それを使用して単一のファイル (「raw」または「plain」ビュー) をダウンロードできます。

反対側で有効になっている場合は、 git archiveの ' ' オプションを使用でき--remote=<URL>ます (場合によっては、ファイルが存在する特定のディレクトリに制限することもできます)。次に例を示します。

$ git archive --remote=git@github.com:foo/bar.git --prefix=path/to/ HEAD:path/to/ |  tar xvf -
于 2009-07-14T15:50:46.307 に答える
38

一般的ではありませんが、Github を使用している場合:

私にとってwget、未加工の URL は、1 つの特定のファイルをダウンロードするための最良かつ最も簡単な方法であることが判明しました。

ブラウザでファイルを開き、[Raw] ボタンをクリックします。ブラウザを更新し、URL をコピーして、wgetまたはそれに対して実行curlします。

wget の例:

wget 'https://github.abc.abc.com/raw/abc/folder1/master/folder2/myfile.py?token=DDDDnkl92Kw8829jhXXoxBaVJIYW-h7zks5Vy9I-wA%3D%3D' -O myfile.py

カールの例:

curl 'https://example.com/raw.txt' > savedFile.txt
于 2015-08-05T23:15:10.483 に答える
17

リモートから単一のファイルをエクスポートするには:

git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -x

これにより、ファイルREADME.mdが現在のディレクトリにダウンロードされます。

ファイルの内容を STDOUT にエクスポートする場合:

git archive --remote=ssh://host/pathto/repo.git HEAD README.md | tar -xO

コマンドの最後に複数のパスを指定できます。

于 2015-09-10T21:45:09.560 に答える
7

私には解決策のように見えます: http://gitready.com/intermediate/2009/02/27/get-a-file-from-a-specific-revision.html

git show HEAD~4:index.html > local_file

where4は今から 4 つのリビジョンを意味~し、コメントに記載されているチルダです。

于 2012-01-02T14:48:25.030 に答える
5

OPの質問に答える、ここでのいくつかの回答の微妙なバリエーション:

git archive --remote=git@archive-accepting-git-server.com:foo/bar.git \
  HEAD path/to/file.txt | tar -xO path/to/file.txt > file.txt
于 2016-12-08T07:50:47.930 に答える
5

私はこれを使います

$ cat ~/.wgetrc
check_certificate = off

$ wget https://raw.github.com/jquery/jquery/master/grunt.js
HTTP request sent, awaiting response... 200 OK
Length: 11339 (11K) [text/plain]
Saving to: `grunt.js'
于 2012-07-14T21:41:38.343 に答える
5

以下を使用するのが最も簡単な方法のように思えます。

wget https://github.com/name/folder/file.zip?raw=true
于 2020-04-22T19:57:04.453 に答える
0

特定のハッシュ + リモート リポジトリからファイルを取得する場合は、git-archive を試しましたが、うまくいきませんでした。

git clone を使用する必要があり、リポジトリがクローンされたら、git-archive を使用して機能させる必要があります。

リモートからの特定のハッシュからgitアーカイブでより簡単に行う方法について質問を投稿します

于 2016-12-14T21:12:17.327 に答える
0

あなたの目標がファイルをダウンロードすることだけであれば、次のような簡単なアプリケーションがありますgget:

gget github.com/gohugoio/hugo 'hugo_extended_*_Linux-ARM.deb'

上記の例では、hugoリポジトリから単一のファイルをダウンロードします。

https://github.com/dpb587/gget

于 2020-06-09T05:21:58.433 に答える
-1

@Steven Penny の回答に関連して、wget も使用します。さらに、出力を送信するファイルを決定するには、 -O を使用します。

gitlabs を使用している場合、URL の別の可能性は次のとおりです。

wget "https://git.labs.your-server/your-repo/raw/master/<path-to-file>" -O <output-file>

@Kosが言ったように、証明書を持っているか、信頼できるサーバーからgitlabsインストールにアクセスしない限り、 --no-check-certificate が必要です。私は .wgetrc を変更するよりもそれを好みますが、それはあなたのニーズに依存します。

大きなファイルの場合は、wget で -c オプションを使用することを検討してください。前のインテントが途中で失敗した場合に、残した場所からファイルのダウンロードを続行できるようにするため。

于 2014-06-19T11:44:44.347 に答える