.gitファイルなしでフォルダーをtarしますか?


16

gitリポジトリであるフォルダーをtarした場合、.git関連ファイルを含めずにtarできますか?そうでない場合は、コマンドを使用してそれをどのように行いますか?

回答:


23

最初に見てくださいgit help archivearchivegit追跡ファイルのみを含むアーカイブを作成できるgitコマンドです。おそらくあなたが探しているもの。manページの最後にリストされている1つの例:

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

6
これはルートgitリポジトリのみをアーカイブします。サブモジュールが使用された場合-それらのディレクトリは空になります。
スタン

@Stann:おかげで、他のサブモジュールのユーザから
マークKコーワン

22

最も簡単な答え:追加 --exclude-vcs

--exclude-vcs

これにより、すべてのバージョン管理システムディレクトリが除外されます

個人的に使用します

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

そのため、コマンドの最後に--exclude-vcsを追加するだけです。


すべての既知のもの、私は思う?;)
phk

3
GNU / Linuxの引数の前に、すべてのオプションを一緒にする必要があります。
ジョシュハブダス

2
GNU / Linuxについて述べたようにtar --exclude-vcs -zcvf foo.tar.gz ./FOLDER_NAME
Michael Irey

20

アーカイブに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

DOESは、git任意のシステム上でコンパイルtarできないのですか?:
ステファンギメネス

1
@StéphaneGimenezおそらくない。ただし、OpenBSD(明らかにpaxのオプションを複製しますが、一般的なtarコマンド構文の拡張機能でtarはありません--exclude)など、オプションのないシステムでコンパイルしますs
ジル 'SO-悪である停止

0

質問に答えたおかげで別の解決策を見つけました。したがって、完全を期すために、以下を利用するソリューションを示します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サポートされている場合。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.