2016-02-11 2 views
8

Comment faire msysgit pour numériser des fichiers pour de réels changements?Effectuer un scan profond git afin de comparer les fichiers pour réel

Actuellement, il semble s'appuyer sur l'horodatage des fichiers et donc il fait des erreurs: ne montre aucune différence là où il y a. J'ai essayé git update-index --refresh et git update-index --really-refresh. Les deux commandes se terminent immédiatement et ne semblent pas effectuer une analyse et une comparaison binaire de chaque fichier dans l'arborescence.

Une citation de another question:

Réglage core.trustctime-false fait git ignorer les changements parasites à ctime, qui se trouve apparemment sur certains systèmes de fichiers. J'ai besoin du comportement inverse: recalculer le hachage du fichier même si mtime n'a pas changé.

+2

http://stackoverflow.com/questions/9321253/how-to-make-git-check-every-files-contents-even-though-stat-info-may-not-have-c –

+1

@Josh Lee : Je dois admettre que la question est à peu près la même, mais il y a quelques considérations à laisser ma question: 1. Cette question n'a pas encore de solution; 2. Je n'ai pas trouvé cette question par mots-clés. Peut-être est-il formulé pour que personne ne puisse le trouver? 3. cette question a 3 ans et n'a que 129 vues. – Paul

+0

Bien qu'il n'y ait pas de réponse, la question est toujours un doublon. Marqué comme tel, il sera trouvé par mots-clés. Considérez bounty bump. – Basilevs

Répondre

6

Tout d'abord, vous devriez essayer de trouver la racine du problème. L'utilisation de l'information statistique par Git (non seulement l'horodatage, mais aussi la taille) est normalement très fiable. Si vous rencontrez un problème, cela signifie probablement que votre système est sérieusement endommagé. Git ne sera pas le seul outil à être brisé alors (votre système de sauvegarde et votre système de construction le seront probablement aussi).

Vous pouvez essayer (après avoir lu l'avertissement ci-dessous):

rm -f .git/index 
git reset HEAD 

La commande rm annulera évidemment toute information de l'indice, qui est la suivante: toutes les informations stat que Git utilise en interne pour éviter de comparer des fichiers (ce que vous attendez), ainsi que toutes les informations sur les fichiers non fusionnés que vous n'avez peut-être pas enregistrés dans votre index. Cela ne changera pas les informations validées, d'un autre côté. La commande git reset HEAD créera un nouvel index correspondant à HEAD, c'est-à-dire après cette commande, Git considère que vous n'avez pas modifié les modifications dans l'index. Git va restaurer les informations statistiques (c'est-à-dire refaire toute la comparaison de fichiers) au moment de git reset HEAD, donc c'est une solution pour dire à Git "oublier les statistiques maintenant", pour exécuter après avoir cassé vos informations statistiques, mais n'est pas un moyen de dire à Git "n'utilise plus jamais d'informations statistiques".

+0

En ce moment, je ne me souviens pas de ce que je faisais pour atteindre le résultat. Peut-être que je décompresse les fichiers d'une archive. En raison de la précision, j'accepte votre réponse. – Paul

2

Une chose que vous pouvez faire est de mettre à jour l'horodatage de tous les fichiers à l'heure actuelle; vous pouvez le faire avec find . -exec touch {} \;

+1

Oui, j'y ai pensé, mais c'est juste une solution de contournement, pas la solution authentique. – Paul