2013-03-28 12 views
12

Hier gesetzt ist mein System Dialog:Git-Dateien nach dem Auschecken geändert, Reset --hard usw. obwohl autocrlf auf false

unrollme-dev-dan:views Dan$ git reset --hard HEAD 
HEAD is now at 3f225e9 Fix scan titles 
unrollme-dev-dan:views Dan$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: app/signup/finish.html 
# modified: app/signup/scan.html 
# 

I autocrlf auf false gesetzt:

unrollme-dev-dan:unroll-website Dan$ git config core.autocrlf 
unrollme-dev-dan:unroll-website Dan$ 
unrollme-dev-dan:unroll-website Dan$ git config --global core.autocrlf 
unrollme-dev-dan:unroll-website Dan$ 

Und ich habe keine .gitattributes Dateien diese vermasselt:

unrollme-dev-dan:unroll-website Dan$ find . -name .gitattributes 
[ only results are in different directory tree ] 

Dies wird durch eine .gitattributes eine Ebene höher verursacht, wie in der Antwort unten angegeben.

Wenn ich eine od -c auf die Dateien zu tun, zeigt es \r\n. Ich weiß nicht, was sie "sein sollten", vermutlich sollten sie in \n enden und deshalb zeigt das diff. Aber was ich nicht verstehe, ist, wie diese Dateien möglicherweise beim Auschecken modifiziert werden könnten, selbst mit autocrlf false.

Was kann dazu führen, dass git eine Datei beim Checkout außer autocrlf ändert?

+0

Ist core.eol gesetzt? – Ikke

+0

core.eol ist nicht festgelegt. – djechlin

+0

Kann ein Duplikat von [diese Frage] sein (http: // stackoverflow.com/questions/11005688/git-autocrlf-false-git-status-still-zeigt-modifikationen), nicht stimmen zu schließen, bis einer von diesen eine richtige antwort hat, die für beide funktioniert. – djechlin

Antwort

15

Dieses Problem kann durch gitattributes' text Option https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html

Dieses Problem behoben, indem Sie vorübergehend die Bearbeitung Ihrer .gitattributes Datei in Ihrem Projektordner verursacht werden kann.

ändern Sie * text=auto zu #* text=auto machen Sie die notwendigen Änderungen an Dateien Zeilenenden und drücken Sie Ihre Festschreibung. Sie können es nach der Änderung erneut aktivieren oder alternativ eine der anderen Optionen auswählen, die Ihrem Projekt möglicherweise besser entsprechen.

+0

Natürlich, wenn Sie arbeitest du am selben git repo kannst du da tatsächlich feststellen * war * eine .gitattributes datei, nur nicht eine fand ich bei meiner suche ... – djechlin

+0

Danke! Mein Fall war etwas anders: Eine .jar-Datei wurde plötzlich als modifiziert angezeigt, nachdem ich .gitattributes hinzugefügt hatte. Ich habe dort eine Zeile eingefügt mit: * .jar binär – savedario

3

Ich hatte keine gitattributes Datei, wie in der angenommenen Antwort erwähnt, es war ein Dateiberechtigungs-Problem in meinem Fall. Um zu sehen, ob dies Ihr Problem ist, Unterschiede, um die geänderten Dateien überprüfen mit git diff, z.B .:

git diff path/to/file.html 

Wenn die einzige Änderung, die Sie sehen, ist alt Modus/neuer Modus, ist es wahrscheinlich ein Berechtigungsproblem. Sie können git sagen, mit Dateiberechtigungen Änderungen zu ignorieren:

git config core.filemode false 

oder

git config --global core.filemode false 

(je nachdem, wie Sie git).

Ich habe vor kurzem von der Verwendung von Cygwin git zu Git für Windows aus Leistungsgründen umgeschaltet, und damit TortoiseGit ordnungsgemäß funktioniert, könnte dies der Grund sein, warum Berechtigungen in meinem Fall weggeworfen wurden.

Referenzen:

  1. How do I remove files saying "old mode 100755 new mode 100644" from unstaged changes in Git?
+0

Danke für 'core.filemode', das löste meine Probleme unter Windows. – niahoo