13

ディレクトリまたはファイルへの NIX ソフトリンクまたはハードリンクに相当する Mercurial はありますか。

基本的に、ファイル(またはディレクトリ)は「他の場所」のファイルにリンクされ、その場所のバージョンに従います(通常のブランチとは異なり、マージする必要があると思います)

4

2 に答える 2

12

リポジトリの内部にある 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
于 2013-02-16T18:36:55.503 に答える
10

*nix でのパス監査

*nix システムでは、hgMercurialは参照パスのセキュリティについてシンボリック リンク(「symlink」)を監査します。たとえば、絶対パスと空のパスは安全でないと見なされるため、リポジトリに追加されません。

Mercurial 開発者はこの機能を文書化していません。ただし、ソース コードにはややあいまいな説明のコメントが含まれています。

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 では、さまざまな理由からシンボリック リンクはサポートされていません。以下を参照してください。

于 2014-01-29T16:20:16.137 に答える