Rsync oprócz folderów .svn i ich pod-zawartości?


10

Radzenie sobie z repozytorium subversion i nowym użytkownikiem, który nie do końca rozumiał, jak to działa.

Krótko mówiąc, ponieważ ich lokalna struktura została pomieszana z powodu kopiowania losowych folderów .svn, zrobiłem następujące:

  • skopiował lokalną strukturę do folderu zwanego przemieszczaniem
  • rekurencyjnie usunął wszystkie foldery .svn z katalogu pomostowego
  • sprawdziłem repozytorium w „czystym folderze”

Teraz jesteśmy na ostatnim etapie - nadpisanie zawartości folderu pomostowego w celu zastąpienia czystej zawartości.

Potrzebuję polecenia, aby skopiować zawartość katalogu pomostowego do czystego katalogu, usuwając wszystko, co jest tylko w czystym katalogu, ALE pozostawiając taktowane foldery .svn czystego folderu.

To brzmi jak zadanie dla rsync. Czy poniższe polecenie byłoby poprawne?

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

6
Zawsze możesz biegać rsyncz --dry-runopcją, aby się dowiedzieć!
Tim

Hahaha dzięki! Nie miałem pojęcia, że ​​taka opcja istnieje. Powinien był uważniej przeczytać mężczyznę!
SeanKilleen,

Odpowiedzi:


31

-CRozwiązaniem dla rsync może być to, co chcesz.

Nie daj się jednak zwieść krótkiemu opisowi na stronie man. Wygląda na to, że opcja dotyczy tylko CVS, ale w zależności od wersji rsync pominie pliki prawie każdego istniejącego systemu kontroli wersji.

# 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
Zachowaj ostrożność, ponieważ tych rozszerzeń można użyć do plików, które chcesz skopiować, np. *.ajest dla bibliotek statycznych iOS.
Max Chuquimia

Pliki NB i katalogi są wykluczone: żaden folder o nazwie „core” nie jest kopiowany, np. / Myproj / api / / myproj / core / <- nie jest tworzona kopia zapasowa!
teknopaul,

7

Prawie - tak powinno być

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

lub dowolną inną formę cytowania, która uniemożliwia powłoce rozwinięcie symbolu wieloznacznego. (Symbol wieloznaczny pasuje tylko do mało prawdopodobnego pliku, którego nazwa zaczyna się od --exclude=.svn, ale lepiej nie podejmować ryzyka, a także działać poprawnie, nawet jeśli powłoka jest skonfigurowana do zadławienia niepasujących symboli wieloznacznych lub rozwinięcia ich do pustej listy. )

-rjest już uwzględniony w -a. Dodatek rjest po prostu zbyteczny, nie wyrządzi żadnej szkody.

--excludepowoduje, że pliki pasujące do jego argumentu nie są kopiowane ani brane pod uwagę przy przechodzeniu rekurencyjnym. Zwykle trudność z rsync idzie w drugą stronę, wyłączając katalog z wyjątkiem niektórych jego części. Zobacz Filtr Rsync: kopiowanie jednego wzoru tylko dla niektórych wskazówek.

W tym konkretnym przypadku wykluczenie katalogów kontroli wersji jest szybkim sposobem na uzyskanie tego, co chcesz.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.