2013-02-16 18 views
8

Czy istnieje jakiś odpowiednik w Mercurial do NIX miękkich lub twardych dowiązań do katalogów lub plików.Miękkie ogniwo w Mercurial

Zasadniczo, że plik (lub katalog) jest połączony z pliku „gdzieś indziej” i podąża za wersję tej lokalizacji (w przeciwieństwie do regularnego oddziału myślę, gdzie trzeba by scalić)

Odpowiedz

7

wersje Mercurial miękkiego linki wewnętrzne do repozytorium są po prostu świetne. Wykryje je, nagrywa i tworzy je dla ciebie. Czy istnieje konkretny przypadek użycia, którego szukasz? Najbliższym elementem łącza, które sięga poza repozytorium, jest subrepo, które jest wskaźnikiem do konkretnej wersji innego repozytorium.

Symlinks pracować

(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 

Ale hardlinki NIE

$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

To znaczy, że będzie obsługiwać miękkie linki NIX w plikach, których wersjonuje? – Olav

+0

właśnie to. Zobacz aktualizację powyżej. –

+0

Dzięki za aktualizację @ chris-wesseling Pytali o linki soft/sym, ale informacja o twardym łączu też jest dobra. –

6

W systemach * nix, hg Mercurial audyty dowiązania symboliczne ("Symlinks") za określoną bezpieczeństwa ścieżki. Na przykład ścieżki bezwzględne i puste są uważane za niebezpieczne i dlatego nie zostaną dodane do repozytorium.

Programiści Mercurial nie udokumentowali tej funkcji. Jednak the source code contains a comment z nieco niejasne wyjaśnienia:

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

na Windows, dowiązania symboliczne nie są obsługiwane z różnych powodów, patrz:

+0

Dowiązania symboliczne do ścieżek bezwzględnych można dodać do repozytorium rtęci. Nie wiem, co oznaczają "puste ścieżki" w tym kontekście. – Juan

Powiązane problemy