Copiare le directory .svn da un checkout a un non-checkout per renderlo un checkout
-
13-09-2019 - |
Domanda
Ho una grande applicazione in un ambiente di produzione che sto cercando di muoversi sotto il controllo di versione. Così, ho creato un nuovo pronti contro termine e importato l'app, meno varie directory e file che non devono essere sotto il controllo di versione. Ora, ho bisogno di fare la copia installata una cassa (ma ancora mantenere i file in più). A questo punto, in una versione recente di SVN, avrei semplicemente fare un checkout sopra la parte superiore della directory esistente utilizzando l'opzione --force. Ma, purtroppo, ho una versione antica di SVN, da prima, quando è stato aggiunto l'opzione --force (e non può ancora migliorare ... lunga storia).
Quindi, ho verificato l'applicazione in un'altra directory, e vogliono semplicemente copiare tutte le directory .svn nella directory originale, trasformando così l'originale in una cassa pur lasciando solo i file aggiuntivi. Ora, forse sto solo avendo una giornata dura e manca qualcosa che è nel sito semplice, ma io non riesco a essere in grado di capire questo. Qui ci sono gli approcci che ho provato finora:
-
Usa rsync:. Io non riesco a colpire la giusta combinazione di includere ed escludere le direttive per catturare in modo ricorsivo tutte le directory .svn ma nient'altro
-
Usa cp:. Non riesco a capire un buon modo per avere ha colpito tutte le directory .svn attraverso e verso il basso attraverso l'intera app
-
Con ritrovo con cp -exec: Io corro nei guai con la parte principale dei percorsi dei file trovati rovinare i percorsi di destinazione. Posso escludere utilizzando -printf '% P', ma che non sembra andare nella {} sostituzione per exec.
-
Usa trovare con xargs CP: Io corro nei guai con l'invio di trovare più di directory figlio prima di inviare i loro genitori. Purtroppo, trovare non avere un'opzione --breadth.
Ogni pensiero là fuori?
Altre info:
- bash 3.0.0.14
- rsync 2.6.3 p28
- cp 5.2.1
- svn 1.3.2
Soluzione
Utilizzare tar e trovare per catturare i dirs .svn in un checkout pulito, quindi decomprimere nella vostra app.
cd /tmp/
svn co XXX
cd XXX
find . -name .svn -print0 | tar cf /tmp/XXX.tar --null -T -
cd /to/your/app/
tar xf /tmp/XXX.tar
Modifica: comando find / tar passati a utilizzare NUL Terminator per la robustezza di fronte a nomi di file contenenti spazi. comando originale era:
tar cf /tmp/XXX.tar $(find . -name .svn)
Altri suggerimenti
(5) Non puoi semplicemente fare una cassa in una directory diversa, quindi copiare i file in più per quella directory, verificare che tutto va bene prima di passare a eseguire l'applicazione dalla nuova directory?