単一のファイル (foo.txt と呼びます) をあるリポジトリから別の (関連のない) リポジトリに移動し、その履歴を保持しようとしています。ebneter の質問は、サブディレクトリに対してこれを行う方法を示しています。taw の質問にはいくつかのヒントと提案がありますが、従うべき段階的な手順はありません。jkeatingの質問は有望に見えましたが、私にはうまくいきませんでした。この特定のユース ケースでは、Google 検索は空でした。私が探しているのは、これを達成するための明確な一連のコマンドです。
私が従い始めた一連のコマンドは次のとおりです。
$ git clone source-repo/ source-repo-copy
$ cd source-repo-copy
$ git filter-branch --tree-filter 'test ! "$@" = "foo.txt" && \
git rm --cached --ignore-unmatch $@ || true' --prune-empty
私のフィルター コマンドのロジックは、git rm
foo.txt 以外のすべてのファイルに対するものです。をコマンドに追加し|| true
て、filter-branch を満たすためにゼロの戻り値を強制しました。
私の意図は、source-repo-copy をターゲット リポジトリ (target-repo) のリモートとして設定しgit filter-branch
、foo.txt 以外のすべてを除外すると仮定して、source-repo-copy をフェッチして target-repo にマージすることでした。残念ながら、git filter-branch
コマンドは効果がないように見えました。エラーなしで実行され、source-repo の 600 以上のコミットをすり抜けたように見えましたが、終了するgit log
と、source-repo-copy のファイルとファイルは同じように見えました。foo.txt 以外のすべてのファイルが欠落していて、それに触れていないすべてのコミットがログから削除されるべきではありませんか?
この時点で、私は続行する方法がわかりません。助言がありますか?