J'ai examiné toutes les questions similaires. Cependant, j'ai vérifié deux fois et quelque chose d'étrange se passe définitivement.
Sur un serveur (Solaris avec Git 1.8.1), j'ai cloné le référentiel Git puis copié le dossier .git dans mes fichiers live existants. Cela a parfaitement fonctionné, je pourrais courir
git status
puis
git diff [filename]
pour vérifier tous les fichiers qui étaient différents.
Sur un autre serveur (Solaris avec Git 1.7.6), je fais exactement la même chose cependant
git diff [filename]
ne montre rien, même si le contenu du fichier est définitivement différent. J'ai également testé l'ajout d'un nouveau fichier, le valider, puis le modifier. Le même problème, git status
montre le fichier comme modifié, mais git diff
ne montre rien. Si je télécharge le fichier modifié et exécute un diff localement, j'obtiens une sortie diff.
git diff --cached
.git diff --cached
me donne juste une sortie vierge aussi.git log
ne donne pas non plus de sortie.core.fileMode
option ici 2) En outre, je suis confronté à un problème similaire avec la configuration de Console2 (je l'ai sous git) lorsque Console2 est en cours d'exécution. Peut-être qu'une sorte de verrouillage de fichier rend git à ce que le fichier a changé.Réponses:
J'ai ajouté le fichier à l' index :
puis a couru:
Vous pouvez voir la description de git diff ici .
Si vous avez besoin d'annuler votre git add, alors s'il vous plaît voir ici: Comment annuler 'git add' avant de commettre?
la source
Il y a quelques raisons pour lesquelles cela
git status
pourrait montrer une différence maisgit diff
pas.Le mode (bits d'autorisation) du fichier a changé - par exemple, de 777 à 700.
Le style de saut de ligne est passé de CRLF (DOS) à LF (UNIX)
Le moyen le plus simple de découvrir ce qui s'est passé est d'exécuter
git format-patch HEAD^
et de voir ce que dit le correctif généré.la source
Pour moi, cela avait quelque chose à voir avec les autorisations de fichiers. Quelqu'un avec Mac / Linux sur mon projet semble valider certains fichiers avec des autorisations non par défaut que mon client git Windows n'a pas pu reproduire. La solution pour moi était de dire à git d'ignorer les autorisations de fichiers:
Autre aperçu: Comment faire pour que Git ignore les changements de mode de fichier (chmod)?
la source
J'ai eu un problème où des centaines de fins de ligne ont été modifiées par un programme et
git diff
répertorié tous les fichiers source comme modifiés. Après avoir corrigé les fins de ligne,git status
toujours répertorié les fichiers comme modifiés.J'ai pu résoudre ce problème en ajoutant tous les fichiers à l'index, puis en réinitialisant l'index.
core.filemode
a été défini sur false.la source
git add --renormalize .
, voir ma réponse ci-dessous.Je soupçonne qu'il y a quelque chose qui ne va pas avec votre installation Git ou votre référentiel.
Essayez de courir:
Voyez si vous obtenez quelque chose d'utile. Si cela ne vous aide pas, utilisez simplement strace et voyez ce qui ne va pas:
la source
-F
drapeau à laLESS
variable env qui indique moins de quitter s'il y a moins d'un écran plein d'informations à afficher. Puisque git utilise moins comme pager, et que j'avais un petit diff, rien n'était affiché. Soit je devais ajouter-X
à l'LESS
environnement qui montre le contenu à l'écran même après moins de sorties ou simplement supprimer-F
.GIT_TRACE
a montré queless
c'était en cours d'exécution, ce qui m'a rappelé que j'avais changé laLESS
variable récemment. Même raison dans la réponse de @ rcwxok, mais je voulais un commentaire sur la façon dont cela a étéGIT_TRACE
aidé.core.pager
en place.gitconfig
, qui fonctionne parfaitement pour moi.J'avais un problème similaire:
git diff
montrerait des différences, maisgit diff <filename>
pas. Il s'est avéré que j'avais définiLESS
une chaîne comprenant-F
(--quit-if-one-screen
). La suppression de cet indicateur a résolu le problème.la source
-F
, l'ajout-X
peut également fonctionner, voir ma réponse ci-dessous pour un cas similaire.Comme déjà noté dans une réponse précédente , cette situation peut survenir en raison de problèmes de fin de ligne (CR / LF vs LF). J'ai résolu ce problème (sous Git version 2.22.0) avec cette commande:
Selon le manuel:
la source
Réponse courte
Courir
git add
aide parfois.Exemple
L'état de Git affiche les fichiers modifiés et git diff n'affiche rien ...
... exécuter git add résout l'incohérence.
la source
status
etdiff
avoir des façons distinctes de les gérer.J'ai rencontré ce problème. Mon cas était semblable à la
LESS
question publié par rcwxok .Dans mon cas, j'ai défini la
PAGER
variable d'environnement surPAGER='less -RSF'
.Cependant, contrairement aux réponses précédentes, je ne voulais pas supprimer l'
-F
option, car je l'ai explicitement mise là-bas dans l'espoir d'éviter d'afficher le différentielless
s'il est plus court qu'un écran.Pour obtenir le résultat souhaité, au lieu de supprimer
-F
, j'ai ajouté-X
:PAGER='less -RSFX'
. Cela a à la fois résolu legit diff
problème et en plus cela empêche d'afficher des différences courtes avecless
.la source
Je viens de courir dans un problème similaire.
git diff file
a montré rien parce que j'ai ajouté le fichier à l'index Git avec une partie de son nom en majuscules:GeoJSONContainer.js
.Ensuite, je l'ai renommé
GeoJsonContainer.js
et les modifications ont cessé d'être suivies.git diff GeoJsonContainer.js
ne montrait rien. J'ai dû supprimer le fichier de l'index avec un indicateur de force et ajouter à nouveau le fichier:la source
Vous n'avez pas vraiment posé de question, mais comme il s'agit d'un cas d'utilisation général que j'utilise assez souvent, voici ce que je fais. Vous pouvez essayer cela vous-même et voir si l'erreur persiste.
Mon hypothèse sur votre cas d'utilisation:
Vous avez un répertoire existant contenant des fichiers et des répertoires et vous souhaitez maintenant le convertir en un dépôt Git qui est cloné à partir d'un autre endroit sans changer aucune donnée dans votre répertoire actuel.
Il y a vraiment deux façons.
Cloner le dépôt - mv
.git
- git reset --hardCette méthode est ce que vous avez fait - pour cloner le référentiel existant dans un répertoire vide, puis déplacer le
.git
répertoire dans le répertoire de destination. Pour travailler sans problème, cela vous oblige généralement à exécuterCependant, cela changerait l'état des fichiers dans votre répertoire actuel. Vous pouvez essayer ceci sur une copie / rsync complète de votre répertoire et étudier les changements. Au moins après, vous ne devriez plus voir les écarts entre
git log
etstatus
.Init nouveau référentiel - pointer vers l'origine
Le second est moins dérangeant:
cd
dans votre destination, et démarrez un nouveau référentiel avecEnsuite, vous dites à ce nouveau référentiel, qu'il a un ancêtre ailleurs:
Puis en toute sécurité
pour copier les données sans modifier vos fichiers locaux. Tout devrait aller bien maintenant.
Je recommande toujours la deuxième manière d'être moins sujette aux erreurs.
la source
.git
dossiers dans d'autres zones de travail, nous violons potentiellement les hypothèses de git. Si cela entraîne un comportement erratique, nous ne pouvons pas blâmer git, nous devons nous blâmer d'avoir joué des tours avec git. git fournit des moyens pour résoudre ce problème, par exemplereset --hard
. C'est juste que ce n'est pas ce que nous voulons. C'est exactement la raison pour laquelle lainit/remote add
voie est recommandée, et tout va bien.remote add
façon de faire peut toujours être appliquée à une situationJe suis de nouveau tombé sur ce problème. Mais cette fois, cela s'est produit pour une raison différente. J'avais copié des fichiers dans le dépôt pour écraser les versions précédentes. Maintenant, je peux voir que les fichiers sont modifiés mais diff ne renvoie pas les diffs.
Par exemple, j'ai un fichier mainpage.xaml. Dans l'Explorateur de fichiers, j'ai collé un nouveau fichier mainpage.xaml sur celui de mon dépôt actuel. J'ai fait le travail sur une autre machine et je viens de coller le fichier ici.
Le fichier est modifié, mais lorsque j'exécute git diff, il n'affiche pas les modifications. C'est probablement parce que le fichier info du fichier a changé et que git sait que ce n'est pas vraiment le même fichier. Intéressant.
Vous pouvez voir que lorsque j'exécute diff sur le fichier, il ne montre rien, renvoie simplement l'invite.
la source
J'ai eu ce même problème décrit de la manière suivante: Si j'ai tapé
Git est simplement retourné à l'invite sans erreur.
Si j'ai tapé
Git est simplement retourné à l'invite sans erreur.
Enfin, en lisant autour de moi, j'ai remarqué que cela
git diff
appelle en fait lemingw64\bin\diff.exe
à faire le travail.Voici l'affaire. J'exécute Windows et j'avais installé un autre utilitaire Bash et il a changé mon chemin pour qu'il ne pointe plus vers mon répertoire mingw64 \ bin .
Donc, si vous tapez:
et il revient simplement à l'invite, vous pouvez avoir ce problème.
Enfin, pour résoudre ce problème, j'ai en fait copié mon
mingw64\bin
répertoire à l'emplacement où Git le recherchait. Je l'ai essayé et cela n'a toujours pas fonctionné.Ensuite, j'ai fermé ma fenêtre Git Bash et l' ai rouverte dans mon même référentiel qui échouait et maintenant cela fonctionne.
la source