Git 원격 URL을 변경한 후 원격에서 거부됨(허황한 업데이트는 허용되지 않음)
Git 버전 관리하에 서버와 로컬 컴퓨터 모두에서 작업한 프로젝트가 있습니다.원래는 원격 오리진을 로컬 컴퓨터로 설정했지만 이제 비트버킷으로 변경하고 싶습니다.
서버에서 명령을 사용했습니다.
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
얕은 초기 커밋 이후 추가한 새 커밋을 그대로 유지하려면 다음과 같은 옵션이 있습니다.대화형 기본 재배치를 사용하여 이 커밋을 수정합니다.
첫 번째(루트) 커밋을 포함한 대화형 기본 재배치 시작
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만 수행하십시오.
저는 이 문제를 해결했습니다.하지만 당신은 그것을 고칠 수 없을지도 모릅니다. 해결책은 다음과 같습니다.
- git에서 common/.git/messages와 같은 얕은 파일 가져오기
- 이 파일을 .git 디렉토리 git 서버에 푸시합니다.
- 분기를 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
기존의 원격 변경 사항에 대해 관심이 없는 경우 이 문제를 간단히 해결하려면 다음 방법을 수행합니다.
- 로컬 제거
.git
폴더를 저장할 수 있습니다. - 유형
git init
. - 리모컨을 다시 추가
git remote add origin <REMOTE_URL>
. - 세트
main
으로 갈라진.git branch -M main
. - 변경사항을 푸시합니다.
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
'programing' 카테고리의 다른 글
소수점 이하 1자리만 얻기 (0) | 2023.07.20 |
---|---|
MARS(다중 활성 결과 집합)의 단점? (0) | 2023.07.20 |
네이티브 쿼리 최대 절전 모드 - char(3) 열 (0) | 2023.07.20 |
형식 또는 네임스페이스 이름 'Entity'가 네임스페이스 'System'에 없습니다.데이터' (0) | 2023.07.20 |
RPATH는 사용하고 RUNPATH는 사용하지 않습니까? (0) | 2023.07.20 |