bazaar (およびlaunchpad )を数年間使用した後、 FEniCS プロジェクトを Gitに移行することを計画しています。この移行にはいくつかの要件があり、かなり複雑になります。
- 履歴を保存したいのですが、それをフィルタリングして、履歴から (現在は廃止された) ファイルのリストを取り除き、リポジトリのサイズを小さくします。
- 多くの独立した貢献者による多くのフィーチャー ブランチがあります(現在、25 人の異なる人々による 76 のブランチ)。ブランチを変換およびフィルタリングされたリポジトリに取得するための簡単な移行パス (git 初心者でも実行可能) を提供したいと考えています。
1の解決策があります。
例としてDOLFINを取り上げます。
bzr トランクをインポートします。
git init dolfin && cd dolfin
(cd path/to/bzr/trunk; bzr fast-export --plain) | git fast-import
フィルター履歴:
git filter-branch --index-filter "git rm -rf --cached --ignore-unmatch ${files_to_strip}" --prune-empty
2の解決策もあります。
bzr fast-export
上記の( dolfin.marks.bzr
) とgit fast-import
( ) の両方のdolfin.marks.git
手順で、マーク ファイルをエクスポートする必要があります。寄稿者がこれらを利用できるようにして、次のように機能ブランチをインポートできるようにします。
(cd path/to/bzr/branch; bzr fast-export --marks=path/to/dolfin.marks.bzr --git-branch=$(bzr nick)) | \
git fast-import --import-marks=path/to/dolfin.marks.git --export-marks=path/to/dolfin.marks.git
ただし、ブランチをフィルタリングすると、すべてのトランク コミットの SHA1 ハッシュが無効になり、したがってマーク ファイルが無効になるため、このレシピは機能しなくなります。
しかし、1.と2.については解決策がありません。
問題は、要件 1. と 2.の両方を確実に満たすレシピがあるかどうかです。
これは、トランクがマージされた機能ブランチのような複雑なケースでも機能することが理想的であることに注意してください (数回でも): トランクからのこれらのマージの親は、正しく識別される必要があります (2. のように)。