GNU tarはgitignoreのディレクトリを無視するために--exclude-vcs-ignoresを使用しません。

GNU tarはgitignoreのディレクトリを無視するために--exclude-vcs-ignoresを使用しません。

私はgitリポジトリを持っていますrsh::

❯ cat rsh/.gitignore
*.o
shell
build/
rsh_history

tar(GNU tar) 1.32 を使用して圧縮しようとしています。

私が使用するコマンドは次のとおりです。

❯ gtar cvaf rsh.tar.gz --exclude-vcs-ignores --exclude-vcs rsh

残念ながら、そのディレクトリは.gitignoreで指定されていますが、build/tarファイルに含まれています。build/

❯ gtar cvaf rsh.tar.gz --exclude-vcs-ignores --exclude-vcs rsh
...
rsh/build/
rsh/build/meson-private/
rsh/build/meson-private/install.dat
rsh/build/meson-private/meson.lock
rsh/build/meson-private/sanitycheckc.exe
rsh/build/meson-private/build.dat
rsh/build/meson-private/sanitycheckc.c
rsh/build/meson-private/cmd_line.txt
rsh/build/meson-private/meson_benchmark_setup.dat
rsh/build/meson-private/meson_test_setup.dat
rsh/build/meson-private/coredata.dat
rsh/build/compile_commands.json
rsh/build/rsh
rsh/build/rsh@exe/
rsh/build/.ninja_deps
rsh/build/build.ninja
rsh/build/meson-logs/
rsh/build/meson-logs/meson-log.txt
rsh/build/meson-info/
rsh/build/meson-info/intro-buildsystem_files.json
rsh/build/meson-info/intro-benchmarks.json
rsh/build/meson-info/intro-buildoptions.json
rsh/build/meson-info/intro-dependencies.json
rsh/build/meson-info/intro-installed.json
rsh/build/meson-info/meson-info.json
rsh/build/meson-info/intro-tests.json
rsh/build/meson-info/intro-projectinfo.json
rsh/build/meson-info/intro-targets.json
rsh/build/.ninja_log
...

奇妙なことに、.gitignore自体は実際には無視されます(--exclude-vcs)。 .gitignore(rsh_history) の他のファイルも無視されます。

ベストアンサー1

この質問に対するコメントで述べたように、両方がbuild機能します**/build

ただし、これはサブディレクトリでも一致することに注意してください。私が知っている限り(よく知っている人はこの回答を編集してください)、.gitignoreファイルや簡単なコマンドラインオプションでこの問題を解決する方法はありません。 tarはgitの先行スラッシュ構文(たとえば、ルートディレクトリでのみ一致する/build)やインクルード(たとえば)を理解していないためです。build!!but_i_want_this_included/build

これ公式文書説明する:

.gitignore

シェルスタイルのワイルドカードパターンが含まれています。 `.gitfile'が置かれたディレクトリとすべてのサブディレクトリに適用されます。

おすすめ記事