tortoisehg 64下载linux怎么启动

Linux下Mercurial (hg)配置说明
今天从源代码安装了mercurial,本来可以用命令很简单的安装:sudo apt-get install mercurial,但是安装以后发现版本比较老,所以决定从源代码安装。
官方网站:下载下来解压缩以后,里面有个README文件,打开以后按照说明来:
Basic install:
$ make&&&&&&&&&&&&&&&&&&$ make install&&&$ hg debuginstall&$ hg&&&&&&&&&&
安装完成后执行 hg debuginstall 时出现了错误:
hg --versionabort: couldn't find mercurial libraries in [/usr/local/bin /usr/lib/python2.6 /usr/lib/python2.6/plat-linux2 /usr/lib/python2.6/lib-tk /usr/lib/python2.6/lib-old /usr/lib/python2.6/lib-dynload /usr/lib/python2.6/dist-packages /usr/lib/python2.6/dist-packages/PIL /usr/lib/python2.6/dist-packages/gst-0.10 /var/lib/python-support/python2.6 /usr/lib/python2.6/dist-packages/gtk-2.0 /var/lib/python-support/python2.6/gtk-2.0 /usr/local/lib/python2.6/dist-packages](check your install and PYTHONPATH)
解决方法:export PYTHONPATH=/usr/local/lib/python2.4/site-packages或者:把上面的加到这两个文件中的一个: .bashrc、/etc/profile。然后就可以正常使用了。
&添加配置文件
此时再运行hg debuginstall ,会出现
Checking username...
no username supplied (see "hg help config")
(specify a username in your .hgrc file)
1 problems detected, please check your install!
这是由于配置文件的原因
通过man hgrc会看到一些说明。默认是去一些位置找配置文件的。如果没有,就创建。源码中contrib文件夹下提供了一个sample.hgrc,可以拷贝过来修改
# cp sample.hgrc /root/.hgrc
# vim /root/.hgrc
这里改一下:
### show changed files and be a bit more verbose if True&
# verbose = True&
### username data to appear in comits
### it usually takes the form: Joe User &joe.&&
username = Joe Who &j.&
verbose = True&
### --- Extensions
再运行hg debuginstall ,出现这个提示就可以了
Checking encoding (UTF-8)...
Checking extensions...
Checking templates...
Checking patch...
patching file hg-debuginstall-wCOuEs
Checking commit editor...
Checking username...
No problems detected
运行hg,出现
分布式软件配置管理工具 - 水银 (版本 1.5.0)&
版权所有 (C)
Matt Mackall && 和其他人。
这是自由软件,具体参见版权条款。这里没有任何担保,甚至没有适合
特定目的的隐含的担保。
unixinstall
这个工具在国内很少人使用,所以中文资料匮乏.只有官方的website上有一些少得可怜的中文资料了.不过总体上来说,hg还是比较好用的。
接下来开始 HG 的使用
1.建立用户hgrepo
其它用户将用这个账户用hg服务器push代码。
useradd hgrepo -d /home/hgrepo # add user hgrepopasswd hgrepo
2.建立hg代码仓库
如果代码仓库名称为project.hg,则可用如下命令。
cd /home/hgrepomkdir project.hgcd project.hghg init # 初始化代码仓库建立一个测试文件
echo "hello, mercurial" & sample.txthg add& # addhg ci&&&& # check in
3. 打开http
打开一个端口,让远程用户可以clone仓库中的代码.在打开端口前请确定文件权限正确。
更改文件权限chown hgrepo.hgrepo /home/hgrepo/project.hg -Rchmod og+rw /home/hgrepo/project.hg -R打开端口
cd& /home/hgrepo/project.hg -Rhg serve -p 8002 &可将上面两行加入/etc/rc.local这样就可以在开机的时候自动运行了。
完成步骤3以后,我们就可以使用了。
clone到本地
例如你的服务器的名字为test.
hg clone http://test:8002然后在本地目录就会出现一个project.hg的一个copy.
修改Client端的配置
更改.hg/hgrc,加上default-push和username
[paths]default = http://test:8002default-push = ssh://hgrepo@test//home/hgrepo/project.hg/[ui]username=shaohui.zheng这样你就可用hg push 向服务器提交code了。这时服务器会问你passward,这个password就是用户hgrepo的password.
Good Luck.
另外还有个 Windows 下的客户端与其配合使用
TortoiseHg
非常不错的安装教程,简单易用, 还有些错误 多百度百度Linux应用(43)
注:源自/blog/413620
Mercurial可以使异地开发进行统一的版本管理,比如一个项目有一部分人在银行内部开发无法用外网,另一部分人在公司开发,这两部分人需要一个统一的版本管理工具,mercurial这时候可以发挥作用mercurial同Subversion很多命令相同,所以学习曲线不陡峭,可以比较快的掌握使用。add,commit,branch,tag等命令都是相似的操作方式。mercurial也是管理一个全局的版本号,同时每个版本号有一个唯一的ID识别,版本号只是顺序号,不同版本库的相同的版本号并没有可比较的意义,版本ID相同才说明这个版本是相同的mercurial对linux,windows,mac平台都有比较好的支持。在windows平台上有基于命令行的mercurial.exe和基于图形界面的TortoiseHgDVCS同集中式版本管理的最大不同点是,每个人机器上都有一个版本库,一个版本库如同一个svn branch,所以如何使用branch,并进行合理的合并,同其他人的版本合并也变得异常重要,不然会形成非常的heads,将会形成混乱。mercurial通过导出changeset到文件中,可以方便的通过邮件附件的形式来发送到另外一个项目组成员,继而进行导入,从而实现版本同步在当前最火的两个DVCS中,Google code选择了Mercurial,但Git有它的一些优势,比如版本库存储、多个parents方便merge
以下使用大多基于命令行形式,版本是1.2.11
因为本地即是版本库的服务端也是版本库的客户端,所以首先得区分好版本库和工作目录两个概念,版本库存放了所有的版本,工作目录只是某个特定的版本,这个概念同svn是一致的,只是svn的版本库不在本地,而在集中的一台服务器上。hg init 创建新仓库,版本库的文件放在一个.hg的文件夹下面hg add 添加未版本化的文件hg commit 提交修改,使用-m 填写comments,同svn是一样的hg tip 查看当前版本库的最新版本,注意:不是当前工作目录的最新版本。tip是版本库最新版本的意思hg parents查看当前工作目录的最新版本,如果这个版本有多个parent,会显示出来,如果没有则不显示。parent是指某个版本的前一个版本,如果某个版本通过两个版本merge而来,则会出现多个parents。mercurial还不支持超过两个的parents,也就是说只能将版本两个两个的合并,合并3个版本需要操作2次,合并4个版本需要操作3次,依次类推,如果碰到8个版本需要合并,则需要合并7次...hg clone 克隆一个版本库到本地,当项目开始的时候,建议在一台电脑上init项目后,然后大家从他那clone出来,而不是各自init。hg pull 从另一个版本库更新版本到本地hg push 将本地版本库更新到其他版本库中,其他版本库需要开通ssh服务,Windows下需要cygwin来启动ssh,linux下用openssh实现。Windows客户端连接ssh服务器时,需要在mercurial.ini的ui段配置,如下
&C:\Program Files\TortoiseHg\TortoisePlink.exe&
putty.exe 无法配合hg使用。
TortoisePlink.exe对于 ssh://xx/ 之后的路径需要再加一个&/& 以示根路径,如下:
ssh://192.168.107.129//home/arthur/hg/hello
hg incoming 将本地版本库同其他版本库进行比较,看看有哪些changeset在其他版本库中可以pull过来hg outgoing 将本地版本库同其他版本库进行比较,看看有哪些changeset可以push到其他版本库中hg update 更新工作目录,默认参数是tip,参数也可以是版本号、tag名字、branch名字。svn中的切换branch/tag通过这个命令来实现hg tag 制定一个永久的版本号,tag存放在.hgtags文件中,这个文件也需要版本化hg branch 显示当前branch,或者新建一个branch,默认的branch名字是default。hg diff 对比版本间的差异hg merge 合并版本到当前工作目录,hg pull之后会提示hg update,hg update之后如果提示hg merge,这时候的merge是在最新版本的基础上进行的merge,merge之后所作的修改需要通过commit来生成新的版本号。
合并branch : hg merge branchname ,先确认hg branch是什么再执行这个命令。
当一个branch的历史使命完成的时候,这时候需要决定是基于这个branch新开一个branch,还是在某个之前的版本开立branch. default是一个没有创立任何branch时的默认branch名字。
如果希望继续工作在default branch下,则需要先hg update default,然后再考虑需要合并哪些版本到default里面,之后就可以在default下一直工作了。
对于开了多个branch需要合并到default时,需要一个个branch来合并,诸如这样:
hg merge foo
hg merge bar
hg ci -m &merge foo and bar to default
在windows下,如果安装了beyond compare,会自动被调用出来。
显示三个窗口:本地文件、基文件((在分支分开前的最后一个版本))、其他文件(外来的文件)。这种合并模式同svn是一样的。
merge做完之后,需要hg ci提交修改,这时可以看到tip 信息中的parent有两个,表明是从两个版本中merge过来的。
beyond compare对于冲突有三个基本选项:Take left, take center, take right,分别对应以上三个文件的内容。还有其他几个选项也很容易明白。有冲突时还可能需要手工输入内容。
另外,如果我们没有安装图形合并程序, 我们就会开启文本编辑器来访问需要合并的文件。用手工来做这些事情是非常容易出错并且繁琐的。 最好是退出编辑器并用hg rollback指令来清除[&Pull&]带来的改变,然后安装合并程序,再做一次。
hg headshead指的是没有儿子chaneset的changeset,也就是版本树的叶子节点,多个叶子节点可以进行合并为一个叶子, branchheads指那些给了tag但还没有儿子changeset的changeset。 用hg heads显示当前库所有的heads ,如果存在多个heads则说明有多条并行开发的路径,这时需要考虑是否需要合并。hg serve -n &hellohg& -p 80 运行网络服务。之后可以通过hg pull 来下载这个版本库。这是一个临时性的便捷的提供pull版本库服务的方法hg export 导出changeset,默认导出tip,需要用重定向来导出到文件中,之后这个文件可以通过邮件附件发出,这样可以实现无网络连接状态下的版本同步hg import 导入changeset
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:268613次
积分:4456
积分:4456
排名:第5410名
原创:151篇
转载:76篇
评论:23条
阅读:11804
阅读:20083> CentOS 6.3安装tortoiseHg运行thg没反应的解决方法
CentOS 6.3安装tortoiseHg运行thg没反应的解决方法
&这个问题困扰了我很长时间,也让我重装了很多次CentOS系统,开始是64位,现在是32位,反正都没有正常打开过,而且我觉得只要用CentOS6.3系统的,装tortoiseHg肯定打不开。
安装方法很简单,这里不说了,不会的童鞋也可以参考此文:
(值得注意的是Ubuntu下安装python-dev是sudo apt-get python-dev,而CentOS下则应该是sudo yum install python-devel)
安装很顺利,Mercurial hg 2.3和tortoisehg 2.5都成功安装。
然后在命令行下输入: thg 回车,没有反应?@#¥@!#¥@
什么反应都没有,我想问元芳,但是他不在,纠结了很久很久,现在空下来了,心不死,继续GOOGLE,看到了一条消息,说tortoisehg需要PyQt&4.7 qt&4.6
(谷歌搜索&TortoiseHg does not start on CentOS&,找到)
我就抱着试试的心态,装PyQt4.9,结果是可以的,虽然还有错误,但是界面是调出来了。以前有地方说需要python2.7,我就找到篇坑爹的文章,卸载了python2.6再装上python2.7结果,直接导致rpm、yum都不能用,搞了一个下午,可以说系统是没法玩了,害得我只能重装系统。
所以这次装的时候,装PyQt的时候长记性了,哈哈。我在虚拟机里的CentOS下搞,还做了快照。
下面代码自己慎重运行,因为我自己也没法保障你们运行了,会有什么后果,但是我这边是解决了一直运行thg没反应的问题,我建议你先看完全文再操作。
yum remove PyQt #卸载 yum remove qt #卸载,你没有装过就没事 vim /etc/yum.repos.d/CentOS-ATrpms.repo #这步是增加源
输入如下内容:
#ATrpms&[atrpms]&name=&CentOS-$releasever&-&ATrpms&baseurl=http://dl.atrpms.net/el$releasever-$basearch/atrpms/testing&gpgcheck=1&gpgkey=http://ATrpms.net/RPM-GPG-KEY.atrpms&enabled=1&
rpm --import http://packages.atrpms.net/RPM-GPG-KEY.atrpms
安装依赖包:
yum -y install qt47 qt47-devel gcc gcc-c++
安装SIP(安装PyQt时需要):
http://pkgs.fedoraproject.org/repo/pkgs/sip/sip-4.13.1.tar.gz/3f61fd39d5b0c8fa9e43b59af04de924/sip-4.13.1.tar.gz cd sip-4.13.1 python configure.py
make && make install
&安装PyQt:
wget&http://pkgs.fedoraproject.org/repo/pkgs/PyQt4/PyQt-x11-gpl-4.9.tar.gz/d87b6c2a25bd3ea994504/PyQt-x11-gpl-4.9.tar.gz&tar&zxvf&PyQt-x11-gpl-4.9.tar.gz&cd&PyQt-x11-gpl-4.9&python&configure.py&-q&/usr/lib/qt47/bin/qmake-qt47&//如果系统是64位则&//python&configure.py&-q&/usr/lib64/qt47/bin/qmake-qt47&make&&&&make&install&//这里时间可能有点长,我大致make了十几分钟吧&
这样安装好了后,你在运行thg,就会发现有界面了,但是还是报错了。
看到最下面
有一个No module named Qsci的错误,
{{{&#!python&**&Mercurial&version&(2.3.1).&&TortoiseHg&version&(2.5)&**&Command:&&**&CWD:&/home/huangdd/下载&**&Encoding:&UTF-8&**&Extensions&loaded:&&**&Python&version:&2.6.6&(r266:84292,&Sep&11&:27)&[GCC&4.4.6&&(Red&Hat&4.4.6-4)]&**&Qt-4.7.2&PyQt-4.9&Traceback&(most&recent&call&last):&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/run.py&,&line&56,&in&dispatch&&&&&return&_runcatch(u,&args)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/run.py&,&line&247,&in&_runcatch&&&&&return&runcommand(ui,&args)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/run.py&,&line&323,&in&runcommand&&&&&return&_runcommand(lui,&options,&cmd,&d)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/run.py&,&line&374,&in&_runcommand&&&&&return&checkargs()&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/run.py&,&line&328,&in&checkargs&&&&&return&cmdfunc()&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/run.py&,&line&322,&in&&&&&&d&=&lambda:&util.checksignature(func)(ui,&*args,&**cmdoptions)&&&File&&/usr/lib/python2.6/site-packages/mercurial/util.py&,&line&471,&in&check&&&&&return&func(*args,&**kwargs)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/run.py&,&line&757,&in&log&&&&&from&tortoisehg.hgqt.workbench&import&run&&&File&&/usr/lib/python2.6/site-packages/mercurial/demandimport.py&,&line&95,&in&_demandimport&&&&&return&_import(name,&globals,&locals,&fromlist,&level)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/workbench.py&,&line&20,&in&&&&&&from&tortoisehg.hgqt.repowidget&import&RepoWidget&&&File&&/usr/lib/python2.6/site-packages/mercurial/demandimport.py&,&line&114,&in&_demandimport&&&&&mod&=&_origimport(name,&globals,&locals)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/repowidget.py&,&line&28,&in&&&&&&from&tortoisehg.hgqt.revdetails&import&RevDetailsWidget&&&File&&/usr/lib/python2.6/site-packages/mercurial/demandimport.py&,&line&114,&in&_demandimport&&&&&mod&=&_origimport(name,&globals,&locals)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/revdetails.py&,&line&12,&in&&&&&&from&tortoisehg.hgqt.fileview&import&HgFileView&&&File&&/usr/lib/python2.6/site-packages/mercurial/demandimport.py&,&line&114,&in&_demandimport&&&&&mod&=&_origimport(name,&globals,&locals)&&&File&&/usr/lib/python2.6/site-packages/tortoisehg/hgqt/fileview.py&,&line&23,&in&&&&&&qsci&=&Qsci.QsciScintilla&&&File&&/usr/lib/python2.6/site-packages/mercurial/demandimport.py&,&line&86,&in&__getattribute__&&&&&self._load()&&&File&&/usr/lib/python2.6/site-packages/mercurial/demandimport.py&,&line&58,&in&_load&&&&&mod&=&_origimport(head,&globals,&locals)&ImportError:&No&module&named&Qsci&&}}}&
有什么错误就Google下吧,总比之前运行了thg什么反应都没有,有问题无从下手的好。
接下来的问题待解决,所以希望童鞋们看完此文后再亲身测试,我这边没有写完,如果一边做一边看,到最后。。。问题还没有解决就来怪我了,^_^
=========================
11.20 16:45 已解决No module named Qsci问题,输入thg,成功打开。
解决思路源于此问题:/questions/6046432/pyqt4-cant-import-qsci
下面是解决方法:
进入http://www.riverbankcomputing.co.uk/software/qscintilla/download 下载 QScintilla2
安装方法参考http://www.riverbankcomputing.co.uk/static/Docs/QScintilla2/index.html
具体命令:
wget&http://sourceforge.net/projects/pyqt/files/QScintilla2/QScintilla-2.6.2/QScintilla-gpl-2.6.2.tar.gz&tar&zxvf&QScintilla-gpl-2.6.2.tar.gz&cd&QScintilla-gpl-2.6.2/&cd&Qt4Qt5/&#我这边是发现没有qmake命令,bash:&qmake:&command&not&found&#cp&/usr/lib/qt47/bin/qmake&/usr/bin/&#如果你也没有那就执行上面那命令&qmake&qscintilla.pro&make&&&&make&install&cd&../Python/&python&configure.py&&#绑定python&make&&&&make&install&
&之后执行thg就能成功运行了。
不过我在安装QScintilla-gpl-2.6.2.tar.gz前还使用命令:yum install qscintilla 安装过一遍,但是当时没有用。如果还有问题的童鞋也不妨yum install qscintilla尝试下。
问题解决了,^_^
本文地址 :
------分隔线----------------------------温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
踏破鸿蒙阴阳现,一手一运一太极……
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
The Windows shell extension context menus get their translations from the Windows registry. Translations for many locales were installed under&C:\Program Files\TortoiseHg\i18n\cmenu. Select the locale you would like to use, double-click on it, and confirm all requests.
2.2.2. On Linux and Mac
Debian DEB and RPM packages for Fedora are available on the&&page of the wiki.
Deb packages for Ubuntu can be found at&.
For MacOSX, no packages are available but you can run hgtk and all the dialogs via the source install method. For details, see.
2.2.2.1. Language settings
The TortoiseHg tools use Python’s&&library to localize their text. To get localized dialogs, it is recommended that you set the LANGUAGE environment variable to your locale of choice.
Posted by&&in&&|&
是一个轻量级的分布式版本控制系统,它以方便的控制、极强的扩展性赢得了众多开放源代码项目的青睐。本文从版本控制系统中的基本概念、操作和扩展性等方面,有侧重的介绍了 Mercurial。此外本文列出了几个其他常用的分布式版本控制系统,并和 Mercurial 作了简单的比较。通过阅读本文,读者可以了解基础的Mercurial操作,进而熟悉这个备受青睐的工具。
Mercurial 是一种轻量级分布式版本控制系统,采用 Python 语言实现,易于学习和使用,扩展性强。其是基于 GNU General Public License (GPL) 授权的开源项目。相对于传统的版本控制,具有如下优点:
版本控制系统中的 repository 就像一个仓库一样,用来存储被管理的数据文件,包含数据文件的不同版本。传统的版本控制系统中,这样的repository 是集中式的。除了这样一个集中式的 repository 之外,每个用户会有一份自己的工作版本拷贝。用户通过命令同步自己的拷贝和集中式的repository。
分布式版本控制系统中的 repository 则采用的是对等网络式的方式。传统集中式的管理中,只有一份 repository,其他的只是工作拷贝,不包含额外的版本。分布式的管理当中,每个用户所持有的都是一个真实的 repository,当中存储有不同的版本信息和维护一个 repository 的必要的辅助元数据。这样一个对等工作模式当中,用户通过交换下文即将提到的 changeset 来完成同步。
这样做的一些优点在于,工作的并行度将大大的提高。每个用户都可以带着这样的repository,从这里他可以把当前的工作拷贝切换到 repository 里面存储的任何一个版本。这个版本可以是之前正在工作的版本,现在需要合并进一些别人的意见,也可以是用户私有的一个版本,当前正在做很多前瞻性的工作,还没有能同步给其他用户使用。也同样是因为这样的模式,每个用户可以任意把自己的 repository 当中的一个版本交换给其他用户,而不需要对自己手头正在工作的版本进行回退。下图是这样一个灵活的工作模式的演示。
在使用&&的系统中每个改动隔离在各自的 repository 里,既避免把不相关的代码混杂起来, 又便于一个接一个的测试每一部分工作,用户做的每个改动称为一个 revision。一般会有一个所有用户都可以访问得到的 repository 保存了项目的”主要”版本,工作repository 是用户自己做事情的地方,实现新的特性,修改漏洞,重构,实验等,当完成改变后,你可以 push 到共用的 repositor y中,即完成了一个 revision。
一个或多个文件的改变集合在一起形成一个逻辑单元,称为 changeset。每一个 changeset由两部分内容描述,版本号和 changeset 标识,例如:
changeset:
冒号前面的数字代表版本号,它用来标识本地 changeset。这个版本号只有在用户的本地repository 中才有意义。冒号后面的那个很长的十六进制串是 changeset标识, 它是确定changeset的全局唯一标识符, 在所有包含这个 changese 的 repository 中都相同。多个用户之间讨论changeset,一般使用这个 changeset 标识,而不是上面说的版本号,因为完全有可能每个用户的 repository 中同样的 changeset 版本号不同。
Head 表示 repository 中每个分支最新的 revision,通常在合并几个分支时会用到这个概念。
Tip 是最新的一个 changeset 的版本号的一个别名。在命令中任何使用版本号的地方都可以使用 tip 来代替最新的 changeset的版本号。Tip在各个repository中是不同的,同时一个repository 中只有一个 tip。
Log 命令按时间顺序从近到远的记录着在 repository 中发生的每一次事件。可以通过指定-v诊断输出选项来获得更多更详细的历史信息,或者指定-debug选项来获得历史信息中的一切细节。
以下是一些实际使用 Mercurial 中常用的例子。Mercurial 的原意是元素周期表当中的汞元素,但是 Mercurial 这样的单词显然不太适合日常使用。事实上 Mercurial 的命令取了元素周期表当中汞元素的化学符号:hg,所有的 Mercurial 命令都以 hg 开始。
$ hg command [options]
其中 command 是 Mercurial 的命令。每个命令的具体的命令行选项可以使用:
$ hg help command
我们使用 clone 命令克隆一个 repository,它生成一个完整的 repository 复本,这样我们就有一个本地私有的 repository 来工作。
$ hg clone
/hg/project1
如果所有都没问题,clone 命令输出:
destination directory: project1
requesting all changes
adding changesets
adding manifests
adding file changes
added 127 changesets with 448 changes to 143 files
139 files updated, 0 files merged, 0 files removed, 0 files
unresolved
此时,我们应该在当前目录下发现一个目录叫 project1,目录下的文件是我们刚克隆的 repository 的精确复本。在 Mercurial 中,每一个 repository 是自包含的。当你克隆一个repository 后,新 repository 变成克隆时它的精确复本,但是后续的两个 repository 当中任一方改变都不会在对方显示,除非用户使用 pull 或 push 命令明确地传递改变,这个将在后面介绍。
另外,每个用户可以使用 init 命令将本地的一个目录初始化为一个 Mercurial 的 repository,只需要在那个目录下运行:
如果设置好了同步共享的发布方式,其他用户就可以来克隆该用户的 repository 了。
进入工作目录,使用我们喜欢的编辑软件修改,例如我们要修改 main.py 让它增加打印一行输出:
def main():
print "I'm in the a function."
print "Great joy of using Mercurial!"
#新加的一行
if __name__ == "__main__":
sys.exit(main())
完成之后退出编辑器,任务完成。有了刚才的修改我们就可以创建一个changeset。
在创建 changeset 之前如果想确认一下哪些文件被改动了,可以使用 status 命令。
$ hg status
使用 diff 命令可以检查实际文件内容的改变:
diff -r a58db6f0e482 main.py
--- a/main.py
Thu Nov 29 13:38:38
+++ b/main.py
Thu Nov 29 13:46:10
@@ -1,5 +1,6 @@ def main():
def main():
print "I'm in the a function."
print "Great joy of using Mercurial!" #新加的一行
if __name__ == "__main__":
sys.exit(main())
diff 命令的默认输出是通用的补丁格式,易于在各种系统之间交换和讨论。
创建一个 changeset 后我们就可以用 commit 命令提交了。
$ hg commit
这个命令把我们带到一个编辑器内,缺省的编辑器是 vi,同时给我们展示了几行如下的文字:
HG: user: Guolian Yun &yunguol@&
HG: changed main.py
第一行是空的,接下来的几行表明哪些文件将进入本 changeset。为了改变 changeset,我们必须描述它的原因,这通常称为 changeset注释。让我们输入一些:
I'm using Mercurial!
HG: user: Guolian Yun &yunguol@&
HG: changed main.py
接着,保存并退出编辑器,如果一切正常,commit 命令将没有任何提示地输出。
让我们看看status命令现在告诉我们什么?
$ hg status
什么也没有!我们的改动已经提交到changeset里了,那里没有修改的文件需要提交的。Repository 中内容和当前工作目录的内容一致了。
现在可以检查以下最新的改动是不是包含刚才所添加的 changeset 注释,使用 tip 命令就可以显示了:
changeset:
Guolian Yun &yunguol@&
Thu Nov 29 10:10:39
I'm using Mercurial!
目前新的 changeset 只存在本地 repository 中,如果想和其它 repository 分享改动,我们需要使用 push。
$ hg push project2
project2 为你想要 push 的目标 repository 的名字。
想要得到所有在别的 repository中而在本地repository中没有的改动,可以采用 pull命令。
$ hg pull project3
project3为我们想要得到更新的目标repository的名字。
在 Pull 后,缺省情况下Mercurial不更新工作目录。这意味着虽然repository现在有changeset,但在工作目录中的 main.py 文件仍然是 pull 之前老的内容。
如果只想从hg clone的 repository 中更新当前 revision 到最新版,可以直接采用:
$ hg pull -u
上文当中的 push 和 pull 的操作,是处于不同位置的 repository 之间的同步。之前给出的两个例子是本地目录 repository 之间的同步。Mercurial 还支持以下形式的 repository 之间的同步:
file://local/filesystem/path
http://[user@]host[:port]/[path]
https://[user@]host[:port]/[path]
ssh://[user@]host[:port]/[path]
其中 file 协议和本地目录相同。在 http 和 https 协议上使用push命令,需要在远端的服务器上启用相关的属性。ssh协议是众多系统中支持的shell。
标准的 Mercurial 发行包中还附带一个 Python CGI 脚本 hgweb.cgi, 可以用来参考搭建一个多用户可以集中式的同步改动的界面,如下图所示:
Mercurial 系统中提供一种扩展机制来添加新的命令。通过扩展添加的命令可以在现有的Mercurial 系统的基础上添加新的功能,这些命令跟随hg&后被调用时就像原生的命令一样。本文介绍两个常用的Mercurial扩展:Patchbomb和Mq。
Patchbomb是一个在Mercurial系统中利用发送邮件的方式来交换changeset的扩展。Patchbomb添加了一个新的email命令。通过调用&hg email&命令,changeset 提交时的信息的第一行将作为邮件的主题,信件的正文包括完整的 changese t提交信息,以 patch 的形式发布出来的 changeset 完整补丁。如果一次发送的是多个changeset,那么Patchbomb会提示输入本次 changeset 集的总提示信息,这部分信息将作为第一封信,信件主题以[PATCH 0 of N]开头,changeset 则会以[PATCH i of N]将的主题开头发出,其中i是 changeset在本地 repository 当中的顺序。多changeset 系列邮件中,每封信会在邮件头中包含合适的回复信息,这样在邮件客户端可以清晰的显示出系列 changeset 之间的层次关系。
Patchbomb 支持使用本地系统中的 sendmail 程序来发送邮件,同时支持使用 SMTP 邮件服务器。用户如果长期固定为某个项目工作,还可以将邮件的收件地址和发信地址提供给Patchbomb,免去每次手动输入的麻烦。这一切都可以在 Mercurial 统一的&.hgrc&当中设置,以下是一个完整的例子。
[extensions]
hgext.patchbomb =
method = smtp # 还可以在这里指定/usr/sbin/sendmail
from = Zhengang Li &lizg@&
Patchbomb 作者为Bryan O’Sullivan,该扩展现在随同 Mercurial 系统一起发布,用户不需额外下载安装,只需如上例中一样启用即可。
Mq 扩展的全名是Mercurial Queues,顾名思义该扩展将用户本地的多个 changeset 排列到队列中。原先分布式版本控制系统中,changeset 一旦提交并不能修改。有了 Mq 扩展之后,用户可以将本地的任意数量的 changeset 存放至一个本地的队列当中,对这些 changeset 用户除了可以使用传统的 changeset 上的任何命令之外,还可以修改changeset,包括提交信息和版本补丁的改动。
启用 Mq 扩展的办法同其他扩展一样,在&.hgrc&当中添加如下信息:
[extensions]
Mq的命令是一系列以字母q打头的命令,qinit,&qnew,&qrefresh,&qdiff,&qpop和qpush等。Qinit&用来初始化用来存放补丁队列的目录,qnew创建一个新的补丁changeset,qrefresh&将改动刷新到当前的补丁当中去,qdiff&将当前的补丁打印到屏幕,qpop&和&qpush&用来移动当前存放在队列顶部的补丁。完整的 q 系列命令可以从&hg help给出的列表中获得。
Mq中所有的 changeset 补丁存放在项目顶层目录的.hg/patches下面,用户可以手动修改这些补丁当中的提交信息。Changeset 补丁的顺序存放在.hg/patches/series文件当中,同样的,用户可以修改这些补丁的顺序。
Mq的作者是Chris Mason,该扩展现在随同 Mercurial 系统一起发布,用户不需额外下载安装。
如果现有的扩展不能满足用户的要求,编写自己的扩展也不困难。Mercurial 使用 Python编写,编写一个新的扩展相当于在 Mercurial 系统的 hgext 包当中编写一个新的模块。具体的扩展实现还有些约定的规则,用户可以参考 Mercurial 所提供的文档。
分布式版本控制系统领域还有一些其他的系统,如GNU arch,monotone,Bazaar,git,darcs。
各类系统在各在一定的领域内长处,如GNU arch在GNU Savannah主机上应用,Bazaar 主要用于 Ubuntu Linux 系统的开发当中,git 源于Linux kernel 的开发,现在在多处和内核相关的项目中使用。他们大多数提供友好的Web界面和多种版本同步协议的支持。Git 和Gnu arch 由 C 和 shell 脚本语言编写实现,monotone 由C++语言实现,darcs 由 Haskell语言实现,Bazaar 和本文介绍的 Mercurial 由 Python 语言实现。从开放和扩展性方面来说,类似 Python 这样的脚本语言的更易于用户编写自己的扩展。
在众多的分布式版本控制系统中,Mercurial 是最年轻的,它的第一个版本发布于2005年4月。Mercurial 吸收了众多前辈的特性,被众多的项目采用。
阅读(2596)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_095075',
blogTitle:'TortoiseHg 设置语言及 Mercurial 教程',
blogAbstract:'
blogTag:'源代码管理',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:9,
publishTime:8,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'踏破鸿蒙阴阳现,一手一运一太极……',
hmcon:'1',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}

我要回帖

更多关于 tortoisehg 创建分支 的文章

 

随机推荐