힘내고 불쾌한“오류 : 기존 정보 / 참조를 치명적으로 잠글 수 없음”


360

더 나은 코드에서 원격 git 저장소에서 복제 한 후 커밋하고 푸시하려고했습니다.

git push origin master

다음과 관련된 오류 :

오류 : 기존 정보 / 참조를 잠글 수 없음
치명적 : git-http-push failed

이 사례는 이미 존재하는 저장소와 관련이 있습니다.

내가 전에 한 일은 :

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. 데이터 변경
  6. git commit

'bettercodes'에서 git log에 액세스 할 수 없습니다.

Windows를 사용하고 있습니다. 자세한 오류는 다음과 같습니다.

C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed

전에 복제 한 다음 코드를 변경하고 커밋했습니다.


운이 없다. 같은 오류가 다시 발생한다.
AnnD

가능한 두 가지 이유 : a) 다른 git 인스턴스가 실행 중입니다 (모든 git 프로세스 종료 또는 재부팅) b) .git 폴더가 관리자로 생성되었습니다 (작업에 대한 관리자 명령 줄 시도)
FractalSpace

나를 위해 git fetchbefore 호출하여 오류를 해결했습니다 git pull.
Levi Fuller

1
그 오류 불쾌
RobW

답변:


682

나를 위해 이것은 효과가 있었다 :

git remote prune origin

이 답변은 많은 사람들에게 도움이 될 것 같으므로 여기서 실제로 일어나는 일을 조금 파헤 쳤습니다. 이 작업은 폴더에서 원격 분기에 대한 참조를 제거하는 것 .git/refs/remotes/origin입니다. 따라서 이것은 로컬 브랜치에 영향을 미치지 않으며 원격으로 아무것도 변경하지 않지만 원격 브랜치에 대한 로컬 참조를 업데이트합니다. 경우에 따라 이러한 참조는 Git이 올바르게 처리 할 수없는 데이터를 포함 할 수 있습니다.


1
나는 약간의 배경 정보를 추가했지만, 나는 이것이 왜 그리고 어떻게 작동하는지 정확히 모른다고 정직하게 말해야한다 :)
arno_v

1
git remote prune origin 작동합니다. 그러나 .git / refs / remotes / origin의 모든 참조를 삭제했습니다.
Isuru Madusanka

2
이것은 정확하게 git제안하는 것이지만, 명령은 리모콘에 무언가를하는 것처럼 들리기 때문에 그것을 꺼려했습니다.
계정을 던져 던져

4
나는 달렸다git gc --prune=now
Stanley Mohlala

9
이것은 내가 한동안 실행 한 SCARIEST git cmd입니다. (PS : 효과가있었습니다)

456

당신은 시도하고 싶습니다 :

git gc --prune=now

참조 https://www.kernel.org/pub/software/scm/git/docs/git-gc.html를


--prune = 현재 --prune = all과 동일합니까? 그렇다면 문서에 고정되지 않은 물체가 손실 될 수 있음을 경고합니다. 고정되지 않은 개체가있는 경우 잘라 내기 전에 조정해야합니다.
Assaf Israel

3
생명의 은인, 감사합니다. git pull비슷한 오류 메시지가 나타납니다.
Phil Brubaker

4
가져 오기에서 "git error : can not lock ref"예외에 도움이되었습니다. 고마워요!
Alexander

9
이것은 나를 위해 일했습니다. 그러나 git원격을 다루는 명령을 사용할 때마다 동일한 명령을 계속 실행해야했습니다 . git remote prune origin문제를 한 번에 해결했습니다.
Keyur Golani 2018 년

내 하루를 구했다! 고마워 :)
Abhishek Gautam

188

내 git remote (bitbucket.org)가 IP 주소를 변경했을 때 나에게 이런 일이 발생했습니다. 빠른 해결책은 리모컨을 제거했다가 다시 추가하는 것이었지만 모든 것이 예상대로 작동했습니다. git에서 리모컨을 제거하고 다시 추가하는 방법에 익숙하지 않은 경우 다음 단계를 수행하십시오.

  1. 기존 리모컨의 SSH 자식 URL을 복사하십시오. 다음 명령을 사용하여 터미널에 인쇄 할 수 있습니다.

    git remote -v

다음과 같은 내용이 인쇄됩니다.

 origin git@server-address.org:account-name/repo-name.git (fetch)
 origin git@server-address.org:account-name/repo-name.git (push)
  1. 로컬 git repo에서 리모컨을 제거하십시오.

    git remote rm origin

  2. 리모컨을 로컬 리포지토리에 다시 추가하십시오.

    git remote add origin git@server-address.org:account-name/repo-name.git


8
git gc, git prune, rm 'lock with lock error', git update server info 등과 같은 다른 모든 것을 시도했습니다.이 답변 만 저에게 효과적이었습니다. 때로는 Windows 재부팅, 재부팅과 같으며 작동합니다. 여기서도 마찬가지로 repo를 제거하고 다시 추가하면 모든 것이 잘 진행됩니다.)
Marquinho Peli

12
위의 절차 후에, 나는 또한 git에게 다음과 같이 원격 브랜치를 다시 추적하도록 git branch -u origin/master
지시

이것은 .git / config에서 모든 원격 추적 정보를 날려 버렸으며 실제로 작동하지 않았습니다.
ThomasMcLeod 2018 년

이것은 나를 위해 일했다. 다른 사람들은 모두 효과가 없었습니다.
dondrzzy

42

실행 명령이 git update-ref -d refs/heads/origin/branch수정되었습니다.


4
내 원격 지사 심판이 약간 git update-ref -d refs/remotes/origin/my_branch
달랐지만

이것은 나를 위해 일했습니다. 이것은 대소 문자를 구분하는 문제인 것 같습니다. 같은 이름을 가진 두 개의 브랜치가 다른 git 사용자에 의해 원점으로 푸시되었습니다. 하나는 모두 소문자이고 다른 하나는 제목입니다.
th3uiguy

24

나는 다음을 수행하여 이것을 고쳤다.

git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull

이것은 로컬 및 원격 브랜치가 정렬되고 심판 오류가 치명적이지 않다고 가정합니다.


12

업스트림 브랜치와 비슷한 이름의 브랜치에 있었기 때문에이 문제가 발생했습니다. 즉, 상류 지점이 호출 example-branch되었고 내 로컬 지점이 호출되었습니다 example-branch/backend. 솔루션은 다음과 같이 내 로컬 지점의 이름을 변경했습니다.

git branch -m <new name goes here>

11

이것은 아마도 지금까지 해결되었을 것입니다. 그러나 여기 나를 위해 일한 것이 있습니다.

  1. 위치:

    • 잠긴 저장소가 서버 측에있는 경우 :

      1. 서버의 git 저장소에 ssh하십시오.
      2. 저장소를 수정하고 서버의 저장소를 탐색 할 권한이있는 사용자로 로그인하십시오.
    • 잠긴 저장소가 로컬 전용 인 경우 :

      1. git 콘솔을 열고 저장소 디렉토리로 이동하십시오.
      2. 이 명령을 실행하십시오 :

        git update-server-info
        
  2. 필요한 경우 (원격 또는 로컬) 저장소에 대한 권한을 수정하십시오. 내 경우에는 내가해야했다 chmod777chownapache:apache

  3. 로컬 저장소에서 다시 푸시하십시오.

    git push
    

10

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

  1. 없애다 .git/logs/refs/remotes/origin/branch
  2. 없애다 .git/refs/remotes/origin/branch
  3. 운영 git gc --prune=now

1
매력처럼 일했다. 파일 / 폴더 이름 분기에 문제가있는 사람은 실제로 모든 분기 이름 파일 / 폴더를 참조하는 것입니다. 이게 도움이 되길 바란다!
Ankit Kesharwani

7

이것이 나를 위해 작동하는 방법입니다.

  1. 서버에서 Apache DAV 잠금 파일을 찾습니다 (예 : / var / lock / apache2 / DAVlock).
  2. 그것을 삭제
  3. 웹 서버에 대한 쓰기 권한으로 다시 작성
  4. 웹 서버를 다시 시작하십시오

더 빠른 대안 :

  1. 서버에서 Apache DAV 잠금 파일을 찾습니다 (예 : / var / lock / apache2 / DAVlock).
  2. 파일을 비 웁니다 : cat /dev/null > /var/lock/apache2/DAVlock
  3. 웹 서버를 다시 시작하십시오

이것은 내 문제였다. 게시물 주셔서 감사합니다. 제거 및 권한을 모두 한 번에 실행했습니다. #> rm DAVLock; touch DAVLock; chown www-data.www-data DAVLock; chmod 755 DAVLock; service apache2 restart
djneely

6

이것은 권한 문제처럼 들립니다. 별도의 권한으로 실행되는 두 개의 창이 열려있을 수 있습니까? 아마도 .git 폴더의 소유권을 확인하십시오.

아마도 뛰어난 파일 잠금이 열려 있는지 확인하거나 lsof를 사용하여 확인하거나 OS에 해당하는 파일을 확인하십시오.


3

필자의 경우 브랜치는 하위 디렉토리로 이동했으며 디렉토리는 브랜치라고 불렀습니다. 힘내는 그것에 혼란 스러웠다. 로컬 브랜치를 삭제하면 (SourceTree에서 마우스 오른쪽 버튼으로 삭제를 클릭하면) 모든 것이 정상적으로 작동했습니다.


3

이 메시지를 얻은 후 checkout 명령을 수행하고 다음 메시지가 표시되었습니다.

Your branch is based on 'origin/myBranch', but the upstream is gone.
  (use "git branch --unset-upstream" to fixup)

이 명령을 실행 한 후 다시 정상으로 돌아 왔습니다.



1

사용자 (실제로 git 프로세스)가 파일에 액세스 할 수 있고이 .git/info/refs파일이 다른 프로세스에 의해 잠겨 있지 않은지 확인하십시오 .


2
어떻게 확인합니까?
Iulian Onofrei

1

예를 들어 origin-branch1과 같이 이전 분기의 이름이 포함 된 새 기능 분기를 만들려고 할 때이 문제가 발생하여 branch1 기능을 만들고 싶었습니다. 그것은 possibble가 아니었지만 branch1 / feature는 이미있었습니다.


1

필자의 경우 원격에서 제거 된 이전 태그를 수동으로 삭제해야했습니다.


1

내 경우에는 이미 만든 지점 이름과 연결되었습니다.

이 문제를 해결하기 위해 다음과 같이 특정 이름이 존재하지 않는 지점을 만들었습니다.

git checkout -b some_unknown_branch

그런 다음 다른 모든 분기 (활성화되지 않음)는 불필요한 쓰레기이기 때문에 지 웠습니다.

git branch | grep -v \* | grep -v master | xargs git branch -D

그런 다음 현재 지점의 이름을 원하는 이름으로 바꿉니다.

git checkout -m my_desired_branch_name

0

bettercodes.org의 경우, 솔루션은보다 시적입니다. 유일한 문제는 프로젝트 멤버에게 할당 된 권한에있을 수 있습니다. 단순 회원에게는 쓰기 권한이 없습니다! 중재자 또는 관리자 권한이 있는지 확인하십시오. 물론 이것은 관리자가 프로젝트 설정에서 bettercodes.org에서 설정해야합니다.


0

git filter-branch많은 하위 디렉토리를 별도의 새로운 저장소로 분리 하려고 할 때이 오류가 발생 했습니다 ( 이 답변 에서처럼 ).

위의 모든 솔루션을 시도했지만 그중 아무것도 작동하지 않았습니다. 결국 새 브랜치에서 태그를 모두 보존 할 필요가 없으며 바로 실행했습니다.

git remote remove origin
git tag | xargs git tag -d
git gc --prune=now
git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- apps/AAA/ libs/xxx' --prune-empty -- --all
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.