2016-11-21 1 views
2

Lorsque je fais git diff, il essaie de lancer mon outil de comparaison avec des fichiers qui n'existent pas. Je suppose qu'il obtient la dernière version du fichier .gitignore modifié et le copie dans un fichier temporaire. Donc, je vois le lancement:git diff essaie de comparer les fichiers qui n'existent pas

"C:\Program Files\Git\usr\bin\diff.exe" .gitignore C:/temp/D4Sgyb_.gitignore 55f1.... 100644 .gitignore 000.... 100644 

Mais l'outil diff se plaint, à juste titre, que C:/temp/D4Sgyb_.gitignore n'existe pas. Cela n'est-il pas créé ou supprimé trop tôt?

+0

Normalement 'git diff' fait son propre diff interne, mais si vous lui dites * d'utiliser un autre programme, il invoque ce diff" externe "avec sept arguments: * chemin d'accès ancien fichier ancien-hex ancien mode nouveau -file nouveau-hex nouveau-mode *. Cela semble être le lancement d'un diff externe. Voir https://www.kernel.org/pub/software/scm/git/docs/git.html#_git_diffs – torek

+0

Mais il semble que ce soit en train de créer le fichier temporaire qu'il transmet à l'outil externe. – Marc

+0

Intéressant. Les docs mentionnent (et le code est écrit pour le faire) que Git va supprimer le fichier temporaire dès que le programme externe se termine, c'est-à-dire qu'il quitte et que le processus est collecté par Git. Je ne "fais" pas Windows mais peut-être que quelque chose fait l'équivalent d'un "double fork" Unix/Linux? Ou c'est juste un bug dans Windows Git, à défaut de remarquer qu'il n'a jamais été capable de créer le fichier temporaire. :-) – torek

Répondre

0

À l'intérieur de repo git chaque fichier est compressé. Donc, si vous voulez comparer un fichier qui n'est pas dans votre répertoire de travail, git doit décompresser ce fichier en répertoire temporaire.

Peut-être que votre répertoire C:/temp n'existe pas ou que vous n'y avez pas accès (ou que certains antivirus suppriment ce fichier). Je crois que "C:/temp" est un mauvais chemin pour Windows moderne. Vérifiez votre chemin d'accès.

+0

Ce n'est en fait pas 'c: \ temp' mais le dossier'% temp% 'de mon utilisateur. Je viens d'anonymiser les données. J'ai effectivement droit à ce dossier. – Marc

+0

Utilisez-vous des utilitaires diff internes ou d'autres applications et vous les "anonymisez"? – KoVadim

+0

Je l'ai fait à l'origine, mais je suis revenu à l'outil git diff pour voir si cela a aidé. L'exemple ci-dessus est en effet le chemin vers le fichier diff.exe que j'utilise. – Marc