何気なくmanを見ていてGNU tarに--exclude-vcs
なるオプションが有ることを知りました。
VCS関連のファイルを除外してくれるようです。
(まぁ昨今のVCSならexportとかarchiveみたいなサブコマンド使ってもよいんですが。)
たとえば、こんな感じでgitで管理しているディレクトリがあったとして、
foo
├── .git
│ ├── HEAD
│ ├── branches
│ ├── config
│ ├── info
│ │ :(snip)
│ └── refs
├── .gitignore
├── bar.txt
└── foo.txt
アーカイブ時に--exclude-vcs
オプションを加えてやると、
$ tar --exclude-vcs -zcf foo.tar.gz foo
このようにVCS関連のファイル/ディレクトリが除外されてアーカイブされます。
(.gitと.gitignoreが除外された)
$ tar -ztf foo.tar.gz
foo/
foo/foo.txt
foo/bar.txt
除外されるパターンは、CentOS6に入ってたv1.23と最新のv1.26共にこのような定義になっていました。
tar.c
static char const * const vcs_file_table[] = {
/* CVS: */
"CVS",
".cvsignore",
/* RCS: */
"RCS",
/* SCCS: */
"SCCS",
/* SVN: */
".svn",
/* git: */
".git",
".gitignore",
/* Arch: */
".arch-ids",
"{arch}",
"=RELEASE-ID",
"=meta-update",
"=update",
/* Bazaar */
".bzr",
".bzrignore",
".bzrtags",
/* Mercurial */
".hg",
".hgignore",
".hgtags",
/* darcs */
"_darcs",
NULL
};
参考
GNU tar 1.26: 6.4 Excluding Some Files
http://www.gnu.org/software/tar/manual/html_section/exclude.html