git refusant d’aller chercher dans la twig actuelle

J’ai mis en place un référentiel distant et je peux y apporter de nouvelles modifications, mais je ne peux pas y accéder, j’ai toujours le message d’erreur (plutôt cryptique):

fatal: Refusing to fetch into current branch refs/heads/master of non-bare repository fatal: The remote end hung up unexpectedly 

Qu’est-ce que ça veut dire? Que dois-je faire pour activer la récupération?

(Notez que ce repository à distance est uniquement utilisé en tant que repository de sauvegarde, il devrait donc être à peu près une copie exacte de mon repository local. Je ne peux vraiment pas comprendre pourquoi je peux y accéder mais pas en récupérer …)

Ma config ressemble à:

 [remote "origin"] url = ssh://blablablah fetch = +refs/*:refs/* mirror = true 

Vous essayez de récupérer la twig sur laquelle vous travaillez. C’est-à-dire que vous êtes sur la twig principale et que vous essayez de le mettre à jour. Ce n’est pas possible. Il est plus courant de mettre à jour les twigs des remotes/* et de les insérer dans celles locales. Ce que vous voulez, c’est peut-être

 git remote add otherrepo thehost:/the/path.git 

Cela va configurer le repository à récupérer dans remotes/otherrepo/* . git fetch otherrepo devrait faire l’affaire. Alternativement, vous pouvez éditer manuellement votre .git/config et définir fetch pour la télécommande sur quelque chose comme refs/heads/*:refs/remotes/otherrepo/* .

Si quelqu’un trouve cela parce qu’il veut spécifiquement aller chercher dans la twig en cours, vous pouvez utiliser l’ --update-head-ok . De la documentation :

-u
–update-head-ok
Par défaut, git fetch refuse de mettre à jour la tête qui correspond à la twig en cours. Ce drapeau désactive le contrôle. Ceci est purement pour un usage interne pour que git pull communique avec git fetch, et sauf si vous implémentez votre propre porcelaine, vous n’êtes pas censé l’utiliser.

Dans certains cas, nous souhaitons implémenter nos propres commandes de porcelaine, par exemple l’automatisation et l’outillage.

Aussi ceci devrait fonctionner si vous êtes dans la twig principale et que vous voulez essayer le dernier

git pull origine master

J’ai eu ce problème lorsque j’ai cloné sans réfléchir un référentiel au lieu de le récupérer, de sorte que les deux référentiels étaient maîtres. Si vous n’avez pas effectué de travail sur le référentiel distant, vous pouvez corriger les choses avec les commandes git de base comme suit: (1) supprimer le référentiel distant, (2) copier le référentiel local à l’emplacement distant, (3) supprimer le local, puis (4) configure le référentiel local en utilisant

 git init; git fetch $REMOTE_GIT_REPOSITORY_URL 

Alors git pull et git push feront les bonnes choses. L’avantage d’éviter git remote , d’après Michael, la réponse plus efficace et fondée sur des principes, est que vous n’avez pas besoin de penser à la sémantique du suivi des twigs.

Etes-vous en train de taper les commandes Git dans la ligne de commande ou exécutez-vous l’exécutable Git à partir de votre propre code?
Si vous l’exécutez à partir de code, êtes-vous sûr que Git essaie de récupérer le bon répertoire local?

Il y a deux manières possibles de le faire:

  1. Utilisez les options fournies par votre langage de programmation pour définir le répertoire de travail correct avant d’exécuter Git
    ( Exemple C # , parce que c’est ce que j’utilise)

  2. Transmettez toujours le paramètre -C à Git pour spécifier le répertoire avec le référentiel local.


J’ai un projet où j’appelle l’exécutable Git à partir du code C #, et j’ai reçu le même message d’erreur comme dans la question quand j’ai oublié accidentellement de définir le -C parameter .

J’ai le même problème. D’abord, j’essaie de récupérer en utilisant cette

 git fetch [remote_name] [branch_name] 

J’ai eu le même problème que vous mentionnez. Après cela, j’ai essayé cette commande simple.

 git pull [remote_name] [branch_name] 

Note va chercher et fusionner les modifications. Si vous utilisez un terminal, alors ouvrez le fichier, nécessitant de valider le message. Avec ce message, vous allez pousser le dernier commit. Essayez cette commande et vous pourrez enfin pousser la requête.

 git push [remote_name] [branch_name_local]