나는 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
두 가지 규칙을 추가할 수 있습니다 .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
다음 디렉터리의 다른 파일 에서는 작동하지 않습니다 .