Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Tarballing without Git metadata

My source tree contains several directories which are using Git source control, and I need to tarball the whole tree excluding any references to the Git metadata or custom log files.

I thought I'd have a go using a combination of find/egrep/xargs/tar, but somehow the tar file contains the .git directories and the *.log files.

This is what I have:

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

Can someone explain my misunderstanding here? Why is tar processing the files that find and egrep are filtering?

I'm open to other techniques as well.

like image 606
zaf Avatar asked Jun 18 '10 12:06

zaf


3 Answers

You will get a nasty surprise when the number of files increase to more than one xargs command: Then you will first make a tar file of the first files and then overwrite the same tar file with the rest of the files.

GNU tar has the --exclude option which will solve this issue:

tar cvf ~/app.tar --exclude .git --exclude "*.log" .
like image 161
Ole Tange Avatar answered Oct 16 '22 17:10

Ole Tange


You can try directly with the tar option --exclude-vcs:

--exclude-vcs:
          Exclude version control system directories

For example:

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

It works with Git.

like image 25
Ivan Avatar answered Oct 16 '22 18:10

Ivan


Try something like this:

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

Add your .log files and everything else you don't want to be packed to your .gitignore file.

like image 29
jkramer Avatar answered Oct 16 '22 16:10

jkramer