민감한 정보가 포함된 여러 파일이 gitignored되는 git 저장소가 있습니다. 이러한 파일은 서로 다른 깊이의 서로 다른 하위 디렉터리에 있습니다.
주인ㅏ이 모든 문서가 제자리에 있습니다. 저장소를 호스트 시스템에 복제했습니다.두번째, 호스트에서 gitignored 파일을 복사하는 좋은 방법을 찾고 있습니다.ㅏ.
SSH를 통해 접속할 수 있어요ㅏ도착하다두번째, rsync를 사용하여 이 작업을 수행할 수 있는 방법이 있는지 의심되지만, 내가 찾은 모든 예제에서는 그 반대를 설명합니다. 모든 것을 동기화합니다.와는 별개로gitignored 파일.
답변1
git 프로젝트 디렉토리에서 사용하면 git check-ignore **/*
git이 모든 파일을 무시하게 됩니다.
git 명령의 출력을 파일로 보내고 명령 --files-from
의 옵션을 사용해야 합니다 rsync
. 예를 들어:
git check-ignore **/* > ignoredFiles
rsync -a --files-from=./ignoredFiles . host:/path/to/ignoredFiles
점을 지정해야 합니다 .
(rsync
무시된 파일파일), 소스 디렉터리를 나타내므로 git 프로젝트의 루트 디렉터리가 됩니다.
이 명령은 git check-ignore **/*
나에게만 작동합니다 zsh
(bash에서는 왜 작동하지 않는지 모르겠습니다). 그러나 이 명령을 사용하면 숨겨진 파일에는 작동하지 않으므로 숨겨진 파일도 제외하려면 다음을 사용할 수 있습니다.
find . -exec git check-ignore {} + > ignoredFiles
rsync -a --files-from=./ignoredFiles . host:/path/to/ignoredFiles
무시된 파일을 일부 파일로 리디렉션하고 --files-from을 사용하여 읽는 것이 안전해 보입니다. 공백이 있는 파일 이름은 올바르게 복사되기 때문입니다(그러나 다른 특수 파일 이름에 대해서는 잘 모르겠습니다).
답변2
결국 rsync를 사용했고 gitignored 파일을 모두 열거하는 대신 전체 디렉터리(.git/ 제외)를 동기화하고 이를 사용하여 --ignore-existing
대상에 이미 존재하는 파일을 동기화하지 않았습니다.
rsync -avz --no-links --ignore-existing --exclude='.git/' \
~/example/repo user@host:example
또한 rsync 옵션은 호출을 테스트 하고 내가 원하는 파일을 동기화하는지 확인하는 데 --dry-run
매우 유용하다는 것을 알았습니다.-vv
rsync
rsync --dry-run -avvz ...