web-dev-qa-db-ja.com

GitメタデータなしのTarballing

私のソースツリーにはGitソース管理を使用しているいくつかのディレクトリが含まれており、Gitメタデータまたはカスタムログファイルへの参照を除くツリー全体をtarballする必要があります。

Find/egrep/xargs/tarを組み合わせて使用​​すると思いますが、どういうわけかtarファイルには.gitディレクトリと* .logファイルが含まれています。

これは私が持っているものです:

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

誰かが私の誤解をここで説明できますか?なぜtarがfindおよびegrepがフィルタリングするファイルを処理するのですか?

私も他のテクニックにオープンです。

49
zaf

ファイルの数が複数のxargsコマンドに増えると、意外な驚きが得られます。最初のファイルのtarファイルを作成してから、同じtarファイルを残りのファイルで上書きします。

GNU tarには、この問題を解決する--excludeオプションがあります。

tar cvf ~/app.tar --exclude .git --exclude "*.log" .
95
Ole Tange

Tarオプション--exclude-vcsで直接試すことができます:

--exclude-vcs:
          Exclude version control system directories

例えば:

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

Gitで動作します。

51
Ivan

次のようなものを試してください:

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

.logファイルと、パックしたくない他のすべてを.gitignoreファイルに追加します。

12
jkramer

バージョン管理システムのディレクトリを除外するには:

tar --exclude-vcs

これにより、svn、gitメタファイルなどが除外されます。

11
PeloNZ

新しいGNU tarには、フラグ--exclude-vcsを使用してバージョン管理ディレクトリを自動的に除外するオプションがあります。これにより、.gitも処理されます。

4
KeshV

[平手打ち]バー!検索するパラメーターの順序が間違っていました!警告が画面から消えたので、私は警告を見ませんでした。これにより、「。」が許可されましたtarがすべてを丸tarみにさせたegrepを通過します。

これは、冗長デバッグで重要なメッセージをdrれさせることを教えてくれます。

これは動作します:

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

git-archive はあなたが探しているものかもしれません。

2
Skilldrick

あなたはgrepなしでそれをすることができます。検索は強力です

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

アプリディレクトリの外部から実行する場合:

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

私にとっては、.gitignoreコンテンツは私が必要としたものです:

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

--exclude-fromはファイルの内容を読み取っています-そしてそこにリストされているパターンを除外します

0
Ricky Levi