Programing

Git 원격 URL 변경 후 원격 거부 (얕은 업데이트는 허용되지 않음)

crosscheck 2020. 6. 18. 21:23
반응형

Git 원격 URL 변경 후 원격 거부 (얕은 업데이트는 허용되지 않음)


Git 버전 관리하에 프로젝트와 서버 및 로컬 컴퓨터 모두에서 작업했습니다. 원래 원격 원본을 로컬 컴퓨터로 설정했지만 이제이를 BitBucket으로 변경하고 싶습니다.

서버에서 나는 명령을 사용했다.

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

새 리포지를 그대로 푸시하려면 다음을 시도하십시오.

  • 먼저 old git folder현재 리포지토리에서sudo rm -rf .git
  • 그런 다음 자식을 다시 초기화하십시오. git init
  • 그런 다음 새로운 원격 저장소를 추가하십시오. git remote add your-new-repo
  • 그런 다음 밀어 넣으십시오.

얕은 초기 커밋 이후에 추가 한 새로운 커밋으로 리포지토리를 그대로 유지하려면 다른 옵션은 다음과 같습니다 . 대화식 rebase로 커밋을 수정하십시오 .

  • 첫 번째 (루트) 커밋을 포함하여 대화식 리베이스를 시작하십시오.

    git rebase --interactive --root
    
  • pick초기 커밋을로 변경하고 edit파일을 저장하고 닫습니다.

    깊이가 1보다 큰 리포를 복제 한 경우 해당 커밋에 대해 동일한 작업을 수행해야 할 수 있습니다. 또는 fixup대화식 리베이스 동안 이들을 모두 실행 하십시오.

  • 이 커밋을 다음과 같이 정규적이고 얕은 커밋으로 변환하십시오.

    git commit --amend --no-edit
    

    또한 커밋 ID가 변경되고이 초기 커밋의 공동 저자로 추가됩니다.

  • 리베이스를 끝내는 것을 잊지 마십시오

    git rebase --continue
    

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

반응형