日記帳
本ページはプロモーションが含まれています
カテゴリー
Links
blog(ブログ)マスター
アンドロイドの巣
ゼロから始めるベランダ菜園
タイトル
2024年12月
2 3 4 5 6 7 1
9 10 11 12 13 14 8
16 17 18 19 20 21 15
23 24 25 26 27 28 22
30 31 29

Gitからfossilに変換 2017

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
とあるオープンソースのプロジェクトを素材に試しました。
圧縮前

圧縮後
--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が新たにわくことになる。


根本的に改造する場合は、使わないほうがいいという結論です


PR

[PR]