Darcs
Darcsとはgitやmercurialといった分散型バージョン管理システムの1つ。 Haskellで作られてて以前はGHCの開発に使われていた(今はgit)。
Git使えれば別にいいんですけど、なんか面白そうなので個人的にちょっと使ってみました。
install
自分はstackの環境があるのでstack install darcs
ですぐにインストールできました。
stackの環境がない人は先にstackを入れてからで→ The Haskell Tool Stack
バイナリ配布もされてます。 Darcs - Download Darcs
tutorial
ローカルでレポジトリを作成する場合は
|
|
git initとおんなじやね
リモートからcloneする場合は
|
|
Darcsのホスティングサービスはdarcs hubってのがある。 公開リポジトリを持つ全ユーザがトップページの左側に載ってる。めっちゃこじんまりしてて面白い。
基本的な流れ(gitで言うadd, commit, push)は以下の通りです.
|
|
whatsnewはgit statusみたいな感じです。コマンドにwhatsnewってなんか良いですね。 とりあえずdarcs addでパッチとして記録するファイルを選択して、darcs recordでgit commitのように差分を記録することができます。
recordや他のコマンド実行時にいちいちどのファイルを記録しますか?って聞かれることが多々あると思います。
この時に-a
をコマンドライン引数につければ、実行時に尋ねられる質問に全てyesを答えるようになるのでいちいち聞かれるのが面倒な場合は便利です。
ちなみにgitでいう.git
フォルダはdarcsだと_darcs
です。
ドットで始まってないので見えちゃいます。lsコマンドで普通に見えちゃいます。
今回はとりあえずUndo・Redo系コマンドを見てみましょう。
Undo・Redo
試しにgit reset的な、Undo・Redo的なことをしてみようと思います。
-
darcs revert working directoryの最新patchとの差分を戻す。 darcs unrevertでrevertさせた差分を復元可能。 ただしgit stashとは違いスタック形式で差分を保持できず、1回分しか退避できません。
-
darcs unrecord recordしたパッチを削除するコマンド git reset HEAD~的なやつ。 unrecordして削除したパッチは復元できない(っぽい)ので気を付けましょう。
-
darcs obliterate recordしたパッチを削除してworking directoryのファイルにもその変更を適用するコマンド git reset HEAD~ --hard的なやつ。
-
darcs rollback 特定のrecordの状態にworking directoryを変更する。 git checkoutに近い感じ。
これらのコマンドも実行すると対話的に「どのrecordに戻しますか?本当に実行しますか?」と親切に訊いてくれます。 逆にコマンドライン引数にどういう文字列を入れるとコマンド一発で実行できるのかはよくわかってません。 いろいろオプションを調べてはいるのですが、やっぱり対話的に訊いてきます。 めっちゃ喋りたがりやな。 もっと調べておきます。
今回は試しにrollbackとobliterateを動かしてみます。
以下のlogの状態でそれぞれのコマンドを打ってみます。
|
|
最初はrollback checkoutみたいな感じでworking directoryの内容を特定のパッチ時点に戻せます。 rollbackコマンド実行後にどのパッチに戻すか聞かれます。
|
|
で、これ思ったんすけどrollback後にやっぱ最新のパッチ反映時に戻したいって時どうすんでしょ。 rollbackは指定したパッチを逆に当てるって感じなので、それができません。 汚い方法は以下の通り
|
|
もうdarcsの機能使ってないじゃねーか。
てかよくよく考えたらdarcs revert
で良かったわ。
他の機能
なんかrabaseコマンドとかあるっぽいんですが、よくわかんないっす。 もうちょっといじってみます…
まとめ
あくまでパッチを管理するツールって感じなんですかねえ。もちろんブランチ機能はないです。 間違えてコマンド打った時に救済措置がなくてちょっと辛い。 gitより機能は乏しいですが、最低限のことはできそうなので普通に使えそう。
まぁgit使いますけど