大規模な(数GBの)Gitリポジトリがあります。一部のアプリケーションでそのリポジトリ内に小さなファイルを作成し、変更をコミットしてほしい。これは、それらのギガバイトをディスクにチェックアウトせずに発生するはずです。
リモートリポジトリがメモリ内リポジトリに複製されているJGitコードサンプルを見つけました。
JGit(以下に示すようなもの)を使用して、ファイルをローカルでチェックアウトせずに(つまり、そのコードが実行されるマシンにギガバイトのデータを転送せずに)リモートリポジトリに追加できますか?
DfsRepositoryDescription repoDesc = new DfsRepositoryDescription();
InMemoryRepository repo = new InMemoryRepository(repoDesc);
Git git = new Git(repo);
git.remoteAdd();
git.commit();
更新1:ディレクトリ全体(追跡されたファイルと.git
)のサイズは1.2G
です。.git
単独のサイズは573Mです。
% du -hs .
1.2G .
% du -hs .git
573M .git
RAMでチェックアウトすると、リモートからまったく同じデータがダウンロードされることに注意してください。1,2G
クローンが完了した後は、ディスクではなくRAMで使用されます。
また、JGit apiを使用して「ファイル」を作成および追加する方法を確認し、必要なデータをリポジトリに追加する便利な方法であるかどうかを確認することもできます。
gitサーバーからダウンロードされるものの量を制限したい場合:浅いクローンを作成できます。たとえば、このSOの回答を
参照してください。
git clone --depth 1 <repo_url> -b <branch_name>
これにより、最新のコミット(この場合は500Mの圧縮バージョン)の内部ファイルがダウンロードされ、このコミットの実際のチェックアウト(500M)が実行されます。
必要に応じて、これをディスクまたはRAMのいずれかで実行できます。
あなたの状況では、これはチェックアウトされたファイルを含めて、RAMまたはディスク上で600-700Mの使用量で何かを必要としますが、
ダウンロードするのは約100Mだけです(私は推測しています:浅いクローンを実行して実際のサイズを確認してくださいワークステーションからのコマンド)ヘッドコミットの圧縮バージョンのサーバーから。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加