git update-index --asume-unchanged는“치명적인 파일을 표시 할 수 없습니다”를 반환합니다


133

게시물 의 OP와 동일한 문제가 있지만 정답으로 표시된 답변을 이해하지 못합니다 (상황을 해결하는 방법을 설명하지 못합니다)

나는 이것을 하고이 오류를 얻는다 :

$ git update-index --assume-unchanged web.config
fatal: Unable to mark file web.config
  1. 파일이 저장소에 추가되었습니다

  2. 에 없습니다 .git/info/exclude

  3. 들어 있지 .gitignore않지만 (그렇지만 가져갔습니다.)를 사용하여 web.config를 추가 git add -f web.config하고 커밋 한 다음 해당 변경 사항을 리포지토리에 푸시했습니다.

  4. 내가 힘내 ls 파일을 할 때 -o 그것은 없다

그래서 어떻게 고칠 수 있습니까?


1
참조 된 질문에서 허용 된 답변을 다시 읽으십시오 git ls-files -o. 의 출력에 나타나지 않아야합니다 . 그렇다면 리포지토리에 없습니다.
eckes

내 오타, 그것은 목록에 없으며, 가장 확실하게 레포에 있습니다
Karen

답변:


108

나는 당신과 같은 문제를 겪고 있었고 위에서 언급 한 것과 동일한 4 단계를 밟았으며 동일한 결과를 얻었습니다. 여기에는 실행시 내 파일이 나열되었다는 사실이 포함되었습니다 git ls-files -o. 그러나 내 경우에는 또한 실행할 git update-index --assume-unchanged때 나열되지 않은 파일에 대해 실행 을 시도했지만 ls-files -o여전히 동일한 오류 " fatal: Unable to mark file"가 표시되었습니다.

아마도 버그라고 생각하고 최신 버전의 git을 다운로드했지만 도움이되지 않았습니다.

마지막으로 깨달은 것은 이 명령이 대소 문자를 구분 한다는 것입니다 ! 여기에는 전체 경로와 파일 이름이 포함됩니다. 적절한 경로로 전체 경로가 지정되도록 디렉토리 경로를 업데이트 한 후 명령이 제대로 실행되었습니다.

이것은 Git for Windows와 관련이 있으므로 결과는 다른 플랫폼에 따라 다를 수 있습니다.


4
너무 감사합니다! 이것은 효과가 있었다! 이전에 모두 소문자를 사용하거나 폴더로 cd 한 다음이 명령을 사용하려고했다고 생각합니다.
Karen

파일이 변경되면 잘못된 것입니다. 이 명령은 사용자가 파일을 변경했는지 여부를 감지하기 위해 파일을 지정하는주기를 낭비 할 필요가 없다는 것을 Git에게 약속합니다 (느린 파일 시스템의 경우 ;-). 결국 Git 명령 중 하나가 표시되고 놀라게 될 것입니다. 이를 명확히하기 위해 설명서가 업데이트되고 있습니다.
Philip Oakley

1
고마워, 이것은 프로젝트에서 나쁜 쉘 스크립트를 발견하는 데 간접적으로 도움이되었습니다. 경로가 없으면 실패합니다! :)
uchuugaka

또한 버전없는 파일에는이 명령이 작동하지 않습니다. 저장소에 존재하지 않는 파일이 있으면 .gitignore에서 무시할 수 있으며 소년은 이것을 잘못 입력한다고 생각하지만 바보 같은 사람에게 도움이 될 수 있다고 생각합니다. :)
Jesse Ivy

CD에서 대소 문자가 일치하지 않는 Windows 셸을 사용하는 경우 일부 주석에서 암시 한 내용을 명확히하기 위해이 오류가 발생합니다. git에 파일의 전체 경로를 지정하거나 (올바른 대소 문자로) cd를 다시 올린 후 다시 내리십시오 (다시 모든 단계에서 올바른 대소 문자로).
dlf

54

Mac에서도 같은 문제가 발생했습니다. 대소 문자 구분은 나에게 문제가되지 않았습니다. 문제는 먼저 자식을 재설정해야했습니다.

문제:

 git update-index --assume-unchanged index.php
 fatal: Unable to mark file index.php

해결책:

git reset HEAD
Unstaged changes after reset:
M   index.php
git update-index --assume-unchanged index.php

2
Mac에서도 동일한 문제가 발생하며 제안 된 해결 방법 중 어느 것도 나를 위해 일하지 않았습니다. 어떤 생각? 내 컴퓨터에서만 디렉토리 추적을 일시적으로 중지하려고하는데 디렉토리 이름은 intellij_idea_project_files /입니다. 분명히이 디렉토리의 모든 파일은 하나를 제외하고 올바르게 표시되었으며 my_project_name.iml입니다.
Javad Sadeqzadeh

1
같은 문제가 있었고 이것은 대소 문자를 구분하는 것이 아니라 나를 위해 일한 솔루션입니다.
CesarPim

나는 또한 Mac에 있고 나를 위해 "솔루션"은 파일을 삭제하는 것이 었습니다. (나는 이것을 답변으로 게시 할 것이지만 나중에 어떤 일이 일어 났는지 확실하지 않습니다.) 이상한 일이 발생했습니다. 힘내 파일이 변경되었다고 말하고 싶었습니다 --skip-worktree. 실행하여 로컬 변경 사항을 제거 git restore .했지만 건너 뛰기는 여전히 오류를 일으켰습니다. 마지막으로 파일을 삭제하려고했습니다. 놀랍게도, 자식은 변화가 있다고 말하지 않았습니다. git이 그것을 추적하고 있기 때문에 분명히 펑키 한 일이 일어났습니다. 그리고 나는 그것을 확실히 삭제했으며 그것이 변경이라고 말하지 않았습니다.
Captain Man

25

필자의 경우, 내가 표시하고있는 트리는 디렉토리였으며 파일은 아니었고 이름 뒤에 슬래시가 누락되었습니다.

잘못된-

git update-index --assume-unchanged directory-name

수정-

git update-index --assume-unchanged directory-name/

끝에 슬래시 (/)를 적어 둡니다.


1
고마워요,하지만 이렇게하면 "path directory-name / 경로를 무시합니다"
damian

@damian 상위 디렉토리 대신 전체 파일 경로를 지정하십시오.
Nahid

6

치명적 : 파일 Localization / el-GR.js를 표시 할 수 없습니다

당신이 할 수있는 일은 :

  1. 로컬에 파일이있는 올바른 경로로 이동하십시오 (GITBASH에서)
  2. 색인 업데이트 $git update-index --assume-unchanged <file name>

이것은 나를 도왔다! :)


2
$ git update-index --assume-unchanged ./.idea/vcs.xml fatal: Unable to mark file .idea/vcs.xml $ cd .idea git update-index --assume-unchanged .고마워요!
AVProgrammer

4

경로에 공백이 있으면 케이싱 권한이 있어도이 오류가 발생할 수 있습니다.

"치명적인"오류가 발생합니다.

git update-index --assume-unchanged code/Solution Files/WebEssentials-Settings-json

문제를 해결하려면 경로 주위에 따옴표를 추가하십시오.

git update-index --assume-unchanged "code/Solution Files/WebEssentials-Settings-json"

내 경우에는 / 뒤로했다.
Erik Bergstedt

4

내 문제는 재귀 적이라고 가정하고 와일드 카드로 명령을 시도했지만 그렇지 않았습니다.

그래서 내가 한 일은

$ git reset HEAD
Unstaged changes after reset: 
M   .gradle/1.9/taskArtifacts/cache.properties.lock
M   .gradle/1.9/taskArtifacts/fileHashes.bin
M   .gradle/1.9/taskArtifacts/fileSnapshots.bin
M   .gradle/1.9/taskArtifacts/outputFileStates.bin
M   .gradle/1.9/taskArtifacts/taskArtifacts.bin

실행

$ git update-index --assume-unchanged .gradle/1.9/taskArtifacts/*

그때 나를 위해 일하고 OP와 내 문제가 발생하지 않았습니다.


4

* .orig 파일의 추적을 해제하려고 할 때이 문제가 발생했습니다.

이것이 내가 그들을 추적 해제하기 위해 한 것입니다.

$git reset -- *.orig

그래도 작동하지 않으면 :

$git clean -fd

5
이 명령으로 파일이 삭제된다고 알리지 않고 명령을 실행하도록 요청하는 것은 위험합니다. $ git clean -fd
HS Rathore

4

git repo에 파일을 추가하지 않으면 파일이 git repo에 추가되었는지 확인한 다음 작동합니다.


3

--assume-unchanged느린 파일 시스템에 관한 것이므로 사용자는 Git이 변경되지 않은 것으로 가정 할 수 있기 때문에 Git 이이 파일을 확인할 필요가 없다고 약속합니다. 그러나 일부 명령은 여전히``놀람 ''을 확인하고 생성합니다!

변경된 파일에는 사용하지 마십시오.

그 소식을 전하는 사람이되어 죄송합니다 (문서를 변경하는 과정에 패치가 있습니다).


1
그렇다면 파일을 어떻게 업데이트하여 '추적하지 않음'으로 표시해야합니까?
javadba

참조 @javadba stackoverflow.com/a/6964492/717355 '자식 RM --cached 파일 이름'
필립 오클리

thx-그것에 찬성 : 나는 실제로 여기에 게시 한 후에 그것을 사용했습니다. 공장.
javadba

참고 git rm --cached filename다른 사람이 끌어 파일 삭제
라이언 테일러

@RyanTaylor 예, 사용자는 자신의 명령이 말하는 것을 인식하는 것이 중요합니다. '추적 중지, 내 개정판에서 제거'입니다. 관리자의 최신 견해와 새로운 패치를 읽어보십시오 .. public-inbox.org/git/20161101210448.4692-1-philipoakley@iee.org/…
Philip Oakley

3

제 경우에는 위의 방법 중 하나를 사용하려고했지만 운이 없습니다.

여러 번 시도한 후에 색인을 생성 할 파일을 추가하려고했습니다.

git add myfile.php

힘내이 행동을 거부했지만 그는 강제로 나에게 조언했다.

git add myfile.php -f

그리고 그것은 나를 위해 일했습니다.


2

"web.config"가 체크인되어 있는지 확인하십시오.

그렇지 않으면이 오류 메시지가 나타납니다.


1

누군가에게 유용 할 수 있습니다. 나는 같은 문제가 있었고 구문 문제가없고 이름이 공백이없고 경로 문제가 없으며 git reset 명령이 작동하지 않았습니다. 아파치 www 안의 폴더에서 커밋하고 있었고 아파치 서비스가 중지되었습니다. 아파치 서비스를 다시 시작하고 오류가 사라졌습니다.


1

이 명령을 사용하는 일반적인 실수 중 하나는 추적되지 않은 파일이거나 이미 git에 의해 무시 된 파일이라고 가정하는 것입니다.

먼저 다음을 실행하여 파일을 추적하십시오.

git ls-files | grep relative_path/to/file

파일이 표시되지 않으면 먼저 파일을 추가해야합니다.

git add relative_path/to/file

파일이 표시되거나 해당 파일을 git에 이미 추가 한 경우 git assume 명령을 정상적으로 실행할 수 있습니다.

git update-index --skip-worktree relative_path/to/file

또는 폴더

git update-index --skip-worktree relative_path/to/folder/

다음을 실행하여 파일이 무시되었다고 가정 할 수 있습니다

git ls-files -v | grep ^S

S 문자는 건너 뛴 파일을 나타냅니다.


0

미래의 모든 방문객들에게. 위의 어느 것도 내 문제를 해결하지 못했습니다. 내가 깨달은 것은 .gitignore파일이 올바른 디렉토리에 있어야한다는 것입니다. 필자의 경우 .gitignore응용 프로그램의 루트 디렉토리 로 이동 하면 문제가 해결되었습니다.


0

표시 할 파일이 존재하고 철자가 올바른지, 특히 파일 경로 및 파일 구분 기호를 확인하십시오. Windows 시스템과 Linux 시스템의 파일 구분 기호는 서로 다른 방향입니다.


1
틀린 것은 아니지만이 답변은 실제로 질문에 아무것도 추가하지 않습니다. 귀하의 모든 제안은 이미 기존 답변에 제기되었습니다.
Matt

0

파일을 이미 .gitignore에 커밋하고 푸시 또는 풀했기 때문에 이것이 작동하지 않는 것으로 나타났습니다. 푸시 만하면되고 파일을 로컬로 수정하더라도 후속 커밋에서 파일을 무시해야합니다.


0

Windows에서 cygwin과 동일한 문제가있었습니다. 전체 파일 경로 제공

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