2017-08-11 23 views
0

2つのgitリポジトリrepo1repo2の間でいくつかのファイルを移動しようとしています。私は移動したいファイルの短いリストを持っています(履歴を保存します)。 repo1から移動するgit filter-branchを使用しているファイルのリスト以外のすべての履歴を削除します。

3つのファイル:

libraryname/file1 
libraryname/file2 
tests/libraryname/file3 

libraryname/tests/libraryname/内の他のファイルがあります。 /tests/内の他のフォルダがあります

私の計画は、それだけで私が興味のファイルの履歴が含まれてまで、履歴ツリーを変更する。そして、チェックアウトrepo2を、repo1をチェックアウトし、前回の出力にマージすることです操作。最初のステップではgit filter-branchが適切なツールだと思われます。

これまでに試したことがありますgit filter-branch --index-filter 'git rm -r --cached <FILES>' ここで、<FILES>には不要なフォルダやファイルがすべてリストされています。

しかし、これは多くのフォルダがHEADに存在しなくなりましたが、このリポジトリの存続期間のある時点で存在していました。このレポの歴史に存在していたすべてを理解することは非常に面倒なようです。より良い方法が必要です。

これらの3つのファイルだけを含むgitコミットツリーで終わるのですか? 私はより良い方法がありますか? 現在、HEADに存在しないすべてのファイルの痕跡を削除する方法はありますか?

答えて

2

あなたはフォルダが残っていると言いました。あなたがファイルの末尾にファイルを残していると仮定します。これらのフォルダ(gitは空のフォルダを保持しないため)...

インデックスをクリアしてから、必要なエントリ。

git filter-branch ... 
    --index-filter 'git rm -r --cached * && git reset $GIT_COMMIT -- libraryname/file1 libraryname/file2 tests/libraryname/file3 
    ... 

はあなたが --prune-emptyオプションを含める意味することを忘れてはいけないので、多くのコンテンツを間引いているので

関連する問題