J'ai un projet sous contrôle de version Git que j'ai travaillé à la fois sur un serveur et sur mon ordinateur local. À l'origine, j'avais défini l'origine distante comme mon ordinateur local, mais je voudrais maintenant changer cela en BitBucket.
Sur le serveur j'ai utilisé la commande
git remote set-url origin bitbucket_address
Mais maintenant, quand j'essaye de pousser mon projet, j'obtiens l'erreur
! [remote rejected] master -> master (shallow update not allowed)
Qu'est-ce qui cause ce problème et comment le résoudre?
git clone --depth
?shallow
dans votre.git
dossier.shallow
fichier.Réponses:
Comme il semble que vous avez utilisé
git clone --depth <number>
pour cloner votre version locale. Il en résulte un clone peu profond . Une limitation d'un tel clone est que vous ne pouvez pas le pousser dans un nouveau référentiel.Vous avez maintenant deux options:
Alors, tu veux garder ton histoire, hein? Cela signifie que vous devez libérer votre référentiel. Pour ce faire, vous devrez à nouveau ajouter votre ancienne télécommande.
Ensuite, nous
git fetch
récupérons l'historique restant de l'ancienne télécommande (comme suggéré dans cette réponse ).Et maintenant, vous devriez être en mesure de pousser dans votre nouveau référentiel distant.
Remarque : après avoir annulé votre clone, vous pouvez évidemment supprimer à nouveau l'ancienne télécommande.
la source
git fetch --unshallow
peut prendre une refspec pour ne débloquer qu'une certaine branche plutôt que l'ensemble du dépôt. Ex:git fetch --unshallow origin refs/heads/mydeepbranch:refs/remotes/origin/mydeepbranch
origin/master
20 commits avant votreoldrepo/master
lorsque vousclone --depth 1
l' avez édité, et que vous avez effectué 17 commits locaux depuis, il vous suffit de le fairegit fetch --depth 37 origin refs/heads/master:refs/remotes/origin/master
(excuses pour toute erreur ponctuelle), et vous pouvez le fairegit push oldrepo master
sans incident (peut nécessiter git 1.9.0 ou plus récent).Dans le cas où votre repo est
origin
, et le repo d'origine estupstream
:la source
Une autre option si vous voulez garder le dépôt tel quel avec les nouveaux commits que vous avez ajoutés depuis le commit initial superficiel est la suivante: Modifiez ce commit avec un rebase interactif .
Démarrez un rebase interactif comprenant le premier commit (racine) avec
Remplacez le
pick
(s) commit (s) initial (s) paredit
et enregistrez et fermez le fichier.Si vous avez cloné le dépôt avec une profondeur supérieure à 1, vous devrez peut-être faire de même pour tous ces commits. Ou, alternativement, exécutez
fixup
pour tous ceux-ci pendant le rebase interactif.Convertissez ce commit en un commit régulier et peu clair avec
Cela modifiera également l'ID de validation et vous ajoutera en tant que co-auteur de cette validation initiale.
N'oubliez pas de terminer votre rebase
la source
Si vous voulez pousser le nouveau repo tel quel, vous pouvez essayer ceci:
old git folder
de votre dépôt actuel,sudo rm -rf .git
git init
git remote add your-new-repo
la source
Si la récupération de --unshallow ne fonctionne pas. Il doit y avoir des problèmes avec votre succursale. Corrigez-le avec la commande suivante avant de le pousser.
Faites cela uniquement avec --unshallow ne fonctionne pas car il y a un problème de SÉCURITÉ .
la source