.gitignore는 내 파일을 무시하지 않습니다!
git
매뉴얼을 확인하기 전에는 쉽게 설명할 수 없는 흥미로운 엣지 케이스를 만났습니다. git
를 15년 동안 사용한 후에도 그 행동에 약간 놀랐기 때문에 세부 정보를 공유합니다. 운 좋게도 근본적인 이유를 이해했기 때문에 이제는 의미가 있습니다..gitignore가 무엇인가요?
버전 제어에 git을 사용하는 사람은
.gitignore
, git
및 git status
와 같은 다양한 작업을 수행할 때 기본적으로 무시할 파일 이름 패턴git diff
을 지정할 수 있는 git add
파일에 익숙할 것입니다. ) . 생성된 파일과 임시 파일을 무시하는 것은 매우 유용합니다. !
로 시작하는 행을 추가하여 해당 패턴이 있는 파일을 무시하지 않도록 할 수 있습니다. 패턴은 위에서 아래로 평가되며 파일과 일치하는 마지막 패턴에 따라 무시 여부가 결정됩니다.우리가 한 일
프로젝트를 체크아웃한 모든 컴퓨터에서 프로젝트의
.gitkeep
디렉토리를 보존하기 위해 간단한 tmp/pids
파일을 추가하려고 했습니다. 틀림없이 이 사소한 작업은 작동하지 않았고 작동하지 않는 이유를 파악하는 데 시간이 걸렸습니다.# Lets git NOT ignore .gitkeep files, i.e. always check them in:
echo "!.gitkeep" >> .gitignore
touch tmp/pids/.gitkeep
git status
# ... tmp/pids/.gitkeep is NOT listed as new file
작동하지 않는 이유
그렇다면 방금 무시하지 않겠다고 말한 파일
git
이 여전히 무시되는 이유는 무엇입니까? 우리.gitignore
에 이미 모든 임시 파일을 무시하는 편리한 줄이 포함되어 있기 때문입니다(체크인할 장소가 없기 때문입니다!)./tmp/*
이 줄은
git
가 tmp
내의 모든 파일과 디렉터리를 무시하도록 합니다. 이전 변경 사항이 원하는 결과를 얻지 못한 직접적인 이유이기도 합니다. manual 을 읽은 후 관련 비트(강조 광산)를 찾았습니다.An optional prefix “!” which negates the pattern; any matching file excluded by a previous pattern will become included again. It is not possible to re-include a file if a parent directory of that file is excluded. Git doesn’t list excluded directories for performance reasons, so any patterns on contained files have no effect, no matter where they are defined.
무시되지 않는 디렉토리인지 확인하기 위해 무시된 디렉토리의 하위로 재귀하지 않는 것이 성능 관점에서 실제로 의미가 있습니다.
요약: 내용에 대한 규칙을 사용자 정의하려면 무시된 상위 디렉토리를 다시 포함해야 합니다.
git이 파일을 무시하지 않게 만드는 방법
새로운 지식을 사용하여
.gitignore
를 업데이트합시다. 변경 후 git diff
: /tmp/*
+!/tmp/pids
+/tmp/pids/*.pid
+!.gitkeep
여기서 작업 순서는 다음과 같습니다.
/tmp/*
및 모든 하위 항목/tmp/pids
다시 .pid
에 있는 모든 tmp/pids
개의 파일 무시(그곳에서 생성된 유일한 파일이기 때문).gitkeep
대안: –force 사용
또는
git add --force tmp/pids/.gitkeep
를 사용하여 .gitignore
규칙을 무시하면서 추가할 수 있습니다. 틀림없이 그것은 매뉴얼을 확인하고 그것에 대해 생각하는 것보다 빠르지만, 처음부터 작동하지 않는 이유를 배우는 것을 방해하기도 합니다.이것은 저에게 효과가 있었으므로 여러분에게도 도움이 되었으면 합니다. 문제가 발생하면 언제든지 또는 email을 통해 저에게 연락해 주세요. 저는 백엔드 시스템에 중점을 두고 코드 품질에 집착하는 경험이 있습니다Ruby software developer. 내가 제공하는 Ruby on Railsmaintenance services도 몇 가지 있습니다. 여전히 Rails 6으로 업그레이드해야 하는 경우 편리한 무료checklist를 가져오거나 제가 대신 하도록 요청하십시오.
Reference
이 문제에 관하여(.gitignore는 내 파일을 무시하지 않습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/narnach/gitignore-does-not-unignore-my-file-jj9텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)