Darcs简介
施冠玉
2023-12-01
[url=http://abridgegame.org/darcs/]Darcs[/url] 是新一代轻量级分布式版本控制系统. 完全使用Haskell编写而成。
不同于以往的版本控制系统, Darcs没有中央服务器. 任何一个本地repository都可以既是
客户端也是服务器, 节点之间可以任意同步. 这样我们可以不依赖网络离线comit任何修改:
比如在笔记本上修改, 然后回去在同步到台式机上(svn的扩展svk也能提供本地镜像以便
离线操作,但是终究还是不能脱离svn服务器). 同时Darcs的每个本地repository也可以看
作是个完整的branch, 比如我们要建立stable和dev两个版本专注于新功能和改错的不同
目的, 可以很方便地对同一个项目在本地建立两个repository, 以后只要从stable版本pull
补丁到dev版本就可以了.
Darcs的使用:
首先在需要进行版本控制的目录初始化repository:
[code]/project_a/darcs init[/code]
这会在在目录下生成_darcs管理目录
然后我们选择那些文件需要被darcs管理, 一般就是所有文件了:
[code]darcs add -r .[/code]
-r代表包括子目录
我们第一次这样导入所有文件:
[code]darcs record --all[/code]
它会提示一些基本信息的输入.
Darcs是高度交互的, 一般不输入参数而执行darcs命令的话它会问你很多问题.
也可以在命令行直接输入参数, 这样就比较安静了....
在这以后每次修改要comit进reposity只要执行
[code]darcs record[/code]
即可, 它会找出所有的变化一一询问.
如此我们可以建立另外一个repository比如project_b
这两个如何同步呢? 很简单. 如果a要获得b的修改,只要在project_a目录下执行
[code]darcs pull /path/to/project_b [/code]
这个path也可以是http地址,如果project_b在网络上空开repository的话.
反之, 如果project_a要把自己的修改融入project_的版本,只要执行
[code]darcs push /path/to/project_b [/code]
如果这个path是http的话, 比较麻烦点需要两边都配置ssh链接.
所以darcs提供了通过email方式发送(darcs send)补顶集合而不是直接写进远程的repository中.
以后由repository管理者决定是否应用(darcs apply)个别补丁. 这其实也是Linus对递交的补丁所采用的管理方式.
另外如果我们在不联网的两台机器上通过U盘同步也很简单. 只要两边都对U盘中做中转的repository pull/push就可以了.
在这过程中如果出现个别文件冲突darcs会自动提醒你解决. 同步操作的背后Darcs实际比较
两边的changes log(darcs changes)及内在的补丁依赖关系以决定如何同步文件. Darcs
基于一个叫patch theory的高深理论, 我等凡人就不用懂啦.
另外常用的命令包括whatsnew, rollback(对应apply补丁), unrecord, diff等都很直观.
更多信息请参阅官方文档和[url=http://www.darcs.net/DarcsWiki]Wiki[/url]