git-fossil
fossilをごにょごにょ魔改造して定期的にオリジナル trunkとマージして同期するより、gitに詰め込んだほうが簡単だということに気が付いた。
圧縮ファイルとかwebui周りのセキュリティ強化とかCRLF、コードページ表示とかその他もろもろの魔改造しているので、いまさらいらない感もある。
公開ページだと文字化けやセキュリティ面で魔改造版が必要だが
ローカルネットワーク内だけなら本家版fossilとgit-fossilだけでいい感じではある。
fossilの web ui は魅力的だが
修正、これとこれまとめたいとか、このブランチ古いからいらないとか よくあるので、
コミット取り消しのできる gitのほうがいいかな
執筆:2022.09.14
編集: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>]
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のほうがいいかな
カテゴリー: バージョン管理/fossil
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
圧縮前 |
圧縮後 |
備考 | |
git | 80MB |
7MB |
|
fossil | 約20MB | 約20MB | 無圧縮データ /stat 530MBと表示される |
取り込み直後は、fossilのほうが小さいのですが、gitは、--aggressiveするとfossilの半分になりました
gitとfossilでは、ブランチの性質が違うのでそのまま、fossilに取り込めない場合があります。
- 同一コミットに複数のブランチがある場合
- タグしかない場合
ブランチの性質
fossil | git | |
開始情報 | ある | ない |
ブランチ付け | コミットが発生 | コミットは発生しない |
完全抹消 | 不可能(仕様) | 可能 |
gitから取り込む際の注意
- コミット作者名の置換ルールがありません。
取り込む前に整理したほうがいいです - 同一コミットにブランチが2個以上ある場合対応していません
- 取り込んだ後にgitに書き出しても元のgitリポジトリと同じ構成にはなりません。
- 差分圧縮に対応していないので、大きいファイルかつ細かい修正が多い場合は向いていません。
- 履歴の削除に対応していないので、不要なブランチを切り捨てたい場合は向いていません。
» 続きを読む
カテゴリー: バージョン管理/fossil
2017.06.28
fossil git import すると欠落がある
[2017.6] 1年近くたっても修正されていないようなのでメモ
[2022.9] version 2.19でも修正されていない
fossil bug : gitからのインポートで最初と最後のコミットに付随するタグが欠落する。
再現コード
執筆:2017.06.02
編集:2022.09.17
編集: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が追加される
» 続きを読む
カテゴリー: バージョン管理/fossil
2017.06.02
fossil status
fossil checkout hash2
fossil status
fossil merge hash1
fossil update -v hash1 file1
fossil diff --from hash1
fossil commit
コミットすると警告もなしに fork(multiple leaf)として コミットされてしまうのは残念な仕様
改造したせい?
コミット前に
fossil checkout --keep ブランチ名
を実行したほうがいいのかな?
検出したい場合
fossil leaves --multiple
WARNING: multiple open leaf check-ins on
(1) Date time [hash1] (current)
(2) Date time [hash2]
(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)
(1) Date time [hash1]
(2) Date time [hash2] (current)
fossil merge hash1
...
CONFLICT file1
...
CONFLICT file1
...
fossil update -v hash1 file1
fossil diff --from hash1
fossil commit
コミットすると警告もなしに fork(multiple leaf)として コミットされてしまうのは残念な仕様
改造したせい?
コミット前に
fossil checkout --keep ブランチ名
を実行したほうがいいのかな?
検出したい場合
fossil leaves --multiple
カテゴリー: バージョン管理/fossil
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
現在 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
カテゴリー: バージョン管理/fossil
2017.02.25