programing

Git 원격 URL을 변경한 후 원격에서 거부됨(허황한 업데이트는 허용되지 않음)

linuxpc 2023. 7. 20. 21:46
반응형

Git 원격 URL을 변경한 후 원격에서 거부됨(허황한 업데이트는 허용되지 않음)

Git 버전 관리하에 서버와 로컬 컴퓨터 모두에서 작업한 프로젝트가 있습니다.원래는 원격 오리진을 로컬 컴퓨터로 설정했지만 이제 비트버킷으로 변경하고 싶습니다.

서버에서 명령을 사용했습니다.

git remote set-url origin bitbucket_address

하지만 이제 프로젝트를 추진하려고 하면 오류가 발생합니다.

 ! [remote rejected] master -> master (shallow update not allowed)

무엇이 원인이며 어떻게 해결해야 합니까?

당신이 사용한 것처럼 보이는 것처럼.git clone --depth <number>로컬 버전을 복제합니다.이로 인해 얕은 복제본이 생성됩니다.이러한 복제본의 한 가지 제한 사항은 복제본에서 새 리포지토리로 밀어넣을 수 없다는 것입니다.

이제 두 가지 옵션이 있습니다.

  1. 만약 당신이 사라진 역사에 대해 신경 쓰지 않는다면, 이 질문을 보세요.
  2. 전체 기록을 유지하려면 다음을 계속 읽으십시오.

그래서, 당신은 당신의 역사를 유지하고 싶어요, 그렇죠?즉, 리포지토리의 표시를 해제해야 합니다.이전 리모컨을 이미 제거하거나 교체한 경우 다시 추가해야 합니다.

git remote add old <path-to-old-remote>

그 후에 우리는 사용합니다.git fetch이전 원격에서 남은 기록을 가져옵니다( 답변에서 제안한 대로).

git fetch --unshallow old

이제 새로운 원격 저장소로 이동할 수 있습니다.


참고: 복제본의 허용을 취소한 후 이전 리모컨을 제거할 수 있습니다.

가 당의레오가인 .origin그리고 원래의 레포는.upstream:

git fetch --unshallow upstream

얕은 초기 커밋 이후 추가한 새 커밋을 그대로 유지하려면 다음과 같은 옵션이 있습니다.대화형 기본 재배치를 사용하여 커밋을 수정합니다.

  • 첫 번째(루트) 커밋을 포함한 대화형 기본 재배치 시작

    git rebase --interactive --root
    
  • 변할내용을 합니다.pick에 대한 edit파일을 저장하고 닫습니다.

    깊이가 1보다 큰 repo를 복제한 경우 모든 커밋에 대해 동일한 작업을 수행해야 할 수 있습니다.를 합니다.fixup이 모든 것들에 대해 대화형 리베이스 동안.

  • 이 커밋을 다음과 같은 정기적이고 비열한 커밋으로 변환

    git commit --amend --no-edit
    

    또한 커밋 ID를 변경하고 사용자를 이 초기 커밋의 공동 작성자로 추가합니다.

  • 리베이스를 완료하는 것을 잊지 마십시오.

    git rebase --continue
    

새 저장소를 그대로 푸시하려면 다음을 시도할 수 있습니다.

  • 먼분합니다를 합니다.old git folder에서, 신의현레부터로포재당,부터▁your▁from,sudo rm -rf .git
  • 다음 를 다시 합니다.git init
  • 다음 새 를 추가합니다.git remote add origin your-new-repo
  • 그 다음에 밀어요.

만약 페칭 --unshallow가 작동하지 않는다면 말입니다.지점에 문제가 있는 것 같습니다.푸시하기 전에 다음 명령으로 수정합니다.

git filter-branch -- --all

이 작업은 안전 문제가 있으므로 --unshallow만 수행하십시오.

저는 이 문제를 해결했습니다.하지만 당신은 그것을 고칠 수 없을지도 모릅니다. 해결책은 다음과 같습니다.

  1. git에서 common/.git/messages와 같은 얕은 파일 가져오기
  2. 이 파일을 .git 디렉토리 git 서버에 푸시합니다.
  3. 분기를 Git 서버에 푸시합니다.

회사에서는 파일을 추가하기 위해 IT 관리자가 필요하며 권한이 없습니다.

비트버킷 파이프라인의 경우

제한된 커밋 깊이(기본값 50 커밋) 때문일 수 있습니다.

제한을 늘릴 수 있습니다.

clone:
  depth: 500       # include the last five hundred commits
  
pipelines:
  default:
    - step:
        name: Cloning
        script:
          - echo "Clone all the things!"

참고: 깊이 사용: 제한 없이 가득 참

가장 많이 업데이트된 답변을 기반으로 자동화를 위한 별칭을 만들었습니다.

에 추가.gitconfig:

[alias]
    unshallow = !"git fetch --unshallow \"${1:-origin}\" # Unshallow from remote $1 (defaults to origin)"

용도:

  • git unshallow다음을 기준으로 현재 분기를 표시합니다.origin원격의
  • git unshallow other-remote원격에서 현재 분기 표시 해제other-remote

기존의 원격 변경 사항에 대해 관심이 없는 경우 이 문제를 간단히 해결하려면 다음 방법을 수행합니다.

  1. 로컬 제거.git폴더를 저장할 수 있습니다.
  2. 유형git init.
  3. 리모컨을 다시 추가git remote add origin <REMOTE_URL>.
  4. 세트main으로 갈라진.git branch -M main.
  5. 변경사항을 푸시합니다.git push --set-upstream origin main.

삭제하기만 하면 됩니다.shallow파일을 /.git/message에 저장합니다.

이제 효과가 있을 겁니다.

언급URL : https://stackoverflow.com/questions/28983842/remote-rejected-shallow-update-not-allowed-after-changing-git-remote-url

반응형