GNU tar 不会使用 --exclude-vcs-ignores 忽略 gitignore 中的目录

xri*_*isk 4 tar gnu-tar

我有一个 git 仓库: rsh:

\n\n
\xe2\x9d\xaf cat rsh/.gitignore\n*.o\nshell\nbuild/\nrsh_history\n
Run Code Online (Sandbox Code Playgroud)\n\n

我正在尝试使用 tar (GNU tar) 1.32 来压缩它。

\n\n

我正在使用的命令是:

\n\n
\xe2\x9d\xaf gtar cvaf rsh.tar.gz --exclude-vcs-ignores --exclude-vcs rsh\n
Run Code Online (Sandbox Code Playgroud)\n\n

不幸的是,该build/目录包含在 tarfile 中,尽管build/在 .gitignore 中指定了该目录,但该目录仍包含在 tar 文件中。

\n\n
\xe2\x9d\xaf gtar cvaf rsh.tar.gz --exclude-vcs-ignores --exclude-vcs rsh\n...\nrsh/build/\nrsh/build/meson-private/\nrsh/build/meson-private/install.dat\nrsh/build/meson-private/meson.lock\nrsh/build/meson-private/sanitycheckc.exe\nrsh/build/meson-private/build.dat\nrsh/build/meson-private/sanitycheckc.c\nrsh/build/meson-private/cmd_line.txt\nrsh/build/meson-private/meson_benchmark_setup.dat\nrsh/build/meson-private/meson_test_setup.dat\nrsh/build/meson-private/coredata.dat\nrsh/build/compile_commands.json\nrsh/build/rsh\nrsh/build/rsh@exe/\nrsh/build/.ninja_deps\nrsh/build/build.ninja\nrsh/build/meson-logs/\nrsh/build/meson-logs/meson-log.txt\nrsh/build/meson-info/\nrsh/build/meson-info/intro-buildsystem_files.json\nrsh/build/meson-info/intro-benchmarks.json\nrsh/build/meson-info/intro-buildoptions.json\nrsh/build/meson-info/intro-dependencies.json\nrsh/build/meson-info/intro-installed.json\nrsh/build/meson-info/meson-info.json\nrsh/build/meson-info/intro-tests.json\nrsh/build/meson-info/intro-projectinfo.json\nrsh/build/meson-info/intro-targets.json\nrsh/build/.ninja_log\n...\n
Run Code Online (Sandbox Code Playgroud)\n\n

奇怪的是,.gitignore 本身确实被忽略了(--exclude-vcs);以及 .gitignore (rsh_history) 中的其他文件。

\n

小智 5

正如对该问题的评论中提到的,两者build**/build有效。

但应该注意的是,这也将在子目录中匹配。据我所知(如果您更了解,请有人编辑这个答案),没有办法通过文件.gitignore或简单的命令行选项来解决这个问题。因为 tar 既不理解 git 的前导斜杠语法(例如仅在根目录中/build匹配),也不理解包含内容(例如)。build!!but_i_want_this_included/build

官方文档说:

.gitignore

包含 shell 风格的通配模式。适用于`.gitfile'所在目录及其所有子目录。