回答:
最初に見てくださいgit help archive
。archive
git追跡ファイルのみを含むアーカイブを作成できるgitコマンドです。おそらくあなたが探しているもの。manページの最後にリストされている1つの例:
git archive --format=tar --prefix=git-1.4.0/ v1.4.0 | gzip >git-1.4.0.tar.gz
最も簡単な答え:追加 --exclude-vcs
--exclude-vcs
これにより、すべてのバージョン管理システムディレクトリが除外されます
個人的に使用します
tar -zcvf foo.tar.gz ./FOLDER_NAME --exclude-vcs
そのため、コマンドの最後に--exclude-vcsを追加するだけです。
tar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
アーカイブにgitによって追跡されるファイルを含めるが、gitリポジトリ自体または生成されたファイルまたは追跡されていないファイルを含めない場合は、 使用しますgit archive
。
特に除外したい場合 .git
Linuxまたは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
git
任意のシステム上でコンパイルtar
できないのですか?:
tar
はありません--exclude
)など、オプションのないシステムでコンパイルしますs
。
質問に答えたおかげで、別の解決策を見つけました。したがって、完全を期すために、以下を利用するソリューションを示します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
サポートされている場合。)