왜 Git이 지정된 파일을 무시하지 않습니까?
다음 줄을 추가 .gitignore
했지만 입력 git status
하면 파일이 준비되지 않은 파일로 표시됩니다. 뭐가 문제 야? 다른 모든 패턴은 잘 작동합니다.
.gitignore
파일 내용 :
sites/default/settings.php
사용자 .gitignore
가 작업 디렉토리의 루트에 있는지 확인하고 해당 디렉토리 에서 상태 출력에서 파일의 경로를 실행 git status
하고 복사 하여에 붙여 넣으십시오 .gitignore
.
그래도 작동하지 않으면 파일이 이미 Git에 의해 추적되었을 수 있습니다. 의 출력을 통해이를 확인할 수 있습니다 git status
. 파일이 "추적되지 않은 파일" 섹션에 나열되어 있지 않으면 Git에서 이미 추적 한 것이므로 .gitignore
파일 의 규칙을 무시 합니다.
Git에서 파일을 무시하는 이유는 파일이 저장소에 추가되지 않기 때문입니다. 이전에 무시하려는 파일을 추가 한 경우 Git에서 해당 파일을 추적하고 해당 파일과 일치하는 무시 규칙을 건너 뜁니다. 파일이 이미 리포지토리의 일부이므로 Git이이를 수행합니다.
실제로 파일을 무시하려면 파일을 추적 해제하고 리포지토리에서 제거해야합니다. 를 사용하여 그렇게 할 수 있습니다 git rm --cached sites/default/settings.php
. 이렇게하면 파일을 실제로 삭제하지 않고 리포지토리에서 파일이 제거됩니다 --cached
. 변경 사항을 커밋하면 파일이 리포지토리에서 제거되며 무시해도 제대로 작동합니다.
나는 이것에 부딪쳤다. 오래된 질문이지만, 그 파일을 추적하고 싶지만 특정 작업 복사본에서 추적하지 않기를 원한다.
git update-index --assume-unchanged sites/default/settings.php
.gitignore는 아직 저장소에 추가하지 않은 파일 만 무시합니다.
을 git add .
하고 파일이 색인에 추가되면 .gitignore가 도움이되지 않습니다. git rm sites/default/settings.php
제거 해야 할 필요 가 있으며 무시됩니다.
나는 같은 문제가 있었다. .gitingore
실행시 추적되지 않은 파일로 나열된 위치에 정의 된 파일 git status
.
.gitignore
파일이 UTF-16LE
인코딩이 아닌 인코딩 으로 저장 되었기 때문 UTF8
입니다.
.gitignore
파일 인코딩을 변경 한 후에 UTF8
나에게 도움이되었습니다.
settings.php 파일을 성공적으로 무시하기 위해 내가 한 일 :
- git rm-캐시 된 사이트 /default/settings.php
- 커밋 (여기까지 작동하지 않았습니다)
- 수동으로 삭제 된 sites / default / settings.php (이 트릭을 수행했습니다)
- git add.
- 커밋 (성공적으로 무시)
Git에 커밋 된 파일이 있으면 무시가 예상대로 작동하지 않는다고 생각합니다. 파일을 삭제하고 커밋하십시오. 이후에는 무시됩니다.
방금 git 1.7.3.1로 이것을 시도하고 다음과 같은 구조가 주어졌습니다.
repo/.git/
repo/.gitignore
repo/sites/default/settings.php
곳에 repo
따라서 위에서 언급 한 "루트"이다 (나는 당신의 작업 트리의 루트를 부를 것이다), 그리고 .gitignore
에만 포함 sites/default/settings.php
(가) 나를 위해 일을 무시 (그리고 여부를 중요하지 않습니다, .gitignore
REPO 여부에 추가됩니다). 이 레포 레이아웃과 일치합니까? 그렇지 않다면 무엇이 다릅니 까?
gitignore에 확장자가 없는지 확인하십시오 !! .gitignore.txt가 될 수 없으며 Windows에서는 파일 이름을 .gitignore로 지정하십시오. 작동합니다.
또 다른 가능한 이유 – 동시에 실행되는 몇몇 git 클라이언트 인스턴스 . 예를 들어 "git shell"+ "GitHub Desktop"등
이것은 나에게 일어났다. 나는 주 클라이언트로 "GitHub Desktop"을 사용하고 있었고 새로운 .gitignore 설정을 무시하고 있었다 : commit 후 commit :
- 당신은 무언가를 저지 릅니다.
- 커밋 : .gitignore 설정을 무시합니다. 커밋에는 .gitignore에 언급 된 많은 임시 파일이 포함되어 있습니다.
- 자식 캐시를 지우십시오. .gitignore가 UTF8인지 확인하십시오. 파일 제거-> 커밋-> 파일을 다시 이동하십시오. 1 커밋을 건너 뛰십시오 – 도움이되지 않습니다.
이유 : Visual Studio Code 편집기가 동일한 열린 리포지토리와 함께 백그라운드에서 실행 중입니다. VS 코드에는 git 컨트롤이 내장되어있어 약간의 충돌이 발생합니다.
해결 방법 : 숨겨진 숨겨진 자식 클라이언트를 여러 번 확인하고 특히 자식 캐시를 지우는 동안 한 번에 하나의 자식 클라이언트 만 사용하십시오.
미래의 누군가가 내가했던 것과 같은 문제가있는 경우를 대비하여 :
당신이 사용하는 경우
*
!/**/
!*.*
확장명이없는 바이너리 파일을 제거하려면 다른 모든 gitignore 행이 아래에 있는지 확인하십시오. Git은 .gitignore에서 맨 위에서 읽으므로 gitignore에 'test.go'가 있었지만 파일에서 첫 번째 파일이었고 이후 'ungnored'되었습니다.
!*.*
예를 들어 응용 프로그램 구성 파일이 있는데 git에서 추적하려고하지만 .gitignore가 작동하지 않지만 로컬 설정을 변경해야합니다. git 이이 파일을 관리하거나 수정 된 것으로 표시하고 싶지 않습니다. 이를 위해 skip-worktree를 사용합니다.
git update-index --skip-worktree path/to/file
파일을 나열하고 S로 시작하는 줄을 건너 뛰어 확인하여 파일을 건너 뛴 것을 확인할 수 있습니다.
git ls-files -v | grep ^S
If in the future you want to have git manage the file locally again simply run:
git update-index --no-skip-worktree path/to/file
Mescalito above had a great answer, that led me down the right track but
git update-index --assume-unchanged file/to/ignore.php
Has a contract with git that in which : the user promises not to change the file and allows Git to assume that the working tree file matches what is recorded in the index.
However, I change the content of the files, so in my case --skip-worktree is the better option.
Toshiharu Nishina's website provided an excellent explanation of skip-worktree vs assume-unchanged: Ignore files already managed with Git locally
참고URL : https://stackoverflow.com/questions/3833561/why-doesnt-git-ignore-my-specified-file
'Programing' 카테고리의 다른 글
Info.plist에서 iOS 9“fbauth2”가 누락되었습니다 (0) | 2020.06.14 |
---|---|
bash 스크립트에서 소스를 사용할 때 '소스 : 찾을 수 없음'오류 표시 (0) | 2020.06.14 |
Mac OS X에서 zsh를 로그인 쉘로 실행하는 방법 (iTerm)? (0) | 2020.06.14 |
Java를 사용하여 문자열에서 중복 공백을 제거하는 방법은 무엇입니까? (0) | 2020.06.14 |
PHPStorm에서 PHP 파일의 잘못된 구문 강조 (0) | 2020.06.14 |