파일 연결 해제 실패


169

git pull을 시도하고 있는데 다음과 같은 오류가 발생합니다.

'lib / xxx.jar'파일 연결 해제에 실패했습니다. 다시 시도해야합니까? (y / n)

y 또는 n을 선택하더라도 당기거나 밀 수있는 상태가되지 않습니다.


해당 파일에 쓸 수있는 권한이 있는지 확인 했습니까?
Raphael Michel

1
올바른 실행 chmod및 / 또는 chown고 말했다 파일을.
Not_a_Golfer

나는 권리를 가져야한다. 그렇지 않으면 나는 그것을 질식시킬 것이다!
marko


답변:


204

그것은 일반적으로 프로세스가 여전히 특정 파일을 사용하고 있음을 의미합니다 (여전히 핸들이 있습니다)
(Windows에서는 ProcessExplorer해당 프로세스를 추적하는 데 능숙합니다)

다른 프로그램을 닫고 다시 시도하십시오 git pull.

GIT_ASK_YESNO변수에 대한 대안이 있습니다 .


2019 년 1 월 업데이트 :

Git 2.21 (2019 년 1 분기)에서는 " git gc"및 " git repack"가 필요없는 것으로 확인 된 열린 팩 파일을 닫지 않았으므로 열린 파일을 제거 할 수없는 플랫폼에서는 작동하지 않았기 때문에 훨씬 더 수정되어야 합니다.
이것은 수정되었습니다.

Johannes Schindelin ( )의 commit 5bdece0 (2018 년 12 월 15 일)을 참조하십시오 . ( Junio ​​C Hamano의해 병합 -- 커밋 5104f8f , 2019 년 1 월 18 일)dscho
gitster

gc/ repack: 필요할 때 릴리즈 팩

Windows에서 프로세스가 보유한 핸들이 여전히 있으면 파일을 제거하거나 이름을 바꿀 수 없습니다.
이를 해결하기 위해 close_all_packs()함수를 소개했습니다 .

더 이상 필요없는 팩을 제거하려는 git gc경우에 대비 하여 팩이 출시되기 직전에 릴리스되었습니다 gc.

그러나이 개발자 gc--aggressive옵션을 통해 모든 팩을 통합 할 때와 같이 팩을 버려야한다는 점을 잊었습니다 .

마찬가지로 git repack -d더 이상 사용되지 않는 팩을 삭제하려고하므로 모든 팩 핸들도 닫아야합니다.


2016 년 1 월 업데이트

Git 2.8 (2016 년 3 월)에서 수정되어야합니다 (아래 Git 2.19, 2018 년 3 분기 참조).

참조 d562102 커밋 , dcacb1b 커밋 , df617b5 커밋 , 0898c96 커밋 에 의해 (2016년 1월 13일) 요하네스 Schindelin을 ( dscho) .
(가 합병 - Junio C 하마노 gitster-3c80940 커밋 2016 26 일월)

fetch: 가비지 수집 전 릴리스 팩 파일

자동 gc'ing하기 전에 팩 파일을 다시 포장하고 가비지 수집해야 할 경우를 대비하여 팩 파일이 릴리스되었는지 확인해야합니다.

gc --auto종료하기 전에 " " 를 실행하는 많은 코드 경로는 유지 된 팩 파일을 매핑하고 파일 디스크립터를 열어 두었습니다. 열려있는 파일을 제거 할 수없는 시스템에는 적합하지 않았습니다.
이제 팩을 닫고 닫습니다.

git-for-widows문제 500을 해결 합니다.

새로운 접근 방식을 검증하는 데 사용테스트를 살펴보면 Git 2.8이 아직 나오지 않았기 때문에 가능한 해결 방법은 인위적으로 올리는 것 gc.autoPackLimit입니다.

git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value

git 2.8.4 (2016 년 6 월) 에는 문제 755 를 언급 하여 문제를 완화해야합니다 ( commit 2db0641 ).

자식 프로세스가 임시 파일 핸들을 상속받지 않도록하십시오


사실, git-for-windows문제 500 위에서 언급 한 정말 힘내 2.19, Q3 2018로 고정
"참조 - 파일의 링크 해제 힘내 .idx.pack(유일한 프로세스는이 파일에 대한 핸들을 소유 실패 git.exe) "


5
해당 jar 파일을 사용하여 실행중인 JVM이있을 수 있습니다.
Thorbjørn Ravn Andersen

2
제 경우에는 Skype였습니다. 이전에 파일을 다른 사람에게 전송했으며 일부는 아직 수락 또는 취소되지 않았습니다.
Vivek Kodira

6
Windows 탐색기가 범인이라는 것을 알았습니다. TortoiseGit의 아이콘 오버레이 또는 TGitCache 때문일 가능성이 큽니다. 열려있는 모든 폴더를 닫는 것은 트릭이지만 프로젝트 폴더가 열려 있으면 닫아야 할 수도 있습니다.
Allan Bogh

4
필자의 경우 오픈 솔루션에 바인딩되어 VS2013이었습니다.
BrotherOdin

2
Explorer.exe가 내 문제였습니다. TortoiseGit이 없습니다. 작업 관리자에서 explorer.exe를 죽이고 CTRL-ALT-DELETE => 작업 관리자 => 파일 => 새 작업 실행 => "explorer.exe"(따옴표없이)를 사용하여 새 파일을 생성했습니다.
joehanna

57

이것은 Windows 고유의 답변이므로 귀하와 관련이 없음을 알고 있습니다 ... 향후 검색 자의 이익을 위해 포함하고 있습니다.

제 경우에는 높지 않은 명령 줄에서 Git을 실행했기 때문입니다. "관리자 권한으로 실행"이 해결되었습니다.


4
풀을 할 때 Windows 7 에서이 문제가 발생하여 자식이 자동 팩을 수행했습니다. "idx"파일에 대해 불평했습니다. 그런 다음 관리자로 콘솔 창을 열고 git gc를 실행했는데 아무런 문제가 없었습니다. 따라서 이것은 좋은 해결책입니다.
grahamesd

1
git gc는 Windows 7에서 나를 위해 그것을했습니다 .b / c WebStorm에서 푸시를 수행하는 동안 cmder에서 git pull을 수행했습니다.
Alessandro

2
와. 감사합니다 NeilD. 그것은 나를 위해 그것을 고쳤다. GIT를 Windows로 조금 더 포팅하는 것이 좋습니다.
Martin Dobšík

글쎄 ... 6 년 전에 필요 했어. 지금? 누가 알아? ¯_ (ツ) _ / ¯
NeilD

30

저에게는 Visual Studio가 변경된 모든 파일을 가져 오기에서 다시로드하려고했기 때문입니다. Visual Studio를 새로 고친 다음를 실행하십시오 git gc.


3
저와 비슷합니다. git gc를 실행하기 전에 Eclipse를 닫아야했습니다.
alfoks

5

Windows 용 GitHub를 사용하는 Windows에서 실행할 때 쉘에 비슷한 오류가 발생했습니다 git gc.

Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)

GitHub GUI를 닫아서 해결했습니다.



2

Visual Studio 및 Rubymine을 닫았으며 오류가 다시 발생하지 않았습니다. 그들 중 하나는 범인이었습니다.



1

나는이 문제도 가지고 있지만 UE를 사용하여 일식 작업 공간을 구성하고 편집하기 때문에 그것이 UltraEdit이라는 것을 알았습니다.

UE가 특정 파일의 이전 버전을 처리했기 때문에 Git이 링크를 해제 할 수 없습니다.

UltraEdit을 닫은 후에도 문제가 다시 발생하지 않습니다.


1

이것은 필자의 경우 LESS 컴파일러 인 SimpLESS에 의해 발생했습니다. 시스템 트레이에서이를 닫아야합니다.


0

문제는 이러한 파일을 처리하는 프로그램이 있기 때문입니다. Unlocker를 사용하여 처리하는 프로그램을 찾아야한다고 제안합니다.

언 락커


0

메시지가 루프에 갇혀 있고 회신하여 지울 수있는 Windows XP 에서이 문제가 발생했습니다.

Git-GUI를 닫으면 갇힌 루프 발생이 해결되었습니다. (bash 쉘에서 git merge -i를 실행 중이었습니다.)

내 저장소의 파일 수가 많기 때문에 다른 일이 발생했을 수 있습니다. 주로 .cod 파일에서 발생했으며 나중에 버전 제어에서 제외합니다. (처음으로 추적 할 이유가 있습니다.) 원인은 Git이 파일 핸들을 사용하는 속도와 관련이 있다고 생각합니다.

이전의 두 포스터가 Windows를 언급했지만 다른 운영 체제에 문제가 있다고 말한 사람이 없기 때문에 대답을 통해 지울 수있는 문제가 Windows와 관련이 있는지 궁금합니다.


0

나는 PHPStorm을 열고 닫았으며 모든 것이 잘되었습니다.


0

나는 같은 문제가 있었고 Window Task Manager에서 모든 관련 프로그램을 닫았습니다. 그러나 여전히 작동하지 않았습니다. 흥미로운 부분은 "Git pull"대신 "Git rebase"를 실행하여 작동한다는 것입니다.


0

위의 답변 중 어느 것도 나를 위해 작동하지 않지만 강제 옵션으로 git gc 명령을 실행하면 문제가 해결됩니다.

'git gc --force'

[Windows 7, 관리자 권한으로 실행 => 명령 프롬프트]


0

관리 모드에서 명령 행 편집기를 실행하고 명령을 실행하십시오. 도움을주고 문제를 해결합니다. :)


0

제 경우에는 태그를 잘라내는 오래된 방법으로 문제가 발생했습니다. 원본을 설정 해제하여 해결했습니다.

git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'

그런 다음 이것을 추가하여 서버에서 삭제 된 분기를 정리하십시오.

git config --global fetch.pruneTags true

0

나는 같은 오류에 직면하여 일식을 닫고 파일이 사용되는 동안 다시 당겨서 해결했습니다.

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