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:

  1. 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

  2. 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

  3. 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.

  4. 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
È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top