576 votes

Git et le méchant "error : cannot lock existing info/refs fatal" (erreur : ne peut pas verrouiller les informations/références existantes)

Après avoir cloné à partir d'un dépôt git distant (chez bettercodes) J'ai fait quelques changements, j'ai commité et j'ai essayé de pousser :

git push origin master

Des erreurs avec :

erreur : impossible de verrouiller les informations/références existantes
fatal : git-http-push a échoué

Ce cas concerne un référentiel déjà existant.

Ce que je faisais avant, c'était :

  1. git config –global http.sslVerify false
  2. git init
  3. git remote add [url]
  4. git clone
  5. modifier les données
  6. git commit

Chez 'bettercodes', je n'ai pas accès au journal git.

J'utilise Windows. L'erreur détaillée était :

C:\MyWorkStuff\Projects\Ruby\MyProject\>git push origin master
Unable to create branch path https://user:password@git.bettercodes.org/myproject/info/
error: cannot lock existing info/refs
fatal: git-http-push failed

J'ai cloné avant, puis changé le code et commis.

44voto

StudentKen Points 207

Ce qui a marché pour moi, c'est :

  1. Retirer .git/logs/refs/remotes/origin/branch
  2. Retirer .git/refs/remotes/origin/branch
  3. Exécuter git gc --prune=now

En savoir plus git gc ici : https://git-scm.com/docs/git-gc

30voto

FrankMonza Points 1348

J'ai résolu ce problème en faisant ce qui suit

git branch --unset-upstream
rm .git/refs/remotes/origin/{branch}
git gc --prune=now
git branch --set-upstream-to=origin/{branch} {branch}
#or git push --set-upstream origin {branch}
git pull

Cela suppose que vos branches locales et distantes sont alignées et que vous obtenez simplement l'erreur refs comme non fatale.

25voto

Dharmesh Mansata Points 337

Avant de tirer, vous devez nettoyer vos changements locaux. La commande suivante m'aide à résoudre le problème.

git remote prune origin

et ensuite après

git pull origin develop

J'espère que cela vous aidera !

19voto

George Armstrong Points 151

J'ai eu ce problème parce que j'étais sur une branche qui avait un nom similaire à une branche amont, c'est-à-dire que la branche amont s'appelait example-branch et ma branche locale s'appelait example-branch/backend . La solution a été de changer le nom de ma branche locale comme suit :

git branch -m <new name goes here>

13voto

WolfTail Points 129

Ce problème est probablement résolu à l'heure actuelle. Mais voici ce qui a fonctionné pour moi.

  1. Emplacement :

    • Si le référentiel verrouillé se trouve du côté du serveur :

      1. ssh à votre dépôt git sur le serveur.
      2. Connectez-vous en tant qu'utilisateur qui a les permissions de modifier le référentiel et naviguez vers le référentiel sur votre serveur.
    • Si le référentiel verrouillé est uniquement local :

      1. Ouvrez la console git et naviguez vers le répertoire du dépôt.
      2. Exécutez cette commande :

        git update-server-info
  2. Corrigez les permissions sur votre dépôt (distant ou/et local) si vous devez le faire. Dans mon cas, j'ai dû chmod a 777 y chown a apache:apache

  3. Essayez de pousser à nouveau depuis le dépôt local :

    git push

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X