Mam projekt pod kontrolą wersji Git, nad którym pracowałem zarówno na serwerze, jak i na komputerze lokalnym. Początkowo miałem zdalne źródło ustawione jako mój komputer lokalny, ale teraz chciałbym zmienić to na BitBucket.
Na serwerze użyłem polecenia
git remote set-url origin bitbucket_address
Ale teraz, kiedy próbuję przekazać projekt, pojawia się błąd
! [remote rejected] master -> master (shallow update not allowed)
Co jest tego przyczyną i jak to naprawić?
git clone --depth
?shallow
w ty.git
folder.shallow
plik.Odpowiedzi:
Wygląda na to, że
git clone --depth <number>
klonowałeś swoją lokalną wersję. Powoduje to płytki klon . Jednym z ograniczeń takiego klonu jest to, że nie można go wypchnąć do nowego repozytorium.Masz teraz dwie możliwości:
Więc chcesz zachować swoją historię, co? Oznacza to, że musisz odblokować repozytorium. Aby to zrobić, musisz ponownie dodać starego pilota.
Następnie używamy
git fetch
do pobrania pozostałej historii ze starego pilota (jak zasugerowano w tej odpowiedzi ).A teraz powinieneś być w stanie wypchnąć do nowego zdalnego repozytorium.
Uwaga : po odblokowaniu klona można oczywiście ponownie usunąć starego pilota.
źródło
git fetch --unshallow
może wymagać refspec, aby odblokować tylko określoną gałąź, a nie całe repozytorium. Np .:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
origin/master
20 zatwierdzeń przed twoim,oldrepo/master
kiedyclone --depth 1
go edytowałeś, a od tego czasu wykonałeś 17 lokalnych zatwierdzeń, wystarczy, że to zrobiszgit fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master
(przeprosiny za każdy błąd poza jednym), a wtedy możesz obejść sięgit push oldrepo master
bez incydentów (może wymagać git 1.9.0 lub nowszej).Jeśli Twoje repozytorium to
origin
, a oryginalne repozytorium toupstream
:źródło
Inną opcją, jeśli chcesz zachować repozytorium tak, jak jest z nowymi zatwierdzeniami, które dodałeś od czasu płytkiego, początkowego zatwierdzenia, jest: Zmień to zatwierdzenie za pomocą interaktywnej rebase .
Uruchom interaktywną rebase zawierającą pierwsze zatwierdzenie (root) za pomocą
Zmień
pick
początkowe zatwierdzenia na,edit
zapisz i zamknij plik.Jeśli sklonowałeś repozytorium z głębią większą niż 1, być może będziesz musiał zrobić to samo dla wszystkich tych zatwierdzeń. Lub, alternatywnie, wykonaj je
fixup
dla wszystkich podczas interaktywnej rebase.Przekonwertuj to zatwierdzenie na zwykły, nie płytkie zatwierdzenie z
Spowoduje to również zmianę identyfikatora zatwierdzenia i dodanie Ciebie jako współautora do tego początkowego zatwierdzenia.
Nie zapomnij zakończyć rebase
źródło
Jeśli chcesz wypchnąć nowe repozytorium bez zmian, możesz spróbować tego:
old git folder
z bieżącego repozytorium,sudo rm -rf .git
git init
git remote add your-new-repo
źródło
Jeśli pobieranie --unshallow nie działa. W twoim oddziale muszą być jakieś problemy. Napraw to za pomocą następującego polecenia przed pchnięciem.
Rób to tylko z opcją --unshallow nie działa, ponieważ istnieje obawa o BEZPIECZEŃSTWO .
źródło