分类: LINUX
2009-09-24 19:59:49
这个工具在国内很少人使用,所以中文资料匮乏.只有官方的website上有一些少得可怜的中文资料了.不过总体上来说,hg还是比较好用的。
这里绍一下hg的配置。关于hg在基本用法参见mercrial的官方网站。在做以下操作时,请到 http://www.selenic.com/mercurial/安装hg.
1.建立用户hgrepo
其它用户将用这个账户用hgpush代码。
useradd hgrepo -d /home/hgrepo # add user hgrepo
passwd hgrepo
2.建立hg代码仓库
如果代码仓库名称为project.hg,则可用如下命令。
cd /home/hgrepo
mkdir project.hg
cd project.hg
hg init # 初始化代码仓库
建立一个文件
echo "hello, mercurial" > sample.txt
hg add # add
hg ci # check in
3. 打开http
打开一个端口,让远程用户可以clone仓库中的代码.
在打开端口前请确定文件权限正确。
更改文件权限
chown hgrepo.hgrepo /home/hgrepo/project.hg -R
chmod og+rw /home/hgrepo/project.hg -R
打开端口
cd /home/hgrepo/project.hg -R
hg serve -p 8002 &
可将上面两行加入/etc/rc.local这样就可以在开机的时候自动运行了。
4.使用hg
完成步骤3以后,我们就可以使用了。
clone到本地
例如你的服务器的名字为test.
hg clone
然后在本地目录就会出现一个project.hg的一个copy.
修改Client端的配置
更改.hg/hgrc,加上default-push和username
[paths]
default =
default-push = ssh://hgrepo@test//home/hgrepo/project.hg/
[ui]
username=shaohui.zheng
这样你就可用hg push 向服务器提交code了。这时服务器会问你passward,这个password就是用户hgrepo的password.
Good Luck.
官方网站
http://www.selenic.com/mercurial/
-------------------------------------------
使用:
1.初始化
假设你的源代码目录为proj,执行以下步骤可以建立初始的repository
$ cd proj
$ hg init //生成repository
$ hg add /fullpath/filename //加入文件
或者
$ hg addremove //加入可识别的文件,去除其他文件
$ hg commit //生成你的代码的第一个版本
执行此命令会让hg调用vi,这时你可以键入一些关于当前提交内容的一些信息,然后保存退出,这个版本就行程了。
2.版本
以后每当你改动文件后都可以使用hg commit命令来生成一个新的版本
$ hg parent //查看当前的版本
$ hg log //查看所有历史版本
$ hg tag //可以在一些重大的阶段制作tag,以便于将来对代码的一些里程碑进行回溯
$ hg tags //查看所有的tag,进行大的版本比较
$ hg co 版本号 //可以检出任意一个版本进行修改
而如果需要废弃某一版本后的所有版本可以使用hg strip 版本号,这样以后的提交的版本号将会从此版本号之
后计算。
3.文件
$ hg status //查看现在代码中文件的状态,m表示修改过,a表示新加的文件,
?表示文件状态未知。
新生成的文件使用 $ hg add /fullpath/filename后状态就会由?变为a
!!!新生成的文件务必要用add命令加入repository,否则在做diff文件的时候会没有新文件的内容!!!
$ hg revert //当你改变了一些文件又后悔后就可以使用此命令来取消改动
$ hg clone source dest //可以完整地将一个repository拷贝到另一个目录,这很适合做分支处理或者作一些实验型代码。
$ hg update //从原始代码树中取得最新的更新
$ hg pull 和 hg push 分别从原始地代码树中取得或者提交最新更新地文件
4.patch
$ hg diff //比较当前改动和当前版本的区别,也可以用-r参数指定两个版本进行比较,比较的结果可以从定向到文件,此文件即是一个标准的patch文件。
$ hg import /fullpath/filename //将patch文件打到当前的代码树上。