2013-02-16 28 views
8

Có một số tương đương trong liên kết mềm hoặc cứng của Mercurial đến NIX với các thư mục hoặc tệp hay không.Liên kết mềm trong Mercurial

Về cơ bản mà một tập tin (hoặc thư mục) được liên kết với một tập tin "ở một nơi khác" và sau phiên bản của vị trí đó (Không giống như một chi nhánh thường xuyên Tôi nghĩ rằng, nơi người ta sẽ phải sáp nhập)

Trả lời

7

phiên bản Mercurial mềm các liên kết bên trong kho lưu trữ chỉ tuyệt vời. Nó sẽ phát hiện chúng, ghi lại chúng và tạo chúng cho bạn. Có trường hợp sử dụng cụ thể nào bạn đang tìm kiếm không? Điều gần nhất với một liên kết đến bên ngoài kho lưu trữ là một subrepo, là con trỏ tới một phiên bản cụ thể của một repo khác.

symlink làm việc

(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 [email protected] -> 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 <[email protected]> 
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 [email protected] -> target 
-rw-r--r-- 1 ry4an staff  5B Feb 16 19:26 target 

Nhưng hardlinks không

$hg commit -Am "hardlinks target" 
adding link 
adding target 
$hg log -p 
changeset: 0:ec9407634133 
tag:   tip 
user:  Chris Wesseling <[email protected]> 
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

Bạn có nghĩa là nó sẽ xử lý các liên kết mềm NIX trong các tệp mà nó đang tạo phiên bản? – Olav

+0

chính xác điều đó. Xem bản cập nhật ở trên. –

+0

Cảm ơn bạn đã cập nhật @ chris-wesseling Họ hỏi về các liên kết mềm/sym, nhưng có thông tin ht hardlink cũng tốt. –

6

Trên hệ thống * nix, hg Mercurial kiểm toán liên kết tượng trưng ("symlink") đối với an ninh con đường gọi. Ví dụ: đường dẫn tuyệt đối và trống được coi là không an toàn và do đó sẽ không được thêm vào kho lưu trữ.

Nhà phát triển Mercurial chưa ghi lại tính năng này. Tuy nhiên, the source code contains a comment với một lời giải thích hơi mơ hồ:

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

Trên Windows, liên kết tượng trưng không được hỗ trợ vì nhiều lý do, xem:

+0

Liên kết tượng trưng đến đường dẫn tuyệt đối có thể được thêm vào repo mercurial. Tôi không biết những gì "con đường trống rỗng" có nghĩa là trong bối cảnh này. – Juan

Các vấn đề liên quan