Gitからfossilに変換 2017
カテゴリー: バージョン管理/fossil
2017-06-28
fossilからGitに変換
- Gitからfossilに変換する
git fast-export --all > ファイル名
または
fossil import --git new-repo.fossil ファイル名
git fast-export --all | fossil import --git new-repo.fossil
- fossilからgitに変換する
mkdir example
cd example
git init
fossil export --git -R new-repo.fossil | git fast-import
リポジトリを圧縮する
- fossil
sqlite3 リポジトリファイル vacuum
- git
git fsck --full
git reflog expire --expire=now --all
git gc --prune=now
# 完全圧縮(遅い)
# git gc --prune=now --aggressive
圧縮前 |
圧縮後 |
備考 | |
git | 80MB |
7MB |
|
fossil | 約20MB | 約20MB | 無圧縮データ /stat 530MBと表示される |
取り込み直後は、fossilのほうが小さいのですが、gitは、--aggressiveするとfossilの半分になりました
gitとfossilでは、ブランチの性質が違うのでそのまま、fossilに取り込めない場合があります。
- 同一コミットに複数のブランチがある場合
- タグしかない場合
ブランチの性質
fossil | git | |
開始情報 | ある | ない |
ブランチ付け | コミットが発生 | コミットは発生しない |
完全抹消 | 不可能(仕様) | 可能 |
gitから取り込む際の注意
- コミット作者名の置換ルールがありません。
取り込む前に整理したほうがいいです - 同一コミットにブランチが2個以上ある場合対応していません
- 取り込んだ後にgitに書き出しても元のgitリポジトリと同じ構成にはなりません。
- 差分圧縮に対応していないので、大きいファイルかつ細かい修正が多い場合は向いていません。
- 履歴の削除に対応していないので、不要なブランチを切り捨てたい場合は向いていません。
fossilのインポート/エクスポートの欠陥を確認するための簡単なサンプルリポジトリです。
★ 元祖fossilは、import,exportに問題がありますので この結果を得ることはできません。
ブランチのチェックイン数がおかしいですが、gitに戻すと同じブランチ、タグ構成になるので、いいことにしましょう。
※この結果を得るために、tag_propagate_all, leaf_do_pending_checks, finish_commit, brlistQuery, 他 を修正しています。
元祖fossilの結果
- 未修整のfossilでは、このような結果になります。
(2022年 version2.19でも修正されていません)
取り込む前にきれいに整理したほうがいいでしょう。
★同じ枝なのに履歴がぽきぽき折れて気持ち悪いのでtrunk付加モードも再現
- ブランチをさかのぼって、チェックインの仲間にするかは、プロジェクトによって違うのでオプションで対応することにする。
- このモードはgitに戻すことは考慮していない。trunkが新たにわくことになる。
根本的に改造する場合は、使わないほうがいいという結論です