110

別々のディレクトリに複数のプロジェクトを含む git リポジトリを継承しました。リポジトリをプロジェクトごとに 1 つずつ、新しい個別のリポジトリに分割し、マスター リポジトリにプロジェクトをサブモジュールとして含めたいと考えています。可能であれば、個々のプロジェクトの改訂履歴を維持しながら、これらすべてを行いたいと考えています。

各プロジェクトのリポジトリを複製し、毎回他のすべてのプロジェクトを削除することもできますが、新しいプロジェクト リポジトリごとに複製された履歴を避けるためのより良い方法はありますか?

4

3 に答える 3

99

git filter-branchプロジェクトの履歴を書き換えるために使用できます。ドキュメントから:

foodir /がプロジェクトルートであるかのようにリポジトリを書き直し、他のすべての履歴を破棄するには:

git filter-branch --subdirectory-filter foodir -- --all

リポジトリのコピーをいくつか作成し、分割するサブディレクトリごとに作成します。そうすれば、探しているものが完成するはずです。

于 2009-05-01T13:39:42.170 に答える
2

git のポイントは、親コミットをハッシュすることによって、履歴が各コミットに組み込まれていることです。コミットを「再生」して (これは基本的に svn-importer の動作です)、新しいリポジトリに入れ、各サブプロジェクトのみを保持することができます。ただし、これはコミット ハッシュの意味を破壊します。それで問題ないなら、それでいいです。

過去に、私はそれを複製して先に進みました。これによりサイズが大きくなりますが、ディスク容量は安価です。私の時間は高価です。

また、ディレクトリをスプライスするためのツールについても知りません。ディレクトリで git-log してすべてのコミットを見つけ、git-fast-export のようなものでコミットを再生できると思いますか?

于 2009-05-01T13:30:03.957 に答える