2010-06-18 3 views
40

내 소스 트리에 Git 소스 컨트롤을 사용하는 여러 디렉토리가 있으며, Git 메타 데이터 또는 사용자 정의 로그 파일에 대한 참조를 제외한 전체 트리를 tarball해야합니다.Git 메타 데이터없이 Tarballing

나는 find/egrep/xargs/tar의 조합을 사용한다고 생각했지만 어떻게 든 tar 파일에는 .git 디렉토리와 * .log 파일이 포함되어있다.

find -type f . | egrep -v '\.git|\.log' | xargs tar rvf ~/app.tar 

누군가가 여기 내 오해를 설명 할 수 :

이 내가 가진 무엇인가? find와 egrep가 필터링하는 파일을 tar 처리하는 이유는 무엇입니까?

나는 다른 기술에 대해서도 열려 있습니다.

답변

74

파일의 개수가 하나 이상의 xargs를 명령으로 증가 할 때 불쾌한 놀라움을 얻을 것이다 : 그럼 먼저 첫번째 파일의 tar 파일을 만들 것이다 다음 같은 덮어 쓰기 tar 파일을 나머지 파일과 함께 저장합니다.

tar cvf ~/app.tar --exclude .git --exclude "*.log" . 
+3

도 OS X의 bsdtar와 호환됩니다. – rexford

2

git-archive 당신이 찾고있는 것일 수도 있습니다.

+0

거기 나와있는 패턴과 exlucde. 이후 소스 트리에 여러 개의 쥐가있어. – zaf

2

grep없이 할 수 있습니다. 당신이 당신의 .gitignore 파일에 포장하지 않으려는 .log 파일과 다른 모든 추가

git archive --format=tar -o ~/tarball.tar -v HEAD 

: 찾기

find . -type f -not \(-iname ".git" -or -iname ".log" \) | xargs ... 
+0

문제는 필자의 찾기 매개 변수입니다. 내 대답을 보라. 대안을 가져 주셔서 감사합니다. – zaf

11

이런 식으로 뭔가를 시도 강력하다.

4

[slap] Bah! 찾으려는 매개 변수의 순서가 잘못되었습니다! 나는 그들이 화면을 윙 울 렸기 때문에 경고를 보지 못했습니다. 이것은 허용 된 '.' egrep을 통과하여 tar가 모든 것을 털어 내게 만들었습니다.

이렇게하면 자세한 메시지를 익사시키는 데 도움이됩니다.

이 작동 :

find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar 
9

버전 제어 시스템 디렉토리를 제외하려면 :

tar --exclude-vcs

이 제외됩니다 SVN, 자식 메타 파일 등

GNU 타르는이 문제를 해결합니다 --exclude 옵션이 있습니다

0

앱 디렉토리 외부에서 수행하는 경우 :

tar cvfz app.tar.gz --exclude ".git/*" --exclude ".git" app/ 
40

당신은 타르 옵션 --exclude-VCS와 직접 시도 할 수 있습니다 : 예를 들어

--exclude-vcs: 
      Exclude version control system directories 

: 그것은 망할 놈의 작동

tar cvfj nameoffile.tar.bz2 directory/ --exclude-vcs 

.

+1

감사합니다. 그러나 tar의 내 버전에서는 "--exclude-vcs가 지원되지 않습니다." – zaf

+1

@zaf yes = GNU tar 만 해당. MacOSX에는없는 bsdtar가 함께 제공됩니다. – marko

+0

@Marko Aha, 저를 계몽 해 주셔서 감사합니다. 이러한 세부 사항은 항상 나를 괴롭힌다. – zaf

3

새로운 GNU tar에는 --exclude-vcs 플래그를 사용하여 버전 제어 디렉토리를 자동으로 제외 할 수있는 옵션이 있습니다. 이것은 .git도 처리 할 것입니다. 나를 위해

0

.gitignore 내용은 내가 필요한 것입니다 :

tar cvfz $PROJECT.tar.gz --exclude-from=$PROJECT/.gitignore $PROJECT

--exclude-from

파일의 내용을 읽고 - 아마

+0

또한 --exclude-vcs - VCS 무시 파일에서 제외 패턴을 읽는 것을 무시합니다. –

관련 문제