0

次のようにレイアウトされたgitリポジトリがあるとしましょう。

支店長

./.gitignore
./README
./foo/
./foo/magic.py
./foo/document.txt
./bar/
./bar/baxy.c
./herp/
./herp/derp.h

これらのファイルを変更または作成するコミットがたくさんあります。履歴を分割したい場合 (最初の最初のコミットを共有する必要はありませんが、共有しても問題ありません)、2 つのブランチ (ブランチがこれを行うための最良の方法であると仮定します) に分割します。

支店A

./.gitignore
./foo/
./foo/magic.py
./foo/document.txt

ブランチB

./.gitignore
./README
./bar/
./bar/baxy.c
./herp/
./herp/derp.h

たとえば、コミットが両方foo/magic.pyと同じコミットに触れていないという保証はありません。herp/derp.hブランチには、それらのファイルに影響を与えるコミットのすべての履歴が含まれている必要があります。複数のファイルに影響を与えたコミット (履歴分割全体) は分割できます。

どうすればいいですか?(肩をすくめてファイルをコピーし、歴史を台無しにすることを検討しましたが、それは警官のようです。)

編集:

それがここで鍵を握っていることは確かですgit filter-branchが、これまでそれを扱ったことはありませんでした。

4

1 に答える 1

0

これは完全な解決策ではありませんがgit filter-branch --subdirectory-filter foo、リポジトリを書き換えて ./foo の新しいルートを持つようにするため、次のようになります。

./magic.py
./document.txt

それらのコミットの付随する履歴とともに。

.gitignore ファイルの履歴は必須ではなく、SHA1 ハッシュの互換性を壊していることを考えると、最初のコミットとしてさかのぼって簡単に挿入できます。

于 2013-05-30T13:15:17.560 に答える