履歴を維持しながら、gitリポジトリから新しいリポジトリに単一のディレクトリを移動するにはどうすればよいですか?
-
03-07-2019 - |
質問
別々のディレクトリに複数のプロジェクトを含むgitリポジトリを継承しました。リポジトリをプロジェクトごとに新しい個別のリポジトリに分割し、マスターリポジトリにプロジェクトをサブモジュールとして含めるようにします。可能であれば、個々のプロジェクトの改訂履歴を維持しながら、これらすべてを実行したいと思います。
各プロジェクトのリポジトリを複製し、他のすべてのプロジェクトを毎回削除することもできますが、新しいプロジェクトリポジトリごとに複製された履歴がないようにするより良い方法がありますか?
解決
git filter-branch
を使用できますプロジェクトの履歴を書き換えます。ドキュメントから:
リポジトリを次のように書き換える foodir /がプロジェクトのルートであった場合、 他のすべての履歴を破棄します:
git filter-branch --subdirectory-filter foodir -- --all
レポジトリのコピーをいくつか作成し、分割したいサブディレクトリごとにコピーしてください。探しているものを見つける必要があります。
他のヒント
必要な新しいリポジトリとしてフォルダをエクスポートするには:
- エクスポートするフォルダがあるリポジトリを複製するには。
- ホスティングプロバイダーでGitHubとして空のリポジトリを作成し、エクスポートされたフォルダーを保存します。
-
クローンされたリポジトリフォルダーを開き、次のコマンドを実行します。
git subtree push --prefix=YourFolderNameToExport https://github.com/YourUserName/YourNewCleanRepoName master
gitのポイントは、親コミットをハッシュすることにより、各コミットで履歴が具体化されることです。 「リプレイ」できますコミット(これは基本的にsvn-importerの動作です)を新しいリポジトリに保存し、各サブプロジェクトのみを保持します。ただし、これはコミットハッシュの意味を破壊します。それで問題がなければ、そうしてください。
過去には、クローンを作成して先に進みました。これにより物事は大きくなりますが、ディスク容量は安価です。私の時間は高価です。
また、ディレクトリをスプライスするツールも知りません。ディレクトリのgit-logですべてのコミットを見つけることができ、その後git-fast-exportのようなものでコミットを再生できると思いますか?