힘내 '심각 : 새 인덱스 파일을 쓸 수 없습니다'


128

나는 이것에 대한 많은 다른 스레드를 보았지만 도움이되지 않습니다.

두 개의 JavaScript 파일이라는 매우 간단한 저장소가 있습니다. Macbook에 100GB 이상이 있습니다. 파일을 하위 디렉토리로 옮기고 로컬에서 변경 사항을 준비하려고하면 ...

치명적 : 새 색인 파일을 쓸 수 없습니다.

이것은 터미널에서 모든 작업을 수행하거나 SourceTree와 같은 GUI를 사용하는 경우 발생합니다. 또한 파일 중 하나가 잠기고 로그 오프했다가 다시 로그인 할 때까지 작업 디렉터리를 삭제할 수 없습니다.

왜 이런 일이 발생합니까? 잠금으로 인해 스테이징을 방해합니까? 그렇다면 OS X에서 문제 파일을 어떻게 / 어떻게 잠금 해제합니까 ?? 원격 저장소는 Google 코드입니다. 차이가 있다면 아직 원격으로 푸시하지는 않습니다. 모든 것이 현지입니다.


대신 수퍼 유저 로 이동해야하는지 확실 하지 않습니까?
MMM 2011

아마도 액세스 권한 문제 일 것입니다 (git을 실행하는 사용자는 모든 저장소에 대한 쓰기 권한이 없습니다)
Nevik Rehnel 2013

SO와 SU에 이것에 대한 스레드가 있습니다. 나는 질문이 어느 쪽에서도 똑같이 잘 작동한다고 생각합니다. Nevik, 저장소에 대한 권한은 ./git폴더를 포함하여 777 입니다.
Jeff

이 문제가 언제 표시됩니까? "git mv"또는 "git add"를 할 때입니까?
Mayur Nagekar 2014 년

답변:


221

제 경우에는 디스크 공간이 부족하여 공간을 확보하기 위해 하드 드라이브에서 파일을 삭제해야했습니다.


64

지난 며칠 동안 동일한 문제가 발생했습니다. 기본적으로 내 지식없이 전체 저장소가 새 파일 시스템으로 이동되었으며 git status를 실행하려고 할 때 저장소의 모든 파일이 삭제되었다고 갑자기보고했습니다.

가능한 해결책

그래서 많은 Google 수색 후 다음을 시도했습니다.

  • .git permssions 변경 (동일한 문제)
  • .git / index 권한 변경 (동일한 문제)
  • git add-ing all the changes to commit (동일한 문제)
  • git rm-ing 파일 이름이 너무 긴 오류를보고했기 때문에 삭제 된 파일 (동일한 문제)
  • git reset (soft | Head | Hard) (동일한 문제)
  • git clean (동일한 문제)
  • Windows 수비수 끄기 (동일한 문제)
  • git 업데이트 (동일한 문제)
  • 다른 git 클라이언트 (나는 gitbash 사용) (동일한 문제)
  • 커피 1 개 대신 2 잔 마시기 (동일 문제)

tl : dr-더러운 솔루션

문제를 해결 한 유일한 방법은 색인 파일을 복사하고 원본을 삭제하고 사본의 이름을 바꾸는 것입니다.

나는 그것이 실제로 '솔루션'이 아니라는 것을 알고 있지만 이제는 모든 파일 / 브랜치를 그대로 유지하면서 마술처럼 작동합니다. 이것이 왜 효과가 있는지 아는 사람이 있다면 말하십시오.


82
또 다른 원인을 찾았습니다. 디스크 공간이 부족할 수 있습니다.
lennartcl 2014

21
제 경우에는 Google 드라이브가 파일을 업로드 (백업)했고 프로세스 중에 잠겼습니다. 업로드가 완료되면 커밋이 작동했습니다.
Kristjan O.

3
Google 드라이브에 대한 팁을 주셔서 감사합니다. 나는 같은 문제가 있었지만 Dropbox를 사용했습니다.
hgolov

1
다시 시작이 저에게 효과적이었습니다. 절반이 비어있는 22TB 공유 드라이브에서 작업하므로 공간이 문제가되지 않았습니다.
Wayne F. Kaskie

1
나를 위해 일한 당신의 "더러운 솔루션"(이전 인덱스 파일에 반환, 다시 추가하고 모든 그 이후 변경 재 최선을 다하고)
trust_words을

19

제 경우에는 Dropbox 동기화를 일시 중지하여 문제를 해결했습니다.


17

Mac에서도 같은 문제가 발생했습니다. 파일 시스템 ACL로 인해 발생한 것 같습니다. 시도 chmod -RN /path/to/repoACL을 취소 할 수 있습니다. 이렇게 한 후 변경 사항을 적용 할 수있었습니다. 색인 파일을 복사하는 트릭을 사용하여 원본을 삭제하고 복사본을 다시 이동하면 동일한 결과를 얻었습니다.


최근에 사용자 계정에 권한 문제가있는 경우이 문제가 발생할 수 있습니다. 제 경우에는 ACL에 문제가있는 것은 Active Directory 통합 문제였습니다.
kris

17

Google 드라이브 또는 Dropbox와 같은 일종의 온라인 동기화 서비스에 github 설정이있는 경우 github가 동일한 작업을 수행하려고 할 때 동기화 서비스가 파일 읽기 / 쓰기를 시도하므로 동기화를 비활성화하면 github가 작동하지 않습니다. 바르게.


이것은 나를 위해 일한 솔루션입니다. 감사!
Macondo

7

.git / index 파일이 다른 프로세스 (내 로컬 개발 웹 서버)에서 사용 중이라는 사실을 알게되었습니다. 프로세스를 종료 한 다음 작동했습니다.


6

Visual Studio Code를 닫으면 (내 경우에는 파일 저장에서 실행되는 자동 업 로더 백그라운드 작업이 있음) 문제가 해결되었습니다.

솔루션에 대한 크레딧 : 내 친구이자 동료 인 Arnel.


내 AngularJS와 응용 프로그램이 실행 어디 nodeJs 서버를 닫은 및 인덱스 잠금이 해제되었습니다
라두 Linu


6

제 경우 솔루션은 새 사용자에게 권한을 추가하는 것뿐이었습니다.

새 OS를 설치하고 저장소를 옮겼을 때 정확한 오류가 표시되었습니다. 루트 폴더를 선택한 다음 사용자를 인증하여 모든 것을 확인했습니다. 여기에 이미지 설명 입력


3

.git 폴더의 모든 파일에 ACL (어쨌든)을 첨부했습니다.

ls -le.git 폴더에서 확인하십시오 .

chmod -N(폴더 / 파일의 경우) 또는 chmod -RN(재귀 적)을 사용 하여 ACL을 제거 할 수 있습니다.


3

Google 백업 및 동기화와 같은 일부 백그라운드 백업 솔루션이 색인 파일에 대한 액세스를 차단한다고 생각합니다. 나는 응용 프로그램을 닫았고 Sourcetree에는 전혀 문제가 없었습니다. Dropbox도 같은 역할을하는 것 같습니다 (@tonymayoral).


2

제 경우에는 동시 실행 EGit이었습니다. 이클립스를 다시 시작하면 평소와 같이 작동합니다.


질문은 '왜 오류 메시지가 발생합니까?'입니다. 이 답변은 또 다른 잠재적 원인을 설명합니다.
robm

2

Windows 상자를 사용하는 경우 소스 트리이든 git 터미널이든 사용중인 프로그램이 관리자 권한으로 실행 중인지 확인하십시오. 똑같은 오류 메시지가 나타납니다. 관리자 권한으로 실행할 프로그램을 마우스 오른쪽 버튼으로 클릭하거나 항상 관리자 권한으로 실행하도록 속성을 변경할 수 있습니다.


2

충분한 공간이없는 것이 문제입니다. 정리하고 다시 시도하십시오.


2

나는 같은 문제가 있었다. 컴퓨터를 다시 시작했는데 문제가 해결되었습니다.


1

'git add'를 시도해 보셨습니까? . 모든 것이 변할까요? (불필요한 추가 파일은 git reset HEAD로 제거 할 수 있습니다)


1

오류 메시지 fatal: Unable to write new index file는 새 콘텐츠를 git 인덱스 파일에 쓸 수 없음을 의미합니다 .git\index( git 인덱스에 대한 자세한 내용은 여기 를 참조 하십시오 ). 이 질문에 대한 모든 답변을 검토 한 후 다음과 같은 근본 원인을 요약합니다.

  • 새 콘텐츠의 크기가 디스크 사용 가능한 용량을 초과합니다. ( 해결책 : 디스크 공간 정리)
  • 사용자는이 파일에 대한 액세스 권한이 없습니다. ( 해결 방법 : 권한 부여)
  • 사용자는 권한이 있지만 .git\index다른 사용자 또는 프로세스에 의해 잠겨 있습니다. ( 해결 방법 : 파일 잠금 해제)

Windows에서 파일 또는 폴더를 잠그는 프로세스 찾기 링크 는 특정 파일을 잠그는 프로세스를 찾기 위해 다음 접근 방식을 지정합니다.

SysInternals Process Explorer-찾기> 핸들 또는 DLL 찾기로 이동합니다. "Handle or DLL substring :"텍스트 상자에 파일 경로 (예 : "C : \ path \ to \ file.txt")를 입력하고 "검색"을 클릭합니다. 해당 파일에 대한 열린 핸들이있는 모든 프로세스가 나열되어야합니다.

위의 방법을 사용하여 잠긴 프로세스를 찾은 .git\index다음 잠금 실행 파일을 중지합니다. 이것은 잠금을 해제 .git\index합니다.

예를 들어, Process Explorer 검색 은에 .git\index의해 잠겨 있음을 표시 vmware-vmx.exe합니다. VMWare Player 가상 머신 (공유 폴더를 통해 git repo에 액세스)을 일시 중지하면 문제가 해결되었습니다.


이 링크가 질문에 답할 수 있지만 여기에 답변의 필수 부분을 포함하고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 무효화 될 수 있습니다. - 리뷰에서
Al Sweigart 2017-06-15

@Al, 귀하의 제안에 따라 답변을 업데이트했습니다.
Fan

0

리베이스 중에 이것을 받으면 :

이는 백업 소프트웨어, 바이러스 백신, IDE 또는 기타 git 클라이언트와 같은 일부 소프트웨어가 리포지토리의 인덱스 파일을 잠그기 때문에 발생했을 가능성이 높습니다.

대부분의 경우 잠금은 잠깐 동안 만 이루어 지므로 타이밍과 불운으로 인해 발생합니다.

그러나 git rebase --continue다음 명령이 빈 커밋에 대해 불평합니다.

The previous cherry-pick is now empty, possibly due to conflict resolution.
If you wish to commit it anyway, use:

    git commit --allow-empty

이 문제를 해결하려면 실행 git reset하고 git rebase --continue다시 시도 하십시오.


0

문제 : git에서 일부 수정 된 파일을 체크 아웃 할 때이 오류가 발생했습니다. 두 명의 사용자 ABC와 XYZ가있었습니다. 파일에 ABC의 uid : gid가 있지만 git 액세스 권한이 없으며 동일한 파일을 체크 아웃하려고합니다.

내가 시도한 해결책 : XYZ가 자식 액세스 권한을 가지고 있고, sudo로 파일을 확인하려고 시도했는데 작동했습니다 .. !!


0

나를 위해 일한 것은 다음과 같습니다.

문맥:

  1. 서버에서 프로젝트 빌드

  2. git status 반환 HEAD detached at <commit-SHA>

  3. 로컬에서 수행 한 작업이 무엇이든이 오류가 발생했습니다. 더 구체적으로:

    • git checkout
    • git reset HEAD --hard

해결책

  1. 단순히 제거 된 파일 <work-dir>/.git/index.
  2. A git status는 projet의 모든 파일이 추적되지 않음을 나타냅니다 (놀랍지 않습니다).
  3. git reset HEAD --hard
  4. HEAD detached at <commit-SHA>할 때로 돌아가 git status지만 다음을 수행 할 수 있어야합니다.
  5. git checkout <some-branch>

그리고 당신은 궤도로 돌아 왔습니다!

!! 중요 !!

이것은 내가 "merly"건물이기 때문에 작동합니다. 코드에 대한 귀중한 수정은 수행되지 않았습니다. 실제로 "개발 시간"에있는 경우 먼저 작업을 저장하거나 다른 방법을 사용하는 것이 좋습니다.

도움이 되길 바랍니다 :).


0

Windows에서 GitExtensions를 사용 하여이 문제가 발생했습니다. 저장소가 포함 된 폴더에 대한 현재 사용자 (나)에게 전체 권한을 부여하여 수정되었습니다.

또 다른 시간에는 Git Extensions에서 오류가 발생했지만 Visual Studio 2015에서 동일한 파일을 커밋 할 수있었습니다.

또 다른 시간에는 .git 폴더에서 "index"파일을 삭제해야했습니다.


0

제 경우는 약간 흥미 롭습니다.

특정 커밋을 확인하기 위해 git log를 실행 한 다음 제대로 종료하지 않았으며 ctrl + c를 눌러 종료합니다.

그런 다음 색인이 잠긴 것 같습니다. 그래서 git log를 다시 실행 한 다음 Q를 눌러 종료합니다.

문제가 해결되었습니다. :)


0

제 경우에는 nodemon파일 시스템의 변경 사항을 감시 하는 인스턴스 였습니다 .

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