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

git-fossil

執筆:2022.09.14
編集:2022.09.14


$ git help fossil

GIT-FOSSIL(1) Git Manual GIT-FOSSIL(1)

NAME
git-fossil - Bidirectional operation between a fossil repository and Git

SYNOPSIS
git fossil <command> [<options>] [<arguments>]


fossilをごにょごにょ魔改造して定期的にオリジナル trunkとマージして同期するより、gitに詰め込んだほうが簡単だということに気が付いた。

圧縮ファイルとかwebui周りのセキュリティ強化とかCRLF、コードページ表示とかその他もろもろの魔改造しているので、いまさらいらない感もある。

公開ページだと文字化けやセキュリティ面で魔改造版が必要だが
ローカルネットワーク内だけなら本家版fossilとgit-fossilだけでいい感じではある。

fossilの web ui は魅力的だが
修正、これとこれまとめたいとか、このブランチ古いからいらないとか よくあるので、
コミット取り消しのできる gitのほうがいいかな
2022.09.14

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リポジトリと同じ構成にはなりません。
  • 差分圧縮に対応していないので、大きいファイルかつ細かい修正が多い場合は向いていません。
  • 履歴の削除に対応していないので、不要なブランチを切り捨てたい場合は向いていません。

» 続きを読む

2017.06.28

fossil git import すると欠落がある

執筆:2017.06.02
編集:2022.09.17


[2017.6] 1年近くたっても修正されていないようなのでメモ
[2022.9] version 2.19でも修正されていない

fossil bug : gitからのインポートで最初と最後のコミットに付随するタグが欠落する。

再現コード
# 作業フォルダを作成し移動
mkdir tag-bug
cd tag-bug

# gitの初期設定をする
git init
git config --local user.email test@test
git config --local user.name test

# gitにテストコミットをする(1-3)
git commit -m "1" --allow-empty
git tag tag1

git commit -m "2" --allow-empty
git tag tag2

git commit -m "3" --allow-empty
git tag tag3

# tag is : tag1, tag2, tag3

# gitの内容をダンプして、fossilにインポートする
git fast-export --all > ./dump.txt

fossil import --git test.fossil ./dump.txt

# fossilのタグのリストを確認する
fossil tag list -R ./test.fossil

# Actual Result
tag2, trunk
Missing of tag1, and tag3

# Expected Result
tag1, tag2, tag3, trunk

# 最新版は、masterが追加される

» 続きを読む

2017.06.02

fossil status
WARNING: multiple open leaf check-ins on
(1) Date time [hash1] (current)
(2) Date time [hash2]

fossil checkout hash2

fossil status
WARNING: multiple open leaf check-ins on
(1) Date time [hash1]
(2) Date time [hash2] (current)

fossil merge hash1
...
CONFLICT file1
...

fossil update -v hash1 file1

fossil diff --from hash1

fossil commit



コミットすると警告もなしに fork(multiple leaf)として コミットされてしまうのは残念な仕様
改造したせい?
コミット前に
fossil checkout --keep ブランチ名
を実行したほうがいいのかな?

検出したい場合
fossil leaves --multiple

2017.03.06

fossil sqliteだけ更新する場合

現在 trunk以外にチェックアウトされていると仮定する

# trunkから指定したファイルを持ってくる
fossil revert -r trunk src/sqlite3.c src/sqlite3.h

# 変更ファイル名を確認
fossil diff --brief

# trunkの情報を確認
fossil whatis trunk

# コミット用のコメントを作成
export comment="Update the built-in SQLite to $(
cat src/sqlite3.h | grep " SQLITE_VERSION " | grep -oP "[0-9.]*"
) Cherrypick trunk [$(
fossil whatis trunk | grep -P "^artifact" | grep -o "[^ ]*$"
)] "

# コメントの確認
echo $comment

# コミットする
fossil commit -m "$comment" src/sqlite3.c src/sqlite3.h

2017.02.25



PR

[PR]