Gitignore가 작동하지 않습니다


275

.gitignore파일이 어떤 이유로 작동하지 않으며, 어느 정도의 인터넷 검색으로이를 수정할 수 없습니다. 여기 내가 가진 것입니다 :

*.apk
*.ap_
*.dex
*.class
**/bin/
**/gen/
.gradle/
build/
local.properties
**/proguard/
*.log

그것은 mastergit repo 인 디렉토리 에 있습니다. OSX 10.8.6을 실행하는 MacBook에서 Git 1.8.4.2를 실행하고 있습니다.


4
1. 색인화해서는 안되는 파일은 무엇입니까? 2.이 파일들을 저장소에 추가 한 후에 .gitignore를 추가 했습니까?
Ahmad

2
@Ahmad 여러 프로젝트에서 /bin/내가 할 때 폴더는 여전히 표시됩니다 git status. .gitignore
user3280133

1
".gitignore를 추가 한 이후"-파일을 추가 한 후 .gitignore를 추가 했습니까?
Ahmad


답변:


685

버전 관리의 파일 / 폴더는 파일을 폴더에 추가했기 때문에 삭제되지 않습니다 .gitignore. 이미 리포지토리에 있으므로 제거해야합니다. 다음과 같이하면됩니다.

( 이 작업을 수행하기 전에 변경 한 모든 내용을 커밋하십시오. )

git rm -rf --cached .
git add .

이렇게하면 리포지토리에서 모든 파일이 제거되고 다시 추가됩니다 (이번에는의 규칙에 따라 .gitignore).


2
또는 git checkout folder_to_ignore / *를 사용하여 .gitignore에 추가 한 파일 / 폴더를 되돌리려 고 시도 할 수 있습니다.
Zahra

1
@Greenish 그러나 이미 커밋 된 경우에는 작동하지 않으며 준비된 경우에만 작동합니다. 폴더가 이미 .gitignore에있는 경우 (추가를 강제하지 않는 한) 발생하지 않아야합니다. :)
Ahmad

1
변경 사항을 github에 푸시하면 나에게 도움이되지 않습니다. 모든 것이 최신이라고 말합니다 !!!!
Dr. Younes Henni

1
죄송합니다. gitignore 파일을 삭제하고 원격 저장소로 다시 밀면 문제가 해결되었습니다. 더 이상 git status를 입력했을 때의 말을 기억하지 못합니다. 내 문제가 해결되었습니다. 고마워
Dr. Younes Henni

3
나는 이것을 단순화하기 위해 'git ignore'명령을 추가하는 것이 좋습니다. 따라서 git ignore path/file언제든지 사용할 수 있습니다.
Tiw

123

리포지토리에 이미 추가 / 초기화되어있는 단일 파일의 추적을 해제하려면 (예 : 파일 추적을 중지하지만 시스템에서 삭제하지는 마십시오) git rm --cached filename

당신의 지금있는 모든 파일을 untrack하려면 .gitignore:

먼저 미해결 코드 변경 사항을 커밋 한 후 다음 명령을 실행하십시오.

git rm -r --cached .

이렇게하면 인덱스 (스테이징 영역)에서 변경된 파일이 모두 제거되고 다음을 실행합니다.

git add .

커밋 :

git commit -m ".gitignore is now working"

이 작업을 시도했을 때 두 기능 분기가 모두 손실되었으므로 분기를 다시 마스터로 병합하거나 포인터를 이동하십시오. 운 좋게도 작업을 잃지 않았습니다. 작업 지점의 최신 업데이트가 모두 마스터 지점으로 재설정되었지만 설정에 따라이 동작은 바람직하지 않을 수 있습니다.
썰매

이 명령을 사용하여 파일 대신 캐시에서 폴더를 제거하는 방법은 무엇입니까?
RealMJDev

15

이 질문에 대한 답을 따르려고 약간의 토끼 구멍을 내려간 후 (아마도 비주얼 스튜디오 프로젝트 에서이 작업을 수행해야했기 때문에) 더 쉬운 길은

  1. 더 이상 추적하지 않으려는 파일을 잘라내어 붙여 넣기

  2. 해당 파일의 "삭제"커밋

  3. .gitignore임시로 이동 한 파일을 제외하도록 수정을 커밋

  4. 파일을 폴더로 다시 이동하십시오.

나는이 그것에 대해 이동하는 가장 정직 방법이 (적어도 비주얼 스튜디오에서, 또는 내가 안드로이드 스튜디오와 같은 다른 IDE를 당겨 기반 환경을 가정 할 것이다) 실수로 꽤 보급과 발에 자신을 촬영하지 않고, 발견 git rm -rf --cached ., 그 후 내가 작업했던 Visual Studio 프로젝트가로드되지 않았습니다.


2
나는이 접근법을 아주 좋아한다-비록 그것이 "적절한"것으로 간주되지 않더라도 덜 파괴적인 것처럼 보인다.
theyetiman

6

필자의 경우 메모장에서 파일을 열 때 명확하게 표시되는 파일 시작 부분의 빈 공간 이 Visual Studio Code에서 명확하지 않았습니다.


4

나는 .gitignore나에게 공통적 인 것을 생성하기 위해 무언가를 사용 했고 나는 이것을 만났다. @ Ozesh 답변을 읽은 후 VS 코드에서 열었습니다. 오른쪽 하단에 줄 끝 유형을 보여주는 멋진 표시기가 있기 때문입니다. LF이므로 제안한대로 주사위를 사용하지 않고 CRLF로 변환했습니다.

그런 다음 줄 끝을보고 UTF16을 사용하여 저장되었음을 알았습니다. 그래서 voila 인코딩 UTF8을 사용하여 다시 저장했습니다. CRLF가 중요하다고 생각하지 않았으므로 LF로 다시 변경했는데 여전히 작동했습니다.

물론 파일을 이미 커밋하여 이미 색인을 생성했기 때문에 이것은 OP 문제가 아니지만 다른 사람 이이 문제를 우연히 발견하면 공유 할 것이라고 생각했습니다.

TLDR ; 아직 파일을 커밋하지 않고 .gitignore가 여전히 존중되지 않으면 파일 인코딩을 확인하고 UTF8을 확인하고 작동하지 않으면 줄 끝을 어지럽히십시오.


1
UTF16은 저에게 범인이었습니다. VS 코드 열기> .gitignore 열기> 명령 프롬프트 열기> "파일 인코딩 변경"> "UTF-8"> 파일 저장
Michael

3

필자의 경우 .gitignore 줄 끝에 공백이 원인이었습니다. 따라서 .gitignore에서 공백을 조심하십시오!


2

다음을 수행하면서 문제를 해결했습니다.

우선, 나는 Windows 사용자이지만 비슷한 문제에 직면했습니다. 그래서 여기에 솔루션을 게시하고 있습니다.

때때로 .gitignore가 예상대로 작동하지 않는 간단한 이유가 있습니다. EOL 변환 동작 때문입니다.

여기에 대한 빠른 수정이 있습니다.

편집> EOL 변환> Windows 형식> 저장

텍스트 편집기 설정비난 할 수 있습니다 .

예를 들면 다음과 같습니다.

저는 Windows 개발자이므로 일반적으로 Vim 사용자와 달리 텍스트를 편집 할 때 메모장 ++ 을 사용 합니다.

메모장 ++를 사용하여 .gitignore 파일을 열면 다음과 같이 나타납니다.

## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.
##
## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore


# See https://help.github.com/ignore-files/ for more about ignoring files.

# User-specific files
*.suo
*.user
*.userosscache
*.sln.docstates
*.dll
*.force
# User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs

기본 메모장을 사용하여 동일한 파일을 열면 이것이 내가 얻는 것입니다.

## Ignore Visual Studio temporary files, build results, and ## files generated by popular Visual Studio add-ons. ## ## Get latest from  https://github.com/github/gitignore/blob/master/VisualStudio.gitignore # See https://help.github.com/ignore-files/ for more about ignoring files. # User-specific files *.suo *.user *.userosscache 

따라서 출력을 보면 이미 추측했을 것입니다. .gitignore의 모든 것이 하나의 라이너가되었으며 시작에 # #이 있기 때문에 모든 것이 주석 처리 된 것처럼 작동합니다.

이 문제를 해결하는 방법은 간단합니다. Notepad ++로 .gitignore 파일을 연 후 다음을 수행하십시오.

편집> EOL 변환> Windows 형식> 저장

다음에 Windows 기본 메모장으로 동일한 파일을 열면 모든 것이 올바르게 포맷되어야합니다. 시도해보고 이것이 효과가 있는지 확인하십시오.


1

또한 의견은 자체 줄에 있어야합니다. 입장 후에는 넣을 수 없습니다. 그래서 이것은 작동하지 않습니다 :

/node_modules  # DON'T COMMENT HERE (since nullifies entire line)

그러나 이것은 효과가 있습니다.

# fine to comment here
/node_modules

0

합니까 git reset --hard누군가를 위해 일을? 나는 이것이 좋은 해결책이라고 말하지 않고 처음 시도했을 때 효과가있는 것처럼 보였다.


위의 내 의견을 무시하십시오. 직장에서 누군가 Git에서 너무 잘못하여 폴더가 중복되어 꽤 오랫동안 인식하지 못했습니다. 감사.
user1889992

0

나는 dockerignore를 편집하는 큰 실수를했고 올바른 무시 파일을 찾은 후에 훌륭하게 일했습니다 : p


0

이것이 내 질문을 추가하는 것은 인기있는 질문입니다.

내가 시도한 콤보에 관계없이 .history 디렉토리를 .gitignore 안에 넣을 수 없었습니다. Windows는 저장할 때마다 새 파일을 계속 생성하므로 전혀보고 싶지 않습니다.

여기에 이미지 설명을 입력하십시오

그러나 나는 이것이 내 컴퓨터의 개인 개발 환경이라는 것을 깨달았습니다. .history 또는 .vscode와 같은 것은 나에게 고유하므로 모든 IDE 또는 OS를 사용하여 모든 .gitignore 항목을 포함하면 이상합니다.

그래서 이것은 나를 위해 일했습니다. .git / info / exclude에 ".history"를 추가하십시오.

echo ".history" >> .git/info/exclude
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.