2013-02-16 11 views
8

C'è qualche equivalente in Mercurial per NIX soft- o hard-link a directory o file.Soft link in Mercurial

sostanza che un file (o directory) è legata ad un file "altrove" e segue la versione di quella posizione (A differenza di un ramo normale credo, dove si dovrebbe fondersi)

risposta

7

versioni Mercurial morbido i collegamenti interni al repository sono semplicemente fantastici. Li rileverà, li registrerà e li creerà per te. C'è un caso d'uso specifico che stai cercando? La cosa più vicina a un collegamento che raggiunge il repository è un subrepo, che è un puntatore a una versione specifica di un altro repository.

link simbolici funzionano

(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 

Ma hardlinks non lo fanno

$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

Vuoi dire lo farà gestire i collegamenti software NIX nei file che esegue il controllo delle versioni? – Olav

+0

esattamente quello. Vedi l'aggiornamento sopra. –

+0

Grazie per l'aggiornamento @ chris-wesseling Hanno chiesto informazioni sui collegamenti soft/sym, ma anche avere le informazioni sul link fisso di ht è buono. –

6

Sui sistemi * nix, hg Mercurial audit collegamenti simbolici ("link simbolici") per la sicurezza di cui percorso. Ad esempio, percorsi assoluti e vuoti sono considerati non sicuri e pertanto non verranno aggiunti al repository.

Gli sviluppatori mercurial non hanno documentato questa funzione. Tuttavia, the source code contains a comment con una spiegazione un po 'vaga:

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

In Windows, i collegamenti simbolici non sono supportati per vari motivi, vedi:

+0

I collegamenti simbolici ai percorsi assoluti possono essere aggiunti a un repository mercuriale. Non so cosa significhi "percorsi vuoti" in questo contesto. – Juan