Zusammenführen ohne Leerzeichenkonflikte

179

Ich habe ein Problem, bei dem ich ein großes Commit habe, das ungefähr tausend Codezeilen ändert, Leerzeichen vom Zeilenende entfernt und Leerzeichen vor Tabulatoren entfernt.

Es gibt auch ungefähr 50 Pull-Anfragen für dieses Projekt, die alle Konflikte haben, wenn mein Commit zusammengeführt wird. Gibt es eine Möglichkeit, wie git so eingerichtet werden kann, dass beim Zusammenführen zukünftiger Commits Konflikte ignoriert werden, bei denen es sich bei einem von ihnen nur um eine Leerzeichenänderung handelt?

Das Ändern von Git selbst oder die Verwendung eines Drittanbieter-Tools ist nicht möglich, aber die Verwendung eines Hooks ist in Ordnung.

Callumacrae
quelle
Mögliches Duplikat von Git Whitespace-Problemen
Cees Timmerman

Antworten:

245
 git merge -Xignore-all-space

Oder (genauer)

 git merge -Xignore-space-change

sollte ausreichen, um alle platzbezogenen Konflikte während der Zusammenführung zu ignorieren.

Siehe git diff :

--ignore-space-change

Ignorieren Sie Änderungen in der Anzahl der Leerzeichen.
Dies ignoriert Leerzeichen am Zeilenende und betrachtet alle anderen Sequenzen eines oder mehrerer Leerzeichen als gleichwertig.

--ignore-all-space

Ignorieren Sie Leerzeichen, wenn Sie Linien vergleichen.
Dies ignoriert Unterschiede, selbst wenn eine Zeile Leerzeichen enthält, während die andere Zeile keine Leerzeichen enthält.

ks1322 fügt in den Kommentaren einen guten Rat hinzu:

Es lohnt sich, --no-commitdie Zusammenführung vor dem eigentlichen Commit zusammenzuführen und zu überprüfen .


Das OP Callum Macrae meldet, dass in diesem Fall die Zusammenführung ohne Unterbrechung fortgesetzt wird und die in den Pull-Request-Patches enthaltenen nachgestellten Leerzeichen auf die lokalen Dateien angewendet werden.
Das OP verwendet jedoch einen Pre-Commit-Hook, der sich um die nachfolgenden Leerzeichen kümmert.
(Ich nehme an, ein bisschen ähnlich wie dieses , auf das auch hier verwiesen wird ).


Auf den Pre-Commit-Hook des OP wird hier verwiesen :

Zusätzlich zum Entfernen von nachgestellten Leerzeichen werden ein bis drei Leerzeichen vor Tabulatoren entfernt (ich habe die Tabulatorenbreite auf 4 gesetzt) ​​und EOLs hinzugefügt.
Ich habe Berichte erhalten, dass der Code, der die EOL hinzufügt, die Datei in Windows löscht, sie jedoch nicht replizieren konnte.

VonC
quelle
1
Aus meinen bisherigen Tests geht hervor, dass alle Leerzeichenänderungen in der Datei entfernt werden. Ich verwende jetzt jedoch den Pre-Commit-Hook, um Tailing Whitespace zu entfernen, sodass dies kein Problem darstellt.
Callumacrae
1
@ CallumMacrae: ok, und danke für das Feedback. Wieder habe ich Ihren Link in die Antwort für mehr Sichtbarkeit hinzugefügt.
VonC
1
git merge -Xignore-space-change- na ja, kann ich sicher sagen , diese Arbeit nicht tut ... . Das eine Stück Leerzeichen, das ich entfernen wollte, blieb übrig. Git ist absolut beschissen.
Jww
1
Es lohnt sich, --no-commitdie Zusammenführung vor dem eigentlichen Commit zusammenzuführen und zu überprüfen.
ks1322
1
-Xignore-all-space scheint nichts gegen Leerzeichen zu tun und --ignore-space-change wurde von git nicht als Option erkannt
Preza8