programing

Git 및 고약한 "오류: 기존 정보/참조를 잠글 수 없습니다"

telecom 2023. 4. 20. 20:01
반응형

Git 및 고약한 "오류: 기존 정보/참조를 잠글 수 없습니다"

리모트 git 저장소에서 (더 좋은 코드로) 복제한 후 몇 가지 변경을 가하고 커밋하여 푸시하려고 했습니다.

git push origin master

에러:

info: "기존 info/refs"를 잠글 수 없습니다.
: git-syslog-syslog failed.

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

내가 전에 한 일은,

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. 데이터를 변경하다
  6. 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에서 리모콘을 삭제하고 다시 추가하는 방법을 잘 모르면 다음 단계를 따르십시오.

  1. 기존 리모트의 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)
  1. 로컬 git repo에서 리모콘을 삭제합니다.

    git remote rm origin

  2. 로컬 리포트에 리모트를 다시 추가합니다.

    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쳤습니니다다

나에게 효과가 있었던 것은, 다음과 같습니다.

  1. 하다..git/logs/refs/remotes/origin/branch
  2. 하다..git/refs/remotes/origin/branch
  3. 실행합니다.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>

이 문제는 지금쯤 해결되었을 겁니다.하지만 여기 나에게 효과가 있었던 것이 있다.

  1. 장소:

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

      1. 서버상의 git 저장소로 ssh.
      2. 저장소를 수정할 수 있는 권한을 가진 사용자로 로그인하고 서버의 리포지토리로 이동합니다.
    • 잠긴 저장소가 로컬에만 있는 경우:

      1. git 콘솔을 열고 저장소 디렉토리로 이동합니다.
      2. 다음 명령을 실행합니다.

        git update-server-info
        
  2. 필요한 경우 (리모트 또는 로컬) 저장소에 대한 권한을 수정합니다.로서는 수 chmod로로 합니다.777 ★★★★★★★★★★★★★★★★★」chown로로 합니다.apache:apache

  3. 로컬 저장소에서 다시 푸시를 시도합니다.

    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를 확인하거나 이와 동등한 기능을 사용할 수 있습니다.

난 이런 식이야

  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. 웹 서버를 재부팅하다

제 경우 브랜치를 서브디렉토리로 이동해, 그 디렉토리를 브랜치로서 호출했습니다.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를 사용해 강제 삭제를 실시합니다.

lock ref 오류 git

같은 에러 메세지가 표시되었습니다.근본적인 원인은 이력(브런치명 변경)의 개서입니다.

그건 내게 효과가 있었어:

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

반응형