私は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'が置かれたディレクトリとすべてのサブディレクトリに適用されます。
答え2
ファイルと同じディレクトリにあるディレクトリのみを除外する必要がある場合は、次の.gitignore
2つの規則を追加できます.gitignore
。
#
# exclude log directory in the same directory as .gitignore
#
# - for git
/log/
# - and for the linux shell
./log
このように、gitは先行/
項目と一致しない項目を持つ項目を使用します./
。
tar
一方、シェルツールは行間を処理できませんが、/
解釈することはできます./
。
したがって、そのオプションを含む元のコマンドが--exclude-vcs-ignores
機能します。
しかし、問題があります。
tar
これは、ファイルがある同じディレクトリで実行している場合にのみ機能します.gitignore
。.gitignore
次のディレクトリの他のファイルでは機能しません。