Frage

Ich habe eine Git-Repository bekommt, dass einige Dateien mit DOS-Format (\r\n Zeilenende) hat. Ich möchte nur die Dateien über dos2unix laufen (die alle Dateien in UNIX-Format ändern würde, mit Endungen \n Linie), aber wie wäre schlecht diese beeinflussen Geschichte, und ist es überhaupt zu empfehlen?

Ich gehe davon aus, dass der Standard ist immer UNIX-Zeilenende für Quelle gesteuerte Dateien zu verwenden und gegebenenfalls wechsle OS-spezifische Zeilenende lokal?

War es hilfreich?

Lösung

Der Ansatz, den Sie zu verwenden haben werden, hängt ab, wie öffentliche Repository ist.

Wenn Sie nicht oder Pflege kümmern über alle SHAs ändern, weil du bist mehr oder weniger die einzige es verwenden, aber will dieses Problem haben, für alle Zeiten aussortiert, können Sie ein git filter-branch und anwenden dos2unix auf alle Dateien ausführen in jedem begehen. (Wenn Sie das Repository freigeben, alle anderen Bedürfnisse mehr oder weniger, um es vollständig zu erneuern, so dass diese potenziell gefährlich ist.)

So ist die bessere Option und auch eine einfachere Möglichkeit wäre es in den aktuellen Köpfen nur zu ändern. Dies bedeutet, dass Ihre Vergangenheit verpflichtet hat noch \r\n Endungen aber wenn man viel Rosinenpickerei tut aus der Vergangenheit sollte dies kein Problem sein. Die diff Tools vielleicht ein bisschen beschweren öfter, natürlich, aber in der Regel werden Sie nur diff mit Commits in der Nähe, so dass dieses Problem löst sich, wie die Commits akkumulieren.

Und Endungen UNIX Linie sind Standard, Sie das richtig sind. Beste Ansatz ist der Editor auf Setup nur diese Endungen auch auf Windows zu schreiben. Ansonsten gibt es auch eine autocrlf Einstellung, die Sie verwenden können.


Neben der Geschichte Schreibungsteil:

Letztes Mal hat ich das gleiche tat, habe ich den folgenden Befehl, um alle Dateien auf Unix-Endungen zu ändern.

#!/bin/bash
all2dos() { find * -exec dos2unix {} \; }
export -f all2dos
git filter-branch -f --tree-filter 'all2dos' --tag-name-filter cat --prune-empty -- --all

Andere Tipps

Dieses crlf Ding fuhr uns verrückt, wenn wir aus dem SVN auf Git (in einer zentralen (nackten) wie) umgewandelt scm Umgebung. Die Sache, die letztlich hat uns war, dass wir die globale .gitconfig Datei für jeden Benutzer root kopiert (yep Windows und Linux) mit dem ersten ein von einem Windows-System kommen und mit core.autocrlf = true und core.safecrlf = false, die Verwüstung gespielt auf dem linux-Benutzer (wie bash-Skripte funktionieren nicht und alle, die schrecklich ^ M). Also haben wir zunächst eine Kasse und Klon-Skript, das eine dos2unix nach diesen Befehlen haben. Dann lief ich über die core.autocrlf und core.safecrlf Config-Elemente und setzte sie auf der Grundlage des O / S:

Fenster: core.autocrlf = true und core.safecrlf = false Linux: core.autocrlf = Eingang und core.safecrlf = false

Diese wurden eingestellt mit: --- unter Windows ---

git config --global core.autocrlf true
git config --global core.safecrlf false

--- auf Linux ---

git config --global core.autocrlf input
git config --global core.safecrlf false

Dann gilt für unsere Linux-Entwickler richten wir ein wenig Bash-Skript / usr / local / bin / gitfixcrlf:

#!/bin/sh
# remove local tree
git ls-files -z | xargs -0 rm
# checkout with proper crlf
git checkout .

Was nur hatte sie auf ihrem lokalen Sandbox-Klone laufen einmal. Jede künftige Klonen wurde richtig gemacht. Alle zukünftigen Push zieht jetzt wurden korrekt behandelt. So löste dies unsere mehrere O / S Probleme mit Zeilenvorschübe. Beachten Sie auch, dass Mac fällt in der gleichen Konfiguration wie Linux.

Für die weitere Lösung, haben einen Blick auf die core.autocrlf (und core.safecrlf) Konfigurationsparameter .

Auf diese einmal auf Ihr gesamtes Repository wird nur schaffen ein begehen, das ist ziemlich unmöglich ist, zu verschmelzen mit (da jede Zeile in diesen Dateien geändert werden), aber wenn man daran vorbei zu erhalten, soll es keine große Sache sein. (Ja, könnten Sie git filter-branch verwenden, um die Modifikation des ganzen Weg durch die Geschichte zu machen, aber das ist ein bisschen beängstigend.)

Wenn Sie Ihre Liste der Versionskontrolle von Dateien Binärdateien enthält, oder Sie können einfach nicht die Geschichte ändern ... hier ist ein handlicher Dandy Einzeiler:

https://unix.stackexchange.com/a/365679/112190

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top