Ce que vous avez probablement fait pour provoquer cela:
Ce genre de chose se produit lorsque vous allez lancer un petit programme. Vous êtes sur le point de changer quelque chose qui fonctionnait déjà, alors vous lancez votre sort de niveau 3 d'annulation permanente:
machine1:~/proj1> git init
et vous commencez à ajouter / valider. Mais ensuite , le projet commence à s'impliquer davantage et vous voulez y travailler à partir d'un autre ordinateur (comme votre PC ou ordinateur portable), donc vous faites quelque chose comme
machine2:~> git clone ssh://machine1/~/proj1
et il clone et tout semble bon, et donc vous travaillez sur votre code à partir de machine2.
Ensuite ... vous essayez de pousser vos validations depuis machine2, et vous obtenez le message d'avertissement dans le titre.
La raison de ce message est que le dépôt git que vous avez extrait était destiné à être utilisé uniquement pour ce dossier sur machine1. Vous pouvez le cloner très bien, mais pousser peut causer des problèmes. La manière "correcte" de gérer le code dans deux emplacements différents est d'utiliser un dépôt "nu", comme cela a été suggéré. Un repo nu n'a pas été conçu pour avoir un travail accompli en elle, il est destiné à coordonner les commits provenant de sources multiples. C'est pourquoi la réponse la mieux notée suggère de supprimer tous les fichiers / dossiers autres que le dossier .git après vous git config --bool core.bare true
.
Clarification de la réponse la mieux notée: la plupart des commentaires de cette réponse disent quelque chose comme "Je n'ai pas supprimé les fichiers non .git de la machine1 et j'ai quand même pu valider depuis la machine2". C'est vrai. Cependant, ces autres fichiers sont complètement "séparés" du dépôt git, maintenant. Allez- git status
y et vous devriez voir quelque chose comme "fatal: cette opération doit être exécutée dans une arborescence de travail". Donc, la suggestion de supprimer les fichiers n'est pas pour que le commit de machine2 fonctionne ; c'est pour que vous ne soyez pas confus et pensez que git suit toujours ces fichiers. Mais, la suppression des fichiers est un problème si vous voulez toujours travailler sur les fichiers sur machine1, n'est-ce pas?
Alors, que devez-vous vraiment faire?
Cela dépend de combien vous prévoyez de continuer à travailler sur machine1 et machine2 ...
Si vous avez terminé de développer à partir de machine1 et que vous avez déplacé tout votre développement vers machine2 ... faites simplement ce que la réponse la mieux suggérée: git config --bool core.bare true
puis, facultativement, supprimez tous les fichiers / dossiers autres que .git de ce dossier, car ils 'ne sont pas suivis et sont susceptibles de créer de la confusion.
Si votre travail sur machine2 n'était qu'une chose ponctuelle, et que vous n'avez pas besoin de poursuivre le développement là-bas ... alors ne vous embêtez pas à faire un repo nu; juste ftp / rsync / scp / etc. vos fichiers de la machine * 2 * au-dessus des fichiers de la machine * 1 *, validez / poussez de la machine * 1 *, puis supprimez les fichiers de la machine * 2 *. D'autres ont suggéré de créer une branche, mais je pense que c'est un peu compliqué si vous voulez simplement fusionner un développement que vous avez fait ponctuellement à partir d'une autre machine.
Si vous devez continuer le développement sur machine1 et machine2 ... alors vous devez configurer les choses correctement. Vous devez convertir votre dépôt en version nue, puis vous devez en faire un clone sur machine1 pour que vous puissiez y travailler . La façon la plus rapide de le faire est probablement de faire
machine1:~/proj1> git config --bool core.bare true
machine1:~/proj1> mv .git/ ../proj1.git
machine1:~/proj1> cd ..
machine1:~> rm -rf proj1
machine1:~> git clone proj1.git
machine1:~> cd proj1
Très important: comme vous avez déplacé l'emplacement du dépôt de proj1 vers proj1.git, vous devez le mettre à jour dans le fichier .git / config sur machine2 . Après cela, vous pouvez valider vos modifications à partir de machine2. Enfin, j'essaie de garder mes dépôts nus dans un emplacement central, loin de mes arbres de travail (c'est-à-dire ne placez pas «proj1.git» dans le même dossier parent que «proj1»). Je vous conseille de faire de même, mais je voulais garder les étapes ci-dessus aussi simples que possible.