git-archive
を使用してリビジョン履歴を分析しています(https://stackoverflow.com/a/40811494/1168342参照)。tar処理なしのgit-archiveと同等のディスク
アプローチは機能しますが、私は多くのリビジョンのプロジェクトを最適化しようとしています。多くの処理はアーカイブを(tar経由で)無駄にし、別のディレクトリのファイルに戻します(tarからもう一度)。
tar
、git cp $revision $dest/
のようなものを使用せずにこれを行う方法をお探しです。/
は、私は、ファイルのコピーと
git reset $revision --hard
アプローチを使用することができますが、私は、複数のレポのコピー(各スレッドに1つを作成しない限り、それは、分析ボイドの並列化をレンダリングする:ここでは私がこれまでに調査したものですプロセス)。低レベルの操作でこれを実現するJava project using JGit called Dorisがありますが、奇妙なファイル(たとえば、他のreposへのリンク)があると壊れます。 gitが進化するにつれて、特別なケースがたくさんあるので、私はできるだけ低レベルでこれをやりたいとは思わない。
私はPython用のgit APIはありますが、そのarchive featureもtarを使用しています。上記と同じ理由で、私はこれをあまりにも低いレベルでコードしたくありませんでした。
worktreeと.gitインデックス名は、worktreeとrepoが同じファイルシステム上にある限り動作すると思います。迷惑メールの名前でローカルリポジトリにスクラッチインデックスを置くと、常に動作します。 – jthill
@jthill:通常のファイルシステムでソースリポジトリを使用して、/ tmp(別のファイルシステム)をターゲットとしてテストしました。それは特定のOSの1つだけですが、他のOSと同じデバイス間リンクにも同じ制限があります。 – torek
Hunh。私はなぜ '-index-output'を読んでもGIT_INDEX_FILEではなく、おそらくそのドキュメントの古くなっている読書木には制限があるのだろうかと疑問です。"コマンドが動作している間に元のインデックスファイルがロックされています 通常のインデックスファイルの隣に作成された というテンポラリファイルから、 の名前を変更(2)する必要があります。通常、この は、インデックスファイルと同じファイルシステム上にある必要があります。 ファイル自体 ディレクトリへの書き込み権限が必要な場合、インデックスファイルとインデックス出力ファイルは にあります。 – jthill