2014-07-20 17 views
10

ho una directory linux (e non ho bisogno di alcun finestre checkout):Seguire i collegamenti simbolici in SVN

/home/me/projects/project1 

In questo progetto, ho bisogno di SVN (1.8.8) per seguire un link simbolico "link1":

/home/me/projects/project1/link1/<some_directories_and_files> 

ma SVN non mi permette di farlo, è sufficiente aggiungere link1, ma non il suo contenuto. Se cerco di aggiungere il suo contenuto, ottengo un errore:

svn add link1/* 
svn: E145001: Can't schedule an addition of '/home/me/projects/project1/link1/first_directory' below a not-directory node 

ho provato a convertire link1 al collegamento fisico, ma non posso fare neppure:

ln /path/to/my/linked/directory link1 
ln: ‘/path/to/my/linked/directory’: hard link not allowed for directory 

Qualche idea? Come gestisci questo tipo di configurazione? Ho solo bisogno di impegnare tutto da /home/me/projects/project1 da un semplice svn commit

risposta

7

Se ho ben capito il problema, si ha:

project1/ 
project1/link1 -> ../../some/where/else 

Se fate una semplice svn add link1 aggiunge una voce di collegamento simbolico al repository subversion, ma cosa stai cercando di ottenere le cose da qualche altra parte nell'albero.

In questo caso, si sta combattendo nella direzione sbagliata, è necessario creare i file e le directory reali sotto link1 e creare i collegamenti simbolici delle posizioni di destinazione nella directory link1. Questa sarebbe una soluzione semplice al problema.

Un'altra soluzione potrebbe essere quella di rendere la posizione ../../some/where/else una posizione svn a sé stante, e rendere link1 una definizione esterna a quella posizione. Quando si esegue il commit nella directory principale, gli esterni verrebbero commessi allo stesso tempo e ciò consentirebbe di archiviare le informazioni; tuttavia, per garantire che l'altra posizione fosse mantenuta sincronizzata, è necessario assicurarsi di aggiornarla alla stessa versione dei dati memorizzati.

Nel mio caso, il mio desktop, ho una directory impostazioni:

$HOME/settings 

Questa è una copia controllato da una directory contenente .bashrc, .profile, .vimrc, .vim, ecc file e cartelle da un svn pronti contro termine. Tutti i miei file e le mie directory di profilo erano symlink in questa cartella, quindi ad esempio .profile ->settings/.profile, ecc. Quando apporto le modifiche, esse si riflettono nella struttura svn, a cui posso eseguire il commit per assicurarmi di non perdere le mie impostazioni di configurazione quando vado su un altro sistema.

Se si vuole veramente svn di seguire i link simbolici come collegamenti fisici (non è possibile effettuare collegamenti fisici di directory perché sarebbe una brutta cosa ™ ), allora si dovrà incidere la fonte client SVN in modo che quello che ha fatto volevi; ma questo sarebbe un incubo di manutenzione.

È potrebbe farla franca facendo il link simbolico in un vicolo cieco punto diretto verso il bersaglio di montaggio, ma che ha il proprio problemi - si avrebbe bisogno di essere root per raggiungere questo obiettivo, e si finisce per lasciare voci divertenti nella vostra/proc/mounts per realizzare questo:

mount --bind /absolute/path/to/some/where/else project1/link1 
+0

Ottima risposta.Per ora andrò con la soluzione semplice. – Cyrille

+0

Oh, ho appena ricordato perché l'ho fatto in questo modo (collegamento simbolico alla directory esterna all'interno della copia di lavoro): mi serviva l'utente di www-data per poter scrivere file in questa directory. Dal momento che non voglio modificare i permessi nella mia home directory fino alla mia copia di lavoro, credo che dovrò sfogliare le tue soluzioni alternative ... – Cyrille

+0

lol, Pete, indovina quale link simbolico mi ha portato qui? ;-) Facciamolo presto! – gatopeich

Problemi correlati