簡易なファイルツリーのバージョン管理ツール(gitの真似事) 2020春の使用例

2020/SEP/01

更新履歴
日付 変更内容
2020/AUG/30 新規作成
2020/SEP/01 2つのファイルツリー間の同期 (push, pull) 更新

目次


簡易なファイルツリーのバージョン管理ツール(gitの真似事) 2020春

簡易なおれおれマークダウン 2019秋の使用例 に続いて、こちらも使用例を中心に使い方を記録しておきます。


インストール

kon_pageのpythonモジュールのインストール の手順になります。

上記ページのエイリアス設定 kon_page.rc の中にもありますが、

$ alias fsyn='python -m fsyn'

を設定しておくようにします。


初期化 (create)

既存のファイルツリーをfsynで管理して扱えるようにします。

管理したいディレクトリの直下で fsyn create を実行します。

管理したいディレクトリパス + '.fsyn' というパスのディレクトリが生成されます。

例えば /tmp/hoge/ 以下を管理したい場合

 cd /tmp/hoge
$ fsyn create
create /private/tmp/hoge.fsyn

$ find ../hoge.fsyn
../hoge.fsyn
../hoge.fsyn/curr
../hoge.fsyn/org
../hoge.fsyn/org/link
../hoge.fsyn/org/snap
../hoge.fsyn/org/update.tgz


ファイルツリーを変更したとき

変更ファイルの確認 (check)

管理しているディレクトリの直下で fsyn check を実行します。

変更があったファイルが表示されます。

例えば

$ cd /tmp/hoge
$ mkdir -p foo/bar
$ echo hoge > foo/bar/hoge.txt

$ rm kon_ut/wx_ut.py-old

の変更をした場合

$ cd /tmp/hoge
$ fsyn check
org
dirty
add:
  foo/bar/hoge.txt
rm:
  kon_ut/wx_ut.py-old

変更の登録 (commit)

管理しているディレクトリの直下で fsyn commit を実行します。

コミットIDが表示されます。

$ cd /tmp/hoge
$ fsyn commit
commit 2020-08-30_17.32.12


コミットIDの表示 (curr, log)

管理しているディレクトリの直下で fsyn curr を実行すると、 現在のコミットIDが表示されます。

$ cd /tmp/hoge
$ fsyn curr
2020-08-30_17.32.12

管理しているディレクトリの直下で fsyn log を実行すると、 現在のコミットIDからcreateした時点のorgまで遡って表示されます。

$ cd /tmp/hoge
$ fsyn log
2020-08-30_17.32.12
org

その他の各種コミットIDの表示

fsynに続き、次のコマンドが使用可能です。

コマンド 説明
ids 全てのidを表示します
tails 全ての枝の最新(末端)のidを表示します
ctails カレントidの子孫の全ての枝の最新(末端)のidを表示します
latest 全てのidの中の最新のidを表示します
clatest カレントidの子孫のidの中の最新のidを表示します
prev カレントidの1つ古い(親)のidを表示します
next カレントidの1つ新しい(子)のidを表示します


コミットIDの状態にする (checkout)

管理しているディレクトリの直下で fsyn checkout コミットID を実行すると、 ファイルツリーを指定のコミットIDの状態にします。

$ cd /tmp/hoge
$ fsyn checkout org
checkout org

$ ls foo
ls: foo: No such file or directory

$ ls kon_ut/wx_ut.py-old
kon_ut/wx_ut.py-old

$ fsyn checkout 2020-08-30_17.32.12
checkout 2020-08-30_17.32.12

$ find foo
foo
foo/bar
foo/bar/hoge.txt

$ ls kon_ut/wx_ut.py-old
ls: kon_ut/wx_ut.py-old: No such file or directory

コミットIDの指定には次のエイリアスが使用可能です。

エイリアス 説明
latest 全てのidの中の最新のid
clatest カレントidの子孫のidの中の最新のid
prev カレントidの1つ古い(親)のid
next カレントidの1つ新しい(子)のid (複数候補あり)
tail 全ての枝の最新(末端)のid (複数候補あり)
ctail カレントidの子孫の全ての枝の最新(末端)のid (複数候補あり)


クローン (clone)

他の場所に管理しているファイルツリーをコピーします。

コピー先の場所から

$ fsyn clone コピー元の.fsyn ディレクトリパス

を実行します。

コピー先のコミットIDは最新のコミットIDになります。

例えば /tmp/hoge の hoge を /tmp/backup にコピーしたい場合

コピー元の.fsyn ディレクトリパスは /tmp/hoge.fsyn

hoge を配置したいコピー先の場所は /tmp/backup

$ mkdir /tmp/backup
$ cd /tmp/backup
$ fsyn clone /tmp/hoge.fsyn
checkout 2020-08-30_17.32.12

$ ls
hoge		hoge.fsyn

$ cd hoge
$ fsyn curr
2020-08-30_17.32.12


2つのファイルツリー間の同期 (push, pull)

push

コミットを追加したファイルツリーから、他のファイルツリーの場所を指定して、 fsyn push を実行します。

$ cd /tmp/hoge
$ echo 1179 >  foo/bar/mbs.txt
$ fsyn commit
commit 2020-08-30_18.09.16

push先には次のバージョンがコピーされます

push先のカレントのバージョンはそのままです。

$ fsyn push /tmp/backup
$ cd /tmp/backup/hoge

$ fsyn ids
2020-08-30_18.09.16
2020-08-30_17.32.12
org

$ fsyn curr
2020-08-30_17.32.12

push先でcheckoutして最新のバージョンにします。

$ fsyn checkout latest
checkout 2020-08-30_18.09.16

$ cat foo/bar/mbs.txt
1179

pull

コミットが追加されているファイルツリーの場所を指定して、 fsyn pull を実行します。

$ cd /tmp/hoge
$ echo 1314 > foo/bar/obc.txt
$ fsyn commit
commit 2020-08-30_18.12.45
$ cd /tmp/backup/hoge

$ fsyn pull /tmp
checkout 2020-08-30_18.12.45

$ fsyn ids
2020-08-30_18.12.45
2020-08-30_18.09.16
2020-08-30_17.32.12
org

$ cat foo/bar/obc.txt
1314

pullでは、カレントバージョンからの新しい子孫のバージョンを全て取り込みます。

pullで他の xxx.fsyn/ の情報を引っ張ってきたあと、 内部的にcheckoutが実行され、 カレントidの子孫のidの中の最新のid の状態 (clatest) になります。


工事中