質問

Javaで、リモートGitリポジトリから1つのファイルをプログラム的にダウンロードする方法はありますか?

  1. 私は、できるだけ少ない帯域幅を使用するソリューションを好む、できればその単一のファイルのみをダウンロードすることができます。リポジトリを閲覧する必要はありません。すでにファイルのパスがあります。
  2. 他のアプリケーションに依存しないソリューションを好む(たとえば、マシンに別のGitクライアントのインストール)。 GITクライアントの実装自体を含むJavaライブラリが最適です。

私はsubversionを使用して同様のことをすることができました svnkit そして、私はgitの純粋なJava実装があるのを見ました(Eclipse's JGit)同様のことをすることができるかもしれないので、肯定的な答えがあることを願っています。 GITの仕組みについて私が理解していることから - ローカルリポジトリからのみ更新を許可する - これは問題があることが証明される可能性があります。

役に立ちましたか?

解決

Gitは、リモートリポジトリからの単一ファイルアクセス用に実際に設計されていませんが、悪用することができます git archive このため。欠点は、必要なブロブだけでなく「ツリー」をダウンロードする必要があることです。

例えば

git archive --remote=url://to.git.repo branch path/to/dir | tar -x file

別の方法として、GitWebがリモートリポジトリにセットアップされている場合は、単純なCurlまたはWGETコマンドを使用して、「RAW」形式でファイルをダウンロードできます。

他のヒント

リモートリポジトリにはどのようなアクセスが必要ですか? SSH経由ですか、コマンドを呼び出すことができますか?もしそうなら、あなたはただ呼び出すことができます git show HEAD:$ path_to_file.

そのマシンでコマンドを呼び出すことができない場合でも、これを行うことは完全に可能ですが、GITリポジトリ形式を理解する必要があります。 (設計では非常に簡単であるため、それは見た目よりもはるかに怖くない。例えば、subversionとは異なり、リポジトリ形式はブラックボックスとして意図されていない。)

quoth git-clone(1):

- 深さの深さ

指定された数の改訂数に切り捨てられた履歴を持つ浅いクローンを作成します。浅いリポジトリには多くの制限があります(クローンやフェッチから押し出されたり、押したりすることも、それから押し出されません)が、長い歴史を持つ大規模なプロジェクトの最近の歴史にのみ興味があり、したい場合は適切です。パッチとして修正を送信します。

したがって、粒度はディレクトリですが、改訂履歴を制限できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top