[unix] .git 파일이없는 폴더를 Tar?

자식 저장소 인 폴더를 tar로 만들면 .git관련 파일 을 포함시키지 않고 할 수 있습니까? 그렇지 않다면 어떻게 명령을 통해 그렇게 할 수 있습니까?



답변

먼저 살펴보십시오 git help archive. archivegit 추적 파일 만 포함하는 아카이브를 만들 수있는 git 명령입니다. 아마 당신이 찾고있는 것. 매뉴얼 페이지 끝에 나열된 예는 다음과 같습니다.

git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz


답변

가장 간단한 답변 : 추가 --exclude-vcs. 여기에는 모든 버전 제어 시스템 디렉토리가 제외됩니다.

개인적으로 사용합니다

tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME

--exclude-vcs명령의 끝에를 추가 하기 만하면됩니다.


답변

아카이브가 git에 의해 추적 된 파일을 포함하지만 git 저장소 자체 또는 생성되거나 추적되지 않은 파일은 포함하지 않으려면을 사용하십시오git archive .

.gitLinux, FreeBSD 또는 OSX 또는 Cygwin에서 특별히 제외하고 다른 모든 것을 포함 하려는 경우 tar에는 디렉토리를 제외하는 간단한 옵션이 있습니다.

tar -c --exclude .git -f - foo | gzip >foo.tgz

GNU tar (예 : Linux 또는 Cygwin)를 사용하면이 값을로 줄일 수 있습니다 tar czf foo.tgz --exclude .git foo.

아카이브를 작성하는 POSIX 방법은입니다 pax.

pax -w -t -s '!.*/\.git$!!' -s '!.*/\.git/.*!!' foo | gzip >foo.tgz


답변

답변 덕분 에 내 질문 중 하나에 대해 다른 해결책을 찾았습니다. 완성도를 높이기 위해 다음을 사용하는 솔루션이 있습니다 find.

find . -path './.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

.git(하위) + 폴더 내에서 가능한 폴더 를 제외 하려면 :

find . -path '*/.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

후자는 또한 다음을 통해 달성 될 수 있습니다.

find . -type d -name '.git' -prune -o -print |
  tar -czvf ../archive.tgz --no-recursion -T -

find예를 들어 수정 날짜, 권한 등 의 다른 필터링 기술을 사용할 수 있다면 매우 편리합니다 .

(자주 잘 형성 파일 이름이 가정으로, 그렇지 않으면 널 (null)이 의미 할 수있다 구분자로 바이트를 사용할 필요 -print0를위한 find--null에 대한 tar지원합니다.)


답변