서버와 로컬 컴퓨터에서 모두 작업 한 Git 버전 관리 프로젝트가 있습니다. 원래 원격 원본을 로컬 컴퓨터로 설정했지만 이제이를 BitBucket으로 변경하고 싶습니다.
서버에서 나는 명령을 사용했다.
git remote set-url origin bitbucket_address
그러나 이제 프로젝트를 푸시하려고하면 오류가 발생합니다.
! [remote rejected] master -> master (shallow update not allowed)
이 원인은 무엇이며 어떻게 해결합니까?
답변
git clone --depth <number>
로컬 버전을 복제 하는 데 사용한 것 같습니다 . 결과적으로 얕은 복제가 발생 합니다. 이러한 복제의 한 가지 제한 사항은 복제본을 새로운 저장소 로 푸시 할 수 없다는 것 입니다.
이제 두 가지 옵션이 있습니다.
- 현재 또는 누락 된 기록에 대해 신경 쓰지 않으면 이 질문을 살펴보십시오.
- 전체 기록을 유지하려면 계속 읽으십시오.
그래서 당신은 당신의 역사를 유지하고 싶습니까? 즉, 저장소 를 해제 해야합니다. 이렇게하려면 기존 리모컨을 다시 추가해야합니다.
git remote add old <path-to-old-remote>
그런 git fetch
다음 이전 리모콘에서 남은 히스토리를 가져 오는 데 사용 합니다 ( 이 답변 에서 제안한대로 ).
git fetch --unshallow old
이제 새로운 원격 저장소로 들어갈 수 있습니다.
참고 : 복제를 해제 하지 않으면 분명히 기존 리모컨을 다시 제거 할 수 있습니다.
답변
리포지토리가 origin
이고 원래 리포지토리가 upstream
다음 과 같은 경우 :
git fetch --unshallow upstream
답변
얕은 초기 커밋 이후에 추가 한 새로운 커밋으로 리포지토리를 그대로 유지하려면 다른 옵션은 다음과 같습니다 . 대화식 rebase로 커밋을 수정하십시오 .
-
첫 번째 (루트) 커밋을 포함하여 대화식 리베이스를 시작하십시오.
git rebase --interactive --root
-
pick
초기 커밋을로 변경하고edit
파일을 저장하고 닫습니다.깊이가 1보다 큰 리포를 복제 한 경우 해당 커밋에 대해 동일한 작업을 수행해야 할 수 있습니다. 또는
fixup
대화식 리베이스 동안 이들을 모두 실행 하십시오. -
이 커밋을 다음과 같이 정규적이고 얕은 커밋으로 변환하십시오.
git commit --amend --no-edit
또한 커밋 ID가 변경되고이 초기 커밋의 공동 저자로 추가됩니다.
-
리베이스를 끝내는 것을 잊지 마십시오
git rebase --continue
답변
새 저장소를 그대로 푸시하려면 다음을 시도하십시오.
- 먼저
old git folder
현재 리포지토리에서sudo rm -rf .git
- 그런 다음 자식을 다시 초기화하십시오.
git init
- 그런 다음 새로운 원격 저장소를 추가하십시오.
git remote add your-new-repo
- 그런 다음 밀어 넣으십시오.
답변
–unshallow 가져 오기가 작동하지 않으면 지점에 문제가 있어야합니다. 밀어 넣기 전에 다음 명령으로 수정하십시오.
git filter-branch -- --all
안전 문제 가 있으므로 –unshallow는 작동하지 않습니다 .