Soft link in Mercurial

前端 未结 2 1161
难免孤独
难免孤独 2020-12-10 12:51

Is there some equivalent in Mercurial to NIX soft- or hard- links to directories or files.

Basically that a file (or directory) is linked to a file \"somewhere else\

相关标签:
2条回答
  • 2020-12-10 13:37

    Path auditing on *nix

    On *nix systems, hg Mercurial audits symbolic links ("symlinks") for referred path security. For example, absolute and empty paths are considered unsafe and will therefore not be added to the repository.

    Mercurial developers have not documented this feature. However, the source code contains a comment with a somewhat vague explanation:

    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)
        '''
    

    On Windows, symbolic links are not supported for various reasons, see:

    • https://www.mercurial-scm.org/bts/issue1825
    • https://www.mercurial-scm.org/bts/issue2579
    0 讨论(0)
  • 2020-12-10 13:53

    Mercurial versions soft links that are internal to the repository just great. It'll detect them, record them, and create them for you. Is there a specific use case you're looking for? The closest thing to an link that reaches outside the repository is a subrepo, which is a pointer to a specific version of another repo.

    Symlinks work

    (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
    

    But hardlinks don't

    $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
    
    0 讨论(0)
提交回复
热议问题