私はいくつかのギガバイトのデータを含むディレクトリを追跡するようにgit-annexを設定しました。その内容はS3リモコンにコピーされるため、一部のファイルを削除してスペースを解放し、必要に応じて再インポートできます。
同じことをしたい他のコンピュータがあります。このコンピュータには、すでにS3リモコンに保存されているほとんどのファイルが含まれています。
ローカルディレクトリにあるS3のファイルをダウンロードせずに他のコンピュータで新しいリポジトリを初期化するようにgit-annexに指示するにはどうすればよいですか?
答え1
2015-04-30 編集:
アナキャットが1つ書きました。ガイドこのユースケースについて、彼はこの回答のコメントに投稿しました。
2013年5月31日に修正:
受け入れてくれてありがとう! gioeleはコメントでは、これがダイレクトモードのreinject
gitannexリポジトリでは機能しないと指摘しました。これは意味があり、私の答えで優位を占めています。 slmを使用して選択肢を見つけ、git annex add
gioeleもこのアプローチを採用しているようです。詳細については、slmの回答を参照してください。
オリジナル
gitアドオンについて聞いたことがありません。本当に素晴らしいツールです!
さて、私がgit添付ファイルから読んだ内容によるとウェブサイト、新しいシステムではgit clone
S3リポジトリでこれを行うことができ、シンボリックリンクのみをコピーするため、費用はかかりません。その後、通常通りにcd
入ってgit annex init <reponamehere>
リポジトリをgit add-onに教えてください。
私が理解しているように、あなたがしなければならないトリッキーなことは、gitannexにリポジトリデータのローカルコピーを認識させることです。マニュアルページでreinject
あなたがしたいことをするコマンドを見つけました。
git annex reinject /path/to/files/* /path/to/repo
--fast
で無効にできるオプションを追加したい場合がありますreinject
。もちろん、これは少し危険で動作しない可能性があります。reinject
許可されているかどうかはわかりません--fast
。
find
また、目的のファイルがreinject
単一のディレクトリよりも複雑な場合は、一種の単一のライナーが必要になる場合があります。それは次のとおりです。
find /path/to/files/* -type f -exec bash -c 'echo $1 "/path/to/repo/${1#/path/to/files}"' -- '{}' \;
それ(私の考えでは)は、各ファイルのパスをエコーし、同時に/path/to/files
リポジトリから削除されたターゲットパスもエコーします。実行後に/path/to/files
置き換えるecho
と、出力が期待したものと同じであることを確認できます。これと組み合わせて使用すると、git annex reinject
大きな力と大きな責任があります:)find
bash -c
出典:データ分析作業を行い、多くのファイルバッチ操作を含み、gitが本当に好きです。
答え2
私git-annex開発者に質問をする彼らのフォーラムで。これは私/あなたの質問です:
新しいストレージ設定について質問があります。 S3リモートリポジトリからダウンロードするのではなく、自分のラップトップにすでに存在するローカルファイルを使用して新しいリポジトリを初期化できますか?明確でない場合は申し訳ありません。しかし、S3からローカルファイルをダウンロードするのに苦労する必要がないように、ラップトップでローカルファイルを利用しようとしています。
また、S3リポジトリに既にあるファイルと比較すると、私のラップトップにローカルにすべてのファイルの完全なセットがないことにも言及する必要があります。
の著者であるJoeygit-annex
は、次のいずれかのオプションを使用できると述べています。
git annex reinject
特定のファイルを入力するために使用されます。- すべてのローカルファイルを一時ディレクトリにチェックインします。どちらかgit-annexアシスタント
git annex add
または、これらのファイルがすでにリポジトリにあるファイルと同じ内容を持っているかどうかをマニュアルに表示します。これにより、ファイルは一時ディレクトリと以前にリポジトリがチェックインされた場所の2つの場所で使用できます。その後、一時ディレクトリを削除できます。