【问题标题】:Soft link in MercurialMercurial 中的软链接
【发布时间】:2013-02-01 06:11:39
【问题描述】:

在 Mercurial 中是否存在与 NIX 目录或文件的软链接或硬链接等价的东西。

基本上,文件(或目录)链接到“其他地方”的文件并遵循该位置的版本(与我认为必须合并的常规分支不同)

【问题讨论】:

    标签: mercurial symlink hardlink


    【解决方案1】:

    存储库内部的 Mercurial 版本软链接非常棒。它会检测它们、记录它们并为您创建它们。是否有您正在寻找的特定用例?最接近存储库外部的链接的是子存储库,它是指向另一个存储库的特定版本的指针。

    符号链接有效

    (df)Ry4ans-MacBook-Air:~ ry4an$ hg init olav
    (df)Ry4ans-MacBook-Air:~ ry4an$ cd olav/
    (df)Ry4ans-MacBook-Air:olav ry4an$ echo this > target
    (df)Ry4ans-MacBook-Air:olav ry4an$ ln -s target link
    (df)Ry4ans-MacBook-Air:olav ry4an$ ls -l
    total 16
    lrwxr-xr-x  1 ry4an  staff     6B Feb 16 19:25 link@ -> target
    -rw-r--r--  1 ry4an  staff     5B Feb 16 19:25 target
    (df)Ry4ans-MacBook-Air:olav ry4an$ hg commit -A -m "link and its target"
    adding link
    adding target
    (df)Ry4ans-MacBook-Air:olav ry4an$ hg log -p
    changeset:   0:42a41a431661
    tag:         tip
    user:        Ry4an Brase <ry4an-hg@ry4an.org>
    date:        Sat Feb 16 19:26:17 2013 -0500
    summary:     link and its target
    
    diff -r 000000000000 -r 42a41a431661 link
    --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
    +++ b/link  Sat Feb 16 19:26:17 2013 -0500
    @@ -0,0 +1,1 @@
    +target
    \ No newline at end of file
    diff -r 000000000000 -r 42a41a431661 target
    --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
    +++ b/target    Sat Feb 16 19:26:17 2013 -0500
    @@ -0,0 +1,1 @@
    +this
    
    (df)Ry4ans-MacBook-Air:olav ry4an$ hg update null
    0 files updated, 0 files merged, 2 files removed, 0 files unresolved
    (df)Ry4ans-MacBook-Air:olav ry4an$ ls -l
    (df)Ry4ans-MacBook-Air:olav ry4an$ hg update tip
    2 files updated, 0 files merged, 0 files removed, 0 files unresolved
    (df)Ry4ans-MacBook-Air:olav ry4an$ ls -l
    total 16
    lrwxr-xr-x  1 ry4an  staff     6B Feb 16 19:26 link@ -> target
    -rw-r--r--  1 ry4an  staff     5B Feb 16 19:26 target
    

    但硬链接没有

    $hg commit -Am "hardlinks target"
    adding link
    adding target
    $hg log -p
    changeset:   0:ec9407634133
    tag:         tip
    user:        Chris Wesseling <chris.wesseling@cwi.nl>
    date:        Wed Mar 13 23:14:44 2013 +0100
    summary:     hardlinks target
    
    diff -r 000000000000 -r ec9407634133 link
    --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
    +++ b/link      Wed Mar 13 23:14:44 2013 +0100
    @@ -0,0 +1,1 @@
    +foo
    diff -r 000000000000 -r ec9407634133 target
    --- /dev/null   Thu Jan 01 00:00:00 1970 +0000
    +++ b/target    Wed Mar 13 23:14:44 2013 +0100
    @@ -0,0 +1,1 @@
    +foo
    
    $ls -lin
    total 8
    276702 -rw-r--r-- 2 1204653 5900 4 13 mrt 23:14 link
    276702 -rw-r--r-- 2 1204653 5900 4 13 mrt 23:14 target
    $hg update null
    0 files updated, 0 files merged, 2 files removed, 0 files unresolved
    $hg update tip
    2 files updated, 0 files merged, 0 files removed, 0 files unresolved
    $ls -lin
    total 8
    276719 -rw-r--r-- 1 1204653 5900 4 13 mrt 23:15 link
    276721 -rw-r--r-- 1 1204653 5900 4 13 mrt 23:15 target
    

    【讨论】:

    • 你的意思是它会处理它正在版本控制的文件中的 NIX 软链接?
    • 感谢@chris-wesseling 的更新他们询问了软/符号链接,但拥有 ht 硬链接信息也很好。
    【解决方案2】:

    *nix 上的路径审计

    在 *nix 系统上,hg Mercurial 审核符号链接 ("symlinks") 以确保引用路径的安全性。 例如,绝对路径和空路径被认为是不安全的,因此不会添加到存储库中。

    Mercurial 开发人员尚未记录此功能。但是,the source code contains a comment 的解释有点模糊:

    class pathauditor(object):
        '''ensure that a filesystem path contains no banned components.
        the following properties of a path are checked:
    
        - ends with a directory separator
        - under top-level .hg
        - starts at the root of a windows drive
        - contains ".."
        - traverses a symlink (e.g. a/symlink_here/b)
        - inside a nested repository (a callback can be used to approve
          some nested repositories, e.g., subrepositories)
        '''
    

    在 Windows 上,由于各种原因不支持符号链接,请参阅:

    【讨论】:

    • 可以将指向绝对路径的符号链接添加到 mercurial 存储库中。我不知道在这种情况下“空路径”是什么意思。
    猜你喜欢
    • 1970-01-01
    • 2012-12-23
    • 2011-05-24
    • 1970-01-01
    • 2012-02-01
    • 2010-12-29
    • 1970-01-01
    • 2011-04-20
    相关资源
    最近更新 更多