Git 및 고약한 "오류: 기존 정보/참조를 잠글 수 없습니다"
리모트 git 저장소에서 (더 좋은 코드로) 복제한 후 몇 가지 변경을 가하고 커밋하여 푸시하려고 했습니다.
git push origin master
에러:
info: "기존 info/refs"를 잠글 수 없습니다.
: git-syslog-syslog failed.
이 경우 이미 존재하는 저장소와 관련이 있습니다.
내가 전에 한 일은,
git config –global http.sslVerify false
git init
git remote add [url]
git clone
- 데이터를 변경하다
git commit
'better codes'에서는 git 로그에 액세스할 수 없습니다.
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
이전에 복제하고 코드를 변경하여 커밋했습니다.
이 기능은 나에게 유효했다(리모트에서는 변경되지 않는다).
git remote prune origin
이 답변은 많은 사람들에게 도움이 될 것 같기 때문에 여기서 실제로 무슨 일이 일어나는지 조금 알아봤습니다. 폴더 가 삭제됩니다..git/refs/remotes/origin
.
따라서 이것은 로컬브런치에는 영향을 주지 않으며 리모트에는 아무것도 변경되지 않지만 리모트브런치에 대한 로컬 참조가 갱신됩니다.이러한 참조는 Git이 올바르게 처리할 수 없는 데이터를 포함할 수 있습니다.
다음 작업을 수행해 보십시오.
git gc --prune=now
https://www.kernel.org/pub/software/scm/git/docs/git-gc.html 를 참조해 주세요.
제 git remote(bitbucket.org)가 IP 주소를 변경했을 때 이 일이 일어났습니다.빠른 수정은 리모컨을 제거하고 다시 추가하는 것이었고 모든 것이 예상대로 작동했습니다.git에서 리모콘을 삭제하고 다시 추가하는 방법을 잘 모르면 다음 단계를 따르십시오.
기존 리모트의 SSH git 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)
로컬 git repo에서 리모콘을 삭제합니다.
git remote rm origin
로컬 리포트에 리모트를 다시 추가합니다.
git remote add origin git@server-address.org:account-name/repo-name.git
모든 Lock Ref 문제를 해결하기 위해 다음과 같이 했습니다.
git gc --prune=now
git remote prune origin
이것도 아마 네가 해야 할 일이야.
★★★의 상세git gc
명령어는 이쪽:https://git-scm.com/docs/git-gc
★★★의 상세git remote prune
여기: https://git-scm.com/docs/git-remote#Documentation/git-remote.txt-empruneem
명령어 " " " "git update-ref -d refs/heads/origin/branch
쳤습니니다다
나에게 효과가 있었던 것은, 다음과 같습니다.
- 하다.
.git/logs/refs/remotes/origin/branch
- 하다.
.git/refs/remotes/origin/branch
- 실행합니다.
git gc --prune=now
★★★의 상세git gc
명령어는 이쪽:https://git-scm.com/docs/git-gc
다음과 같이 수정했습니다.
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
이는 로컬 및 리모트브런치가 정렬되어 있어 refs 에러가 치명적이지 않다는 것을 전제로 하고 있습니다.
꺼내기 전에 로컬 변경 사항을 정리해야 합니다.명령어를 따르는 것이 문제 해결에 도움이 됩니다.
git remote prune origin
그 후
git pull origin develop
도움이 되었으면 좋겠네요!
, 는 '브런치라고 불리고 있었습니다.example-branch
지점은 '우리 동네 지부'라고 불렸습니다.example-branch/backend
솔루션에서는 로컬 지점의 이름을 다음과 같이 변경하고 있었습니다.
git branch -m <new name goes here>
이 문제는 지금쯤 해결되었을 겁니다.하지만 여기 나에게 효과가 있었던 것이 있다.
장소:
잠긴 저장소가 서버 측에 있는 경우:
- 서버상의 git 저장소로 ssh.
- 저장소를 수정할 수 있는 권한을 가진 사용자로 로그인하고 서버의 리포지토리로 이동합니다.
잠긴 저장소가 로컬에만 있는 경우:
- git 콘솔을 열고 저장소 디렉토리로 이동합니다.
다음 명령을 실행합니다.
git update-server-info
필요한 경우 (리모트 또는 로컬) 저장소에 대한 권한을 수정합니다.로서는 수
chmod
로로 합니다.777
★★★★★★★★★★★★★★★★★」chown
로로 합니다.apache:apache
로컬 저장소에서 다시 푸시를 시도합니다.
git push
Visual Studio Code(vscode, code)(및 기타 IDE)에 대한 참조로 사용됩니다.
는 명령을 명령하다.Git: Fetch (Prune)
대체 과 같습니다.git fetch --prune
그 후, IDE 전체를 재기동합니다.
BitBucket의 도킹 스테이션은 다음과 같습니다.
Prune과Git Prune의
Git Fetch --prune git Git Remote Prune?
git remote prune
★★★★★★★★★★★★★★★★★」git fetch --prune
리모트에 존재하지 않는 브랜치에 대한 참조를 삭제합니다.가 에 후하는 경우 매우 합니다.main
" " " "git fetch --prune
는 리모트에 접속하여 프루닝 전에 최신 리모트상태를 가져옵니다.입니다.git fetch --all && git remote prune
''git prune
령릅릅 릅키 릅릅키 릅릅키 릅키개요 섹션에서 설명한 바와 같이 git prune은 로컬에서 분리된 커밋을 삭제합니다.
권한 문제처럼 들리는데, 두 개의 창을 열어 별도의 권한으로 실행할 수 있습니까?.git 폴더의 소유권을 확인합니다.
미해결 파일 잠금이 열려 있는지 확인하거나 lsof를 사용하여 OS를 확인하거나 이와 동등한 기능을 사용할 수 있습니다.
난 이런 식이야
- 서버에서 Apache DAV 잠금 파일 검색(예: /var/lock/apache2/DAVlock)
- 삭제하다
- 웹 서버에 대한 쓰기 권한으로 재생성
- 웹 서버를 재부팅하다
더 빠른 대안:
- 서버에서 Apache DAV 잠금 파일 검색(예: /var/lock/apache2/DAVlock)
- 비웁니다.
cat /dev/null > /var/lock/apache2/DAVlock
- 웹 서버를 재부팅하다
제 경우 브랜치를 서브디렉토리로 이동해, 그 디렉토리를 브랜치로서 호출했습니다.Git은 그것에 혼란스러워했다.SourceTree에서 로컬브런치를 삭제했을 때(우클릭 삭제만으로) 모든 것이 정상적으로 동작했습니다.
제 경우 이 메시지를 받은 후 checkout 명령을 실행했더니 다음과 같은 메시지가 나타납니다.
Your branch is based on 'origin/myBranch', but the upstream is gone.
(use "git branch --unset-upstream" to fixup)
이 명령어를 실행한 후 정상으로 돌아왔습니다.
실행합니다.git fetch --all
전에git pull
그러면 문제가 해결될 거예요.
업데이트:
~/.netrc 파일을 편집해야 할 수 있습니다.
https://bugs.launchpad.net/ubuntu/+source/git-core/+bug/293553
원답:
ssl을 무효로 한 이유는 무엇입니까?https를 통해 푸시할 수 없는 것과 관련이 있다고 생각합니다.원래대로 되돌리고 다시 밀어보려고 했습니다.
git config –global http.sslVerify true
Mac과 관련된 일반적인 문제가 있었는데 다른 답변으로는 해결할 수 없었습니다.
Mac의 기본 파일 시스템 설정은 대소문자를 구분하지 않습니다.
제 경우, 동료가 지점의 대문자를 작성하는 것을 잊은 것이 분명합니다.
테스트 브랜치/ID-1과 테스트 브랜치/ID-2의 비교
Mac 파일 시스템의 경우(다른 방법으로 구성할 수 있음) 이 두 브랜치는 동일하며 이 경우 두 폴더 중 하나만 표시됩니다.나머지 폴더는 오류가 발생합니다.
제 경우, 해당 브랜치가 이미 병합되어 있기 때문에 .git/logs/ref/remotes/origin에서 해당 서브폴더를 삭제하면 문제가 해결되었습니다.
프로세스)가 파일 'Git'에 수 합니다..git/info/refs
이 파일은 다른 프로세스에 의해 잠기지 않습니다.
이전 브랜치 이름을 포함하는 새로운 기능 브랜치(origin - branch1 등)를 작성하려고 할 때 branch1-feature를 작성하려고 했을 때 이 문제가 발생했습니다.branch 1/feature는 이미 가능했습니다.
이 질문에 대해 이미 많은 답변이 제공되고 있는 것 외에 머신에 존재하는 로컬 repo 브랜치와 리모트에 없는 로컬 repo 브랜치를 간단하게 체크하는 것이 도움이 됩니다.이 경우엔,
깃 프루닝
많은 사람들이 제안했던 대로 지휘할 수 있습니다.
로컬 브랜치를 삭제하기만 하면 됩니다.
git branch -d <branch name without a remote tracking branch by the same name>
첨부 스크린샷에 나타나 있듯이 로컬브런치에 리모트브런치가 트래킹 되어 있지 않은 것이 확실한 경우는, -D를 사용해 강제 삭제를 실시합니다.
같은 에러 메세지가 표시되었습니다.근본적인 원인은 이력(브런치명 변경)의 개서입니다.
그건 내게 효과가 있었어:
git remote prune origin
출처 : https://codedaily.in/git-error-cannot-lock-refs/
사례 1: git-server에서 브랜치가 중복되지 않았는지 확인합니다.
Example: two branches below are duplicated:
- upper_with_lower
- UPPER_with_lower
---> Let consider removing one of them.
케이스 2: 푸시하는 브랜치가 다른 브랜치와 중복됩니다.
저는 다음과 같은 이름으로 새로운 브랜치를 작성하려고 했을 때 이 일이 일어났습니다.
master/pre-upgrade
다음과 같은 다른 이름으로 변경합니다.
pre-upgrade/master
성공했어!
이 문제에 대한 추가 정보
Git은 / 뒤의 마지막 문자열이 지점장의 커밋 SHA#을 포함하는 파일인 폴더 구조에 지점 정보를 파일로 저장합니다.
이것은, 지점으로부터 전화가 걸려 온 것을 의미합니다.
a/b/c
저장되다
.git/refs/heads/a/b/c
브런치를 추가하려고 하면
a/b/c/d
git은 그것을 저장하려고 합니다.
.git/refs/heads/a/b/c/d
b는 파일이고 다른 파일을 저장할 수 없기 때문에 가능하지 않습니다.
git 브랜치명은 git에 의해 경로로 사용되므로 경로로 간주합니다.
저 같은 경우에는 리모트로 제거된 오래된 태그를 수동으로 삭제해야 했습니다.
저의 경우, 이미 작성한 지점명으로 연결되어 있었습니다.
이 문제를 해결하기 위해 존재하지 않아야 할 이름으로 다음과 같은 브랜치를 만들었습니다.
git checkout -b some_unknown_branch
그리고 불필요한 쓰레기에 불과한 다른 지점들을 모두 정리했습니다.
git branch | grep -v \* | grep -v master | xargs git branch -D
그리고 현재의 지점 이름을 제가 의도한 이름으로 바꿨습니다.
git checkout -m my_desired_branch_name
커밋/푸시할 로컬 작업이 없어 커피를 마실 시간이 없는 경우, 레포의 로컬 복사본을 삭제하고 다시 복제할 수 있습니다.
현재 브랜치로 시작하는 브랜치를 작성하려고 했을 때 이 문제가 발생하였습니다.는 제 named라는 .develop
했어요.develop/myFeature
.
나는 완전히 혼란스러운 비슷한 문제가 있었다.저는 test라는 이름의 로컬브런치를 가지고 있었는데, test/some-changes라는 이름의 리모트브런치를 가져오려고 했습니다.
수정은 오래된 테스트 브랜치를 제거하는 것이었고, 리모트 브랜치를 가져와 체크 아웃할 수 있었습니다.
bettercodes.org의 경우, 해결책은 보다 시적인 것입니다. 유일한 문제는 프로젝트 구성원에게 할당된 권한일 수 있습니다.단순 회원에게는 쓰기 권한이 없습니다!의장 또는 관리자 권한이 있는지 확인하십시오.물론 이 설정은 bettercodes.org에서 관리자가 프로젝트 설정으로 해야 합니다.
언급URL : https://stackoverflow.com/questions/6656619/git-and-nasty-error-cannot-lock-existing-info-refs-fatal
'programing' 카테고리의 다른 글
SQL에서 문 삭제가 매우 느립니다. (0) | 2023.04.20 |
---|---|
단일 개별 열을 기준으로 고유한 행 선택 (0) | 2023.04.20 |
'pure' Swift에서 약한 프로토콜 참조를 만드는 방법(@objc 없음) (0) | 2023.04.20 |
WPF 도구 모음: 그립 및 오버플로 제거 방법 (0) | 2023.04.20 |
왜 항상 '--set-upstream'을 해야 하나요? (0) | 2023.04.15 |