2014-01-14 11 views
19

Ich habe ein Repo Ich fügte ein gitattributes hinzu und arbeitete daran gut. Ich synchronisiere es via Dropbox mit einem anderen Rechner. Als ich es auf die andere Maschine öffnete, erschien plötzlich eine Reihe von Dateien auf dem nicht gesicherten Bereich als total diffs (die ganze Datei ein riesiges diff, was Zeilenendungen diff bedeutet) - meine crlf-Endungen sind im Grunde .* text=auto und ich arbeite an Windows. Ich habe versucht, die Änderungen zu speichern, den Zweig neu zu setzen usw. Schließlich entschied ich, die Dateien zu committen und machte dann einige andere Commits, die ich neu ordnen wollte (und Squash), bevor die Zeilenenden committen. Wenn ich Rebasieren versuchen bekomme ich ein:git line endings - kann nicht verstauen, zurücksetzen und kann jetzt nicht über falsche Zeilenenden rebit commit

error: Your local changes to the following files would be overwritten by merge 
     # those same files 
Please, commit your changes or stash them before you can merge. 
Aborting 
Could not apply 89b25b81fff1a1e7893319e123aaaca9c4162a95... <commit message> 

Natürlich Stash funktioniert nicht

Ist es ein Fehler?

Verwandte:

EDIT Nichts mit Maschinen zu tun - auf der gleichen Maschine einige (...) Operationen machen nur diese Dateien (sie sind auf der .gitattributes als Text) erscheinen im Abschnitt "geändert". Die einzige Lösung, die zu existieren scheint, ist:

git rm --cached -r . 
git reset --hard 

SORGFÄLTIG

EDIT: Hack oben alias Status bewegt:

[alias] 
    crlf = !git rm -r . --cached -q && git reset --hard 

UPDATE 2015.09.30: Ich habe Ein Git Repo in einer NTFS-Partition, die ich von Windows 7 und Arch Linux in einer Dual-Boot-Umgebung verwende. Wenn ich windows herunter und boote ich in Arch zwei Dateien (html) zeigen als total diffs (line end diffs). Die obige Problemumgehung funktioniert nicht - es sei denn, Sie es mehrmals Auffrischen der gui dazwischen ...

Meine .gitattributes gelten:

* text=auto 

*.py text diff=python 
*.html text 
.project text 
*.pkl -text 

# M$ files 
*.bat text eol=crlf 

# UNIX files 
**/generate_second_post text eol=lf 

# git files - have them with LF, as I edit them via the shell (echo etc) 
*.gitignore text eol=lf 
*.gitattributes text eol=lf 

NB: Linux lässt mich verpflichten, Schalter Äste usw., aber gewonnen Lass mich nicht zurücklegen - und diese Diffs erscheinen immer in gitk/git gui.

+0

Haben Sie das versucht? 'git add -u.; git reset; ' –

+0

@ SzerémiAttila: hast du es in meinem Szenario versucht und es funktioniert? Was soll das tun? –

+0

Fügt alle überwachten Dateien zum Index hinzu und entfernt sie dann mit dem Index, wobei alle Änderungen in Ihren Dateien beibehalten werden. Ich habe das schon früher in einer ähnlichen Situation gemacht und Git wurde klar, dass sich nichts wirklich verändert hat, was die Probleme der Zeilenenden verschwinden lässt. Und ich habe bereits eine Frage wie diese zuvor mit der gleichen Antwort beantwortet: http://stackoverflow.com/questions/10890380/git-thinks-files-have-changed/11258263 –

Antwort

1

Haben Sie das versucht?

git add -u . 
git reset 
+0

Bitte bedenken Sie, dass Sie den Rest Ihrer Kommentare hinzufügen können, um die Kommentatoren zu beruhigen - sie haben Recht, aber Sie haben bereits die Informationen in Ihren Kommentaren angegeben;) –

+1

Nein - hat nicht funktioniert - immer noch mit 'git rm --cached -r .; git reset --hard' –

3

Wir in dieser Ausgabe lief heute, wo es das Problem schien von einigen CRLF bezogenen stammten Fragen im Zusammenhang mit einer neu hinzugefügten .gitattributes Datei mit einer einzigen Zeile * text=auto. Wenn Sie eine neue Zweigstelle umgestuft oder neu angelegt haben, würde diese Datei Ihnen folgen und alle Änderungen ruinieren, die darauf folgten, und Sie daran hindern, diese Zweigstelle zu verlassen, ohne sie vorher zu begehen.

Wir setzten zunächst dies durch einen vorübergehenden Zweig Check-out, zurückkehrt um die Datei wieder zu einem gesunden Zustand (vor Änderungen), zu begehen und dann auf der gesamte Branche ein rebase tun zurück zu dem ältesten commit, um es so aussehen zu lassen, Meister. Das hat eine Weile funktioniert, aber danach ist eine ähnliche Datei aufgetaucht und derselbe Fix hat nicht mehr funktioniert.

Was wir schließlich mit ging, war ähnlich, was OP in seinem Update geteilt .. eine einzige Zeile innerhalb .git/info/attributes mit file-to-remove -text scheint das Problem zu mildern. Ich sage abmildern, weil ich nicht sicher bin, ob es irgendwelche nachteiligen Implikationen gibt, dies zu tun, das war auch für eine Datei, also könnte es auch nicht so gut funktionieren, wenn überhaupt.

Verwandte Themen