IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]突击Mercurial SCM(HG)

    lincyang发表于 2014-10-27 21:29:12
    love 0

    这个叫水银的源码管理工具虽然默默无闻,但还是得到了很多团队的使用。为了迎合某些团队的需要,我们也要用它来管理我们的代码。

    今天的任务是先突击学习,磨刀不误砍柴工。对工具的掌握越快,工作的效率就会越高。

    1.安装

    首先从官网下载最新的版本,我这次做个实验,下载了3.2-rc。

    解压到你指定的目录下:

    [linc@localhost mercurial]$ ls
    mercurial-3.2-rc.tar.gz
    [linc@localhost mercurial]$ tar xzvf mercurial-3.2-rc.tar.gz 

    安装之前要检查一下是否已经安装了python-dev,这在fedora下叫作python-devel, 如果没有,编译时会出现错误:

    mercurial/base85.c:13:20: fatal error: Python.h: No such file or directory
    只要看看/usr/include/python2.7/下有没有上述的头文件就知晓了。
    安装也好办,ubuntu下使用:

    sudo apt-get install python-dev
    fedora下使用:
    [linc@localhost etc]$ sudo yum install python-devel
    来到mercurial-3.2-rc路径下,执行:
    [linc@localhost mercurial-3.2-rc]$ make install-home
    python setup.py  build 
    running build
    running build_mo
    running build_ext
    building 'mercurial.base85' extension
    ...
    make[1]: *** [hg.1] Error 255
    make[1]: Leaving directory `/home/linc/dev/mercurial/mercurial-3.2-rc/doc'
    make: *** [doc] Error 2
    
    最后的错误是关于文档的,这里被我无视了,尝试执行hg,得到了反馈,说明基本功能是安装完成了。

    [linc@localhost mercurial-3.2-rc]$ hg
    Mercurial Distributed SCM
    
    basic commands:
    
     add           add the specified files on the next commit
     annotate      show changeset information by line for each file
     clone         make a copy of an existing repository
     commit        commit the specified files or all outstanding changes
     diff          diff repository (or selected files)
     export        dump the header and diffs for one or more changesets
     forget        forget the specified files on the next commit
     init          create a new repository in the given directory
     log           show revision history of entire repository or files
     merge         merge working directory with another revision
     pull          pull changes from the specified source
     push          push changes to the specified destination
     remove        remove the specified files on the next commit
     serve         start stand-alone webserver
     status        show changed files in the working directory
     summary       summarize working directory state
     update        update working directory (or switch revisions)
    
    (use "hg help" for the full list of commands or "hg -v" for details)
    
    2.简单的使用

    下面就要试着创建一个项目并提交代码。

    创建init目录:

    [linc@localhost testHG]$ hg init testMercurial
    [linc@localhost testHG]$ ls
    testMercurial
    [linc@localhost testHG]$ cd testMercurial/
    
    添加我的小项目,将其他目录下的源码拷到这里:
    [linc@localhost testMercurial]$ cp -r ../../hello/* .
    [linc@localhost testMercurial]$ ls
    Debug  Release  src
    
    查看当前状态:
    [linc@localhost testMercurial]$ hg status
    ? Debug/makefile
    ? Debug/objects.mk
    ? Debug/sources.mk
    ? Debug/src/subdir.mk
    ? Release/makefile
    ? Release/objects.mk
    ? Release/sources.mk
    ? Release/src/subdir.mk
    ? src/hello.c
    
    问号表示还没有纳入版本管理,下面就给它们添加进来:
    [linc@localhost testMercurial]$ hg add
    adding Debug/makefile
    adding Debug/objects.mk
    adding Debug/sources.mk
    adding Debug/src/subdir.mk
    adding Release/makefile
    adding Release/objects.mk
    adding Release/sources.mk
    adding Release/src/subdir.mk
    adding src/hello.c
    [linc@localhost testMercurial]$ hg status
    A Debug/makefile
    A Debug/objects.mk
    A Debug/sources.mk
    A Debug/src/subdir.mk
    A Release/makefile
    A Release/objects.mk
    A Release/sources.mk
    A Release/src/subdir.mk
    A src/hello.c
    
    A就是add的标识了。下面我们提交这些代码吧。

    [linc@localhost testMercurial]$ hg commit -m 'initial commit'
    abort: no username supplied
    (use "hg config --edit" to set your username)
    [linc@localhost testMercurial]$ hg config --edit
    
    可惜由于我没有编辑好我的名称在配置文件中,先去添加一下,然后继续提交代码:

    [linc@localhost testMercurial]$ hg commit -m 'initial commit'
    [linc@localhost testMercurial]$ hg status
    [linc@localhost testMercurial]$ hg log
    changeset:   0:23ac3f5bfc59
    tag:         tip
    user:        Lincoln <linc@xxx.com>
    date:        Mon Oct 27 21:05:10 2014 +0800
    summary:     initial commit
    
    上面的changeset就是git中的commit id,冒号前面的0就是你的changeset id,越靠前表示它的资历越老。
    tag中的tip,一般出现在最新的changeset中,这个小技巧你要记住了哦。
    最后我们要将提交推到远程库中才算大功告成。与git类似,也是用push命令:
    hg push /the remote repository
    我想要看看这一版都修改了那些地方怎么查?记得git中用show命令,hg呢?export就好了:
    [linc@localhost testMercurial]$ hg export 0:23ac3f5bfc59
    # HG changeset patch
    # User Lincoln <linc@xxx.com>
    # Date 1414415110 -28800
    #      Mon Oct 27 21:05:10 2014 +0800
    # Node ID 23ac3f5bfc592c7bd2b293e8ace0f42b9e541ece
    # Parent  0000000000000000000000000000000000000000
    initial commit
    
    diff -r 000000000000 -r 23ac3f5bfc59 Debug/makefile
    --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
    +++ b/Debug/makefile	Mon Oct 27 21:05:10 2014 +0800
    @@ -0,0 +1,44 @@
    

    这基本的功能就是这样了,后面还会继续merge、conflict等功能。


    后记:

    2015.1.29

    ubuntu上安装:

    上述报错是因为doc安装需要python-docutils工具,我们需要安装它:

    /opt/mercurial-3.3-rc$ sudo apt-get install python-docutils
    这次再编译就没有问题了:

    /opt/mercurial-3.3-rc$ sudo make install

    参考:

    http://mercurial.selenic.com/guide



沪ICP备19023445号-2号
友情链接