私のソースツリーには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がフィルタリングするファイルを処理するのですか?
私も他のテクニックにオープンです。
ファイルの数が複数のxargsコマンドに増えると、意外な驚きが得られます。最初のファイルのtarファイルを作成してから、同じtarファイルを残りのファイルで上書きします。
GNU tarには、この問題を解決する--excludeオプションがあります。
tar cvf ~/app.tar --exclude .git --exclude "*.log" .
Tarオプション--exclude-vcsで直接試すことができます:
--exclude-vcs:
Exclude version control system directories
例えば:
tar cvfj nameoffile.tar.bz2 directory/ --exclude-vcs
Gitで動作します。
次のようなものを試してください:
git archive --format=tar -o ~/tarball.tar -v HEAD
.logファイルと、パックしたくない他のすべてを.gitignoreファイルに追加します。
バージョン管理システムのディレクトリを除外するには:
tar --exclude-vcs
これにより、svn、gitメタファイルなどが除外されます。
新しいGNU tarには、フラグ--exclude-vcsを使用してバージョン管理ディレクトリを自動的に除外するオプションがあります。これにより、.gitも処理されます。
[平手打ち]バー!検索するパラメーターの順序が間違っていました!警告が画面から消えたので、私は警告を見ませんでした。これにより、「。」が許可されましたtarがすべてを丸tarみにさせたegrepを通過します。
これは、冗長デバッグで重要なメッセージをdrれさせることを教えてくれます。
これは動作します:
find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar
git-archive はあなたが探しているものかもしれません。
あなたはgrepなしでそれをすることができます。検索は強力です
find . -type f -not \( -iname ".git" -or -iname ".log" \) | xargs ...
アプリディレクトリの外部から実行する場合:
tar cvfz app.tar.gz --exclude ".git/*" --exclude ".git" app/
私にとっては、.gitignore
コンテンツは私が必要としたものです:
tar cvfz $PROJECT.tar.gz --exclude-from=$PROJECT/.gitignore $PROJECT
--exclude-from
はファイルの内容を読み取っています-そしてそこにリストされているパターンを除外します