57

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

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

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

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

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

私は他の技術にもオープンです。

4

10 に答える 10

104

ファイルの数が複数のxargsコマンドに増えると、厄介な驚きがあります。次に、最初に最初のファイルのtarファイルを作成し、次に同じtarファイルを残りのファイルで上書きします。

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

tar cvf ~/app.tar --exclude .git --exclude "*.log" .
于 2010-06-18T21:47:19.820 に答える
57

tar オプション --exclude-vcs を使用して直接試すことができます。

--exclude-vcs:
          Exclude version control system directories

例えば:

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

Gitで動作します。

于 2013-02-20T21:49:39.367 に答える
15

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

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

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

于 2010-06-18T12:36:14.453 に答える
12

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

tar --exclude-vcs

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

于 2012-07-10T01:01:44.117 に答える
4

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

于 2016-01-08T16:58:38.413 に答える
4

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

それは、詳細なデバッグで重要なメッセージを溺死させることを教えてくれます。

これは機能します:

find . -type f | egrep -v '\.git|\.log' | xargs tar cvf ~/app.tar
于 2010-06-18T12:36:33.093 に答える
2

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

于 2010-06-18T12:29:44.393 に答える
2

grepなしでそれを行うことができます。検索は強力です

 find . -type f -not \( -iname ".git" -or -iname ".log" \) | xargs ...
于 2010-06-18T12:33:32.943 に答える
1

アプリディレクトリの外部からそれを行うには:

tar cvfz app.tar.gz --exclude ".git/*" --exclude ".git" app/
于 2012-11-01T06:49:16.090 に答える