猛禽的编程艺术

编程是一门艺术

用户操作
[即时聊天] [发私信] [加为好友]
猛禽ID:Raptor
441486次访问,排名118,好友19人,关注者140人。
编程序——通常有BUG
写BLOG——都是些八卦
拍MM——没人给偶拍
Raptor的文章
原创 138 篇
翻译 0 篇
转载 0 篇
评论 883 篇
猛禽的公告
本站作者:猛禽
号:老鸟,别号:大叔,英文名:Raptor。

Creative Commons License
本作品采用知识共享署名-非商业性使用-相同方式共享 2.5 中国大陆许可协议进行许可。
联系方式:

我常用的Extensions

微笑图书室 多背一公斤

最近评论
bhdgx:这样一说,我有种感觉:网格是社会主义社会,云计算是资本主义社会。
TopCat:说的不错。p2p网格确实是难度非常大,需要解决的问题非常多,而且目前而言,商业模式的确不明朗。
但我还是对它存有希望的。因为我觉得它是真正公平而且可以充分利用资源并且整体永不当机的一种模型。至于技术我的blog已经谈了一点。这里我想谈谈它的商业模式。
我们可以看一下PC。PC架构开放之后,表面上看,已经没有人能够完全主导PC的发展,也无法通过垄断PC架构或者服务来赚钱。但……
lizhe1985:您的文章已经被推荐到CSDN首页专家专栏栏目,将被更多的CSDN网友阅读与分享。感谢您对CSDN博客的支持。
Raptor:@LS
有机会去石家庄你请我吃饭,哈哈。
CDSoftwareWj:在市区和朋友吃了一顿羊蝎子,三个人吃了一大堆也没多少钱,首都的物价真便宜啊——要是在上海,翻一倍都不止

Orz 那你到石家庄就到天堂了
文章分类
收藏
    相册
    附图
    0. 个人链接
    1. 猛禽的河蟹BLOG(RSS)
    2. 寻找世界的美丽(RSS)
    3. Mental Studio-个人主页(RSS)
    5. 猛禽专栏-CSDN上的个人专栏
    6. 猛禽文档-CSDN个人技术文档
    7. CSDN电子报
    1. CSDN BLOG
    1. 令狐虫
    2. 韩磊(RSS)
    3. lxpbuaa(桂枝香在故国晚秋)
    4. 一竿残照.金棣@CODELPHI
    5. deadcat's blog
    6. gigix(透明思考)
    7. ozzzzzz
    8. 蝈蝈
    2. 技术BLOG
    chechy
    CoolSlob
    FrameSniper(FS)
    hkbarton
    leeon
    SnowFlacon
    小伍
    小小
    小眼镜
    我的ACE,TAO
    摩托
    百合MM
    3. 洋人BLOG
    Allen Bauer
    Anders Ohlsson
    Danny Thorpe
    Don Box
    Herb.Sutter
    James Gosling
    Martin Fowler
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 分布式版本控制(三)收藏

    新一篇: 分布式版本控制(完) | 旧一篇: 分布式版本控制(二)

    本篇介绍Mercurial。

    因为这是我现在用得最多的SCM——最近一个月来几个程序都在用它——所以会说得详细一些。

    我是从云风的BLOG里看到关于Mercurial的介绍,他在文章中介绍了常用的几种DRCS,他个人推荐的是Darcs,但我却看中了Mercurial。

    Mercurial 的优点在于功能强大并且速度超快(相对Bazaar而言,与SVN相比似乎也快一些),看源码Mercurial也是用Python写的,只不过发布版像 是用PY2EXE等工具编译成的EXE,不知道为什么速度会这么快。缺点是操作远程Repository的功能需要一些服务端的安装配置工作,这点不如 Bazaar方便。

    关于Mercurial的使用推荐参考这里的两页文档,很实用。Mercurial的操作命令虽然跟Bazaar差不多,但是设计思路比Bazaar更加“分布”一些,与传统SCM差别较大,可能需要一段时间适应。

    安装很简单,在这里下载最新版本的安装程序安装一下就好了。

    不过要在Windows下通过SSH使用远程Repository的话,需要一些额外的安装配置工作。如果你使用的不是Windows或者在Windows上已经安装了带有ssh命令的Cygwin,可以跳过下面这一部分,直接到后面的“Mercurial的使用”部分。

    首先在这里下载一个PuTTY的工具程序:plink.exe。

    然后在Mercurial的安装目录下找到mercurial.ini文件,用编辑器打开,找到[ui]段增加如下两行:

    ssh = D:\tools\plink.exe -ssh -pw password
    username = username<username@sitename.com>

    username项很好理解,就相当于Bazaar里的whoami命令——我不知道为什么Mercurial没有这个命令,而是默认使用loginname@hostname的形式来标记当前用户,大概它觉得这只是标志,没有什么关系,反正它拥有超强的分支/合并功能。

    ssh 项就是与SSH有关的配置项目了。按照参考文档中所说的,Mercurial通过ssh操作远程Repository时可以交互提示输入登录密码,但是我 在Windows下试验失败,可能是plink的问题。所以在第一次从远程Repository上clone到本地repository时需要在这里用- pw选项输入登录密码(不过用完就可以去掉这一项了——因为不同的项目可能使用不同的远程Repository,所以就可能使用不同的用户和密码,那个时 候可以配置到项目的.hgrc里,详见后面的说明)。

    Mercurial的使用:

    完成必要的安装配置工作以后就可以开始使用了。

    Mercurial的命令是hg——就是汞。不过说实话,我看到Mercurial这个词想到的是水星。

    开始一个项目有两种情况:一是还没有任何Repository的全新项目;二是加入一个已经有的项目——通常已经创建了一个公共的远程Repository。

    第一种情况的流程大致是这样:

    1、创建本地Repository。在项目的工作目录下运行:

    hg init

    将会创建一个.hg的目录。

    2、配置项目目录(可选)。主要内容有两项,一个是配置.hgignore,把不需要加入管理的文件排除掉;另一个是配置.hgrc,主要是配置ssh(此项仅针对在Windows下用plink进行SSH连接的情况):

    .hgignore文件放在项目的根目录上,其内容举例如下:

    syntax: glob

    *.py[co]
    *.swp
    *~

    使用方法一看就明了,就不解释了。

    .hgrc文件放在.hg目录中,其内容举例如下:

    [paths]
    default = ssh://username@remotehost//home/username/projname
    default-push = ssh://username@remotehost//home/username/projname
    [ui]
    ssh = D:\tools\plink.exe -ssh -pw password

    其中paths段里的default/default-push分别是对远程下载上传的默认url,这样在作pull/push操作时可以不必每次输入这个URL。如果SSH不是配置在标准的22端口上,可以在remotehost后面加上(:port)指定端口号。

    ui段里的配置与Mercurial.ini是一样的格式和含义。在Windows下使用plink连接SSH需要在这里用-pw选项配置登录密码,以使pull/push操作能够正常工作。

    3、检查项目状态。命令为:

    hg status

    将会列出所有未commit的有效项目文件及其状态——如果在commit以后项目文件未任何修改,此操作将无反馈信息。

    比如在刚初始化完以后进行检查,将会列出所有项目文件(被.hgignore排除的文件将不显示),并在前面有一个?标志,表示这些文件尚未被版本管理。

    在作完第一次add操作以后检查,则?标志将变为A标志,表示是新增的文件。

    如果在commit以后有文件被修改过,则状态检查会列出这些被修改过的文件,并加上M标志。

    如果在commit以后有文件被删除或改名,则状态检查会把这些文件加上!标志——改名后的新文件则会作为未管理的新文件而加上?标志。

    需要从本地Repository里删除!标志文件则需要使用remove命令,详见后面的说明。

    4、将项目文件加入本地Repository。命令很简单:

    hg add

    即可将项目目录中除了在.hgignore中被排除的文件以外的所有文件都加入到本地Repository中(当然不包括.hg目录,但是会包括.hgignore文件本身)。

    5、将变更提交到本地Repository。命令为:

    hg commit -m "关于本次提交的说明文本"

    6、提交到远程Repository。这里只介绍通过SSH提交的方法,通过HTTP的方法请自行参考相关文档。

    首先需要在服务端安装Mercurial,如果是用Linux服务器的话,参考各发行版说明,ubuntu下的安装是很简单的,直接用:

    sudo apt-get install mercurial

    即可。

    然后在服务端的项目目录下创建一个空的Repository(bazaar不需要这样的步骤,它可以用SFTP直接在空目录里远程创建):

    cd /home/username/projname
    hg init

    最后就可以在客户端推送Repository了,在项目目录下运行:

    hg push ssh://username@remotehostname//home/username/projname

    如果配置了.hgrc里的paths段的default-push,则可以直接用:

    hg push

    如果提交失败,请检查.hgrc和/或mercurial.ini里是否正确地配置了plink的pw选项,或者是SSH的端口号是否正确。如果配置无误仍然失败,可以用debug选项看一下详细出错信息:

    hg push --debug

    再来看第二种情况,即已经存在远程公共Repository的情况。

    1、首先创建本地的副本:

    hg clone ssh://username@remotehostname//home/username/projname

    注意,在Windows+plink的情况下,必须先在mercurial.ini里配置plink的pw选项,否则不能正常工作——此时还没有.hgrc可以配置,所以只能用mercurial.ini这个全局配置。

    正常执行以后将在当前目录下创建一个projname的子目录,其中包含了本地Repository(.hg目录)和工作目录的全部内容。

    2、通常还是需要配置一下.hgrc(可选),不过.hgignore会一起被clone下来,一般不必再配置。

    3、status/add/commit/push等命令与第一种情况相同。

    现在再来看两种情况都需要的一些别的操作:

    1、删除文件:

    hg remove path/filename

    删除后的文件在status命令结果里将被标志为R。需要用通配符删除多个文件时,可以使用-I选项:

    hg remove -I path/wildcard .

    2、从远程Repository取得别人加入的更新:

    hg pull ssh://username@remotehostname//home/username/projname

    同样,如果配置了.hgrc,就可以不用输入URL,直接用:

    hg pull

    取得更新。不过此操作只是更新本地Repository,你还需要用:

    hg update

    来更新工作目录下的文件。

    如果发生变更冲突,此操作会自动进行merge,对于不能自动merge的部分,会弹出默认编辑器(可以在mercurial.ini里配置)要求手工处理。处理完成后会在本地Repository实现自动合并。

    3、关于push的补充:

    当向一个远程repository作push操作时,如果之前有别人的push内容,本次push将自动产生一个分支,你需要作一次pull操作把所有分支下载到本地repository进行merge。

    4、除了status检查工作目录状态以外,还有几个命令用于检查本地Repository状态:

    hg head
    hg heads
    hg log

    其中head命令显示当前本地Repository中工作分支的最新版本的提交信息。heads命令显示当前本地Repository中所有未合并分支的最新版本的提交信息。log命令则是显示提交的历史记录。

    Mercurial 还有一套很强的变更打包解包功能,即一个开发者可以把自己本地Repository中的变更记录打包发给别人,别的开发者得到这个变更包以后,可以解包到 自己的Repository里,这样就可以连公共的远程Repository也不需要。这样的“分布式”真是太彻底了。

    更多关于Mercurial的信息请参考这里

    (未完待续)

     

    发表于 @ 2008年03月07日 09:29:00|评论(loading...)|编辑

    新一篇: 分布式版本控制(完) | 旧一篇: 分布式版本控制(二)

    评论

    #magician0o0 发表于2008-04-24 14:44:06  IP: 203.86.45.*
    你好,能抽空教教我关于使用hg合并的具体操作吗?我使用的版本是v1,按照网站上的那个helloworld的例子运行得到的结果不同,谢谢
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © 猛禽