rsync는 .git 하위 디렉토리가 포함된 폴더를 제외합니다(--filter)

rsync는 .git 하위 디렉토리가 포함된 폴더를 제외합니다(--filter)

여러 폴더를 백업하고 싶습니다. 이 여러 폴더에서 하위 디렉터리가 포함된 모든 디렉터리를 제외하고 싶습니다 .git. 예를 들어 이 폴더 계층 구조에서는 다음과 같습니다.

├── gitrepo        <-- exclude this completely
|   └── .git/...
│   └── file1
└── nogitrepo      <-- keep this
    └── file2

이미 .git 디렉터리를 모두 성공적으로 제외했지만 --exclude=.git로컬 저장소의 모든 콘텐츠가 이미 원격 SCM에 있으므로 백업에 포함하고 싶지 않습니다.

나는 --filterrsync의 주장을 알고 있습니다. 매뉴얼 페이지를 살펴봤지만 이것이 이 문제를 해결할 수 있을지 확신할 수 없습니다. 그러나 rsync는 사전에 모든 포함 파일의 파일 목록을 수집하므로 낙관적입니다.

그렇다면 rsync를 사용하여 git 리포지토리인 모든 폴더를 제외할 수 있습니까? 에 대한 디렉토리별 규칙과 같은 것입니까 --filter?

답변1

SRC예를 들어 다음과 같이 및 변수를 설정합니다 DEST.

SRC="./"
DEST="../BACKUP/"

find다음과 같은 방법을 사용하여 모든 디렉터리를 찾을 수 있습니다 .git.

find "${SRC}" -type d -name '.git'

${SRC}/.git여기에는 도 포함됩니다 (이 되며 ${SRC}궁극적으로 "를 무시합니다.)모든 것")... 해당 사용을 피하려면 다음을 수행하십시오 -mindepth 2.

find "${SRC}" -mindepth 2 -type d -name '.git'

다음으로 후행 /.git구성요소를 제거합니다.

find "${SRC}" -mindepth 2 -type d -name '.git' \
    | sed -re 's!/.git$!!g'

작업 디렉터리를 소스로 설정 하므로 결과에서도 rsync초기 부분을 잘라야 합니다 .${SRC}

find "${SRC}" -mindepth 2 -type d -name '.git' \
    | sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g'

rsync마지막으로 를 사용하여 --exclude-from전달 -(예: stdin) 하는 명령 으로 이를 결합합니다 .

find "${SRC}" -mindepth 2 -type d -name '.git' \
    | sed -re 's!^'"${SRC}"'!!g;s!/.git$!!g' \
    | rsync -av --exclude-from - "${SRC}" "${DEST}"/

메모:이건 안 돼어느추적되지 않은/수정된 파일.

답변2

find your_DIR_for_BACKUP -name .git | sed 's/\/.git//g' > ~/exclude_repos

--exclude-from 옵션을 사용하여 rsync를 실행하고 채워진 파일 ~/exclude_repos를 선택합니다.

rsync --exclude-from ~/exclude_repos your_DIR_for_BACKUP_SRC DST

관련 정보