Rsync tranne le cartelle .svn e i loro contenuti secondari?


10

Gestire un repo di sovversione e un nuovo utente che non ha capito bene come ha funzionato.

Per farla breve, poiché la loro struttura locale era incasinata a causa della copia casuale di cartelle .svn, ho fatto quanto segue:

  • copiato la struttura locale in una cartella chiamata staging
  • cancellato in modo ricorsivo tutte le cartelle .svn dalla directory di gestione temporanea
  • estratto il repository in una "cartella pulita"

Ora siamo all'ultimo passo: ottenere il contenuto della cartella di gestione temporanea per sovrascrivere il contenuto pulito.

Devo avere un comando per copiare il contenuto della directory di gestione temporanea nella directory pulita, rimuovendo tutto ciò che è solo nella directory pulita, MA lasciando intatte le cartelle .svn della cartella pulita.

Sembra un lavoro per rsync. Il seguente comando sarebbe corretto?

rsync -avr --exclude=.svn* [staging] [clean]

6
Puoi sempre correre rsynccon l' --dry-runopzione per scoprirlo!
Tim

Hahaha, grazie! Non avevo idea che esistesse l'opzione. Avrei dovuto leggere l'uomo più attentamente!
SeanKilleen,

Risposte:


31

L' -Copzione per rsync potrebbe essere quella che desideri.

Non lasciatevi ingannare dalla breve descrizione nella pagina man. Sembrerebbe che l'opzione si applichi solo a CVS, ma a seconda della versione di rsync salterà i file di quasi tutti i comuni sistemi di controllo di versione esistenti.

# rsync version: 3.0.7

-C, --cvs-exclude           auto-ignore files in the same way CVS does

...

          The exclude list is initialized to exclude the  following  items
          (these  initial  items are marked as perishable — see the FILTER
          RULES section):

                 RCS  SCCS  CVS  CVS.adm   RCSLOG   cvslog.*   tags   TAGS
                 .make.state  .nse_depinfo *~ #* .#* ,* _$* *$ *.old *.bak
                 *.BAK *.orig *.rej .del-* *.a *.olb *.o *.obj *.so  *.exe
                 *.Z *.elc *.ln core .svn/ .git/ .bzr/

          then,  files  listed in a $HOME/.cvsignore are added to the list
          and any files listed in the CVSIGNORE environment variable  (all
          cvsignore names are delimited by whitespace).

2
Fai molta attenzione, perché queste estensioni possono essere utilizzate per i file che vuoi copiare, ad es. *.aè per le librerie statiche iOS.
Max Chuquimia,

NB i file e le directory sono esclusi: qualsiasi cartella chiamata "core" non viene copiata, ad esempio / myproj / api / / myproj / core / <- non è stato eseguito il backup!
Teknopaul,

7

Quasi - questo dovrebbe essere

rsync -av --exclude='.svn*' [staging] [clean]

o qualsiasi altra forma di quotazione che impedisce alla shell di espandere il carattere jolly. (Il carattere jolly corrisponderebbe solo a un file improbabile il cui nome inizia con --exclude=.svn, ma è meglio non correre il rischio e anche funzionare correttamente anche se la shell è configurata per soffocare su caratteri jolly non corrispondenti o per espanderli in un elenco vuoto. )

-rè già incluso in -a. Il extra rè semplicemente superfluo, non farà alcun danno.

--excludefa sì che i file corrispondenti al suo argomento non vengano né copiati né considerati per l'attraversamento ricorsivo. La solita difficoltà con rsync sta andando dall'altra parte, escludendo una directory ad eccezione di alcune parti di essa. Vedi filtro Rsync: copia di un modello solo per alcuni suggerimenti.

In questo caso particolare, l' esclusione delle directory di controllo versione è un modo rapido per ottenere ciò che si desidera.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.