Jak używać rsync do tworzenia kopii zapasowych katalogu bez podkatalogu git

43

Chcę skopiować mój ckatalog ze wszystkimi podkatalogami oprócz ./gitpodkatalogu. Robię to za pomocą rsync:

echo "copy c and sh files "
rsync -a --include='*.c' --include='*.sh' --include='*/' --exclude='*' ~/c/ ~/Dropbox/Public/c
# remove .git directory = do not send it to dropbox. Thx to Tomasz Sowa
rm -rf ~/Dropbox/Public/c/.git

Czy mogę to zrobić lepiej?

Adam
źródło

Odpowiedzi:

48

Po prostu dodaj wyraźne wykluczenie dla .git:

rsync -a --exclude='.git/' --include='*.c' --include='*.sh' --include='*/' --exclude='*' ~/c/ ~/Dropbox/Public/c

Inną opcją jest utworzenie ~/.cvsignorezawierającej następujący wiersz wraz z innymi katalogami, które chcesz wykluczyć:

.git/

Quetza
źródło
Określono, jak należy podać ścieżkę --exclude. Jeśli masz z tym problemy, sprawdź tę odpowiedź .
totymedli
32

Możesz po prostu użyć rsync --cvs-exclude. Ignoruje także .gitkatalogi.

Uważaj jednak, aby ignorowało to również katalogi nazywane corejako występujące w plikach źródłowych Magento.

sebastianwagner
źródło
10
Działa to w przypadku katalogu najwyższego poziomu, .gitale nie dotyczy .gitkatalogów w podmodułach. Nie ignoruje również plików Git takich jak .gitmodules.
maxschlepzig