Gitattributes Binary Optionen
Ich oft berühren viele Zeilen, weil I39m experimentieren mit verschiedenen Ideen, Hinzufügen von Spuren Aussagen zu sehen, wie sie arbeiten, etc. Dann möchte ich vielleicht nur eine Änderung an zwei oder drei Zeilen und haben git völlig ignorieren die anderen, weil ich hatte setzen Sie zurück sie Weise fand ich sie (oder so dachte ich). Ndash MatrixFrog Nov 25 10 at 17:29 Der einzige moderne Editor Ich weiß, dass die falsche Sache ist Visual Studio. Visual Studio wird gerne eine Datei mit LF-Zeilenende öffnen. Wenn Sie dann neue Zeilen einfügen, fügen Sie CRLF ein, und speichern Sie gemischte Zeilenendungen. Microsoft verweigert dies zu beheben, die eine ziemlich große Makel auf eine ansonsten ziemlich gute IDE ist: - (ndash Jon Watte Git hat zwei Modi, wie es behandelt Linienendungen: Sie können den Modus Wenn core. autocrlf auf true gesetzt ist, bedeutet dies, dass jedes Mal, wenn Sie eine Datei hinzufügen, um die git repo, dass git denkt, ist eine Textdatei, wird es wiederum Alle CRLF-Zeilenenden auf nur LF, bevor sie es in der commit. Wann immer Sie git Kasse etwas, werden alle Textdateien automatisch ihre LF Zeile Endungen in CRLF-Endungen konvertiert werden. Dies ermöglicht die Entwicklung eines Projekts über Plattformen, die unterschiedliche Zeilenende verwenden Stile ohne Commits ist sehr laut, weil jeder Editor die Zeile endet Stil wie die Linie endet Stil ist immer konsequent LF. Der Nebeneffekt dieser bequeme Konvertierung, und das ist, was die Warnung youre sehen, ist, dass, wenn eine Textdatei Sie ursprünglich hatte LF-Endungen anstelle von CRLF, wird es mit LF wie gewohnt gespeichert werden, aber wenn ausgecheckt später wird es CRLF-Endungen haben. Für normale Textdateien ist dies in der Regel gut. Die Warnung ist eine zu Ihrer Information in diesem Fall, aber wenn git falsch eine binäre Datei als Textdatei beurteilt, ist es eine wichtige Warnung, da Git dann Ihre Binärdatei beschädigen würde. Wenn core. autocrlf auf false gesetzt ist, wird keine line-ending-Konvertierung durchgeführt, so dass Textdateien im as-is überprüft werden. Dies funktioniert normalerweise ok, solange alle Ihre Entwickler sind entweder auf Linux oder alle unter Windows. Aber nach meiner Erfahrung neige ich noch dazu, Textdateien mit gemischten Zeilenenden zu erhalten, die am Ende Probleme verursachen. Meine persönliche Vorliebe ist, die Einstellung als einen Windows-Entwickler eingeschaltet zu lassen. Diese Nachrichten sind auf den falschen Standardwert von core. autocrlf unter Windows zurückzuführen. Das Konzept von autocrlf ist, die Zeilenendekonvertierungen transparent zu behandeln. Und es tut schlechte Nachrichten: Wert muss manuell konfiguriert werden. Gute Neuigkeiten: es sollte nur einmal pro git Installation durchgeführt werden (pro Projekt Einstellung ist auch möglich). Erinnerung: crlf win-style End-of-line Marker, lf unix-style. Beachten Sie, dass cr (mac-style) in nicht betroffen für eine von drei Optionen oben. Autocrlf true, wenn Sie unix-style lf in einer Ihrer Dateien (RARELY) haben, - autocrlf-Eingabe, wenn Sie win-style crlf in einer Ihrer Dateien haben (fast IMMER), - Autocrlf false - NEVER Was bedeutet diese Warnung bedeuten Die Warnung LF wird durch CRLF ersetzt werden, sagt, dass Sie (mit autocrlf true) verlieren Ihre unix-style LF nach commit-checkout Zyklus (es wird durch Windows-style CRLF ersetzt werden). Git erwartet nicht, dass Sie unix-style LF unter Windows verwenden. Die Warnung CRLF wird ersetzt durch LF sagt, dass Sie (mit autocrlf-Eingabe) verlieren Ihre Windows-Stil CRLF nach einem Commit-Checkout-Zyklus (es wird durch Unix-style LF ersetzt werden). Verwenden Sie nicht Eingabe unter Windows. Ein weiterer Weg, um zu zeigen, wie autocrlf arbeitet, wobei x entweder CRLF (Windows-style) oder LF (unix-style) ist und Pfeile für Default-Wert für core. autocrlf stehen, wird während der git-Installation ausgewählt und in systemweite gitconfig (ProgramFiles X86) gitetcgitconfig). Auch therere (Kaskadierung in der folgenden Reihenfolge): - global (pro Benutzer) gitconfig befindet sich bei. gitconfig. Noch ein anderer - global (pro Benutzer) gitconfig bei XDGCONFIGHOME git config oder HOME. config git config und - local (pro-repo) gitconfig bei. git config im Arbeitsverzeichnis. Schreiben Sie git config core. autocrlf im Arbeitsverzeichnis, um den aktuell verwendeten Wert zu überprüfen und - autocrlffalse auf systemweite gitconfig pro Systemlösung zu setzen - git config --global core. autocrlf falsche pro Benutzerlösung - git config - Lokale core. autocrlf false pro-Projekt-Lösung Moral (für Windows): - Verwenden Sie core. autocrlf true, wenn Sie planen, dieses Projekt auch unter Unix zu verwenden (und nicht bereit, Ihre Editor-IDE für Unix-Zeilenendungen zu verwenden), - core verwenden. autocrlf false, wenn Sie planen, dieses Projekt nur unter Windows zu verwenden, - verwenden Sie nie core. autocrlf Eingang, es sei denn, Sie haben einen guten Grund (zB wenn youre unter Verwendung von Unix-Dienstprogramme unter Windows oder wenn Sie in makefiles Fragen), PS Was zu wählen Wenn Sie git für Windows installieren Wenn Sie keine Ihrer Projekte unter Unix verwenden möchten, stimmen Sie nicht mit der ersten Standardoption überein. Wählen Sie die dritte (Checkout as-is, Commit as-is). Diese Meldung wird nicht angezeigt. Jemals. PPS Meine persönliche Vorliebe konfiguriert die Editor-IDE, Unix-style endings zu verwenden und core. autocrlf auf false zu setzen. PPPS Warnung: git config Einstellungen können durch gitattributes Einstellungen überschrieben werden. Sowohl unix2dos als auch dos2unix gibt es in windows mit gitbash. Sie können den folgenden Befehl verwenden, um UNIX (LF) - DOS (CRLF) Konvertierung durchzuführen. Daher erhalten Sie nicht die Warnung. Aber führen Sie nicht diesen Befehl auf einer vorhandenen CRLF-Datei, dann erhalten Sie leere Zeilenumbrüche jede zweite Zeile. Dos2unix - D Dateiname funktioniert nicht mit jedem Betriebssystem. Bitte überprüfen Sie diesen Link auf Kompatibilität. Wenn Sie aus irgendeinem Grund den Befehl erzwingen müssen, verwenden Sie --force. Wenn es ungültig sagt, verwenden Sie - f. Ich hatte auch dieses Problem. SVN tut keine Linie, die Umwandlung beendet, also werden Akten mit CRLF Linie Enden intakt gebunden. Wenn Sie dann git-svn verwenden, um das Projekt in git dann die CRLF-Endungen persistent über in das git-Repository, die nicht die staatliche git erwartet, sich selbst zu finden - die standardmäßig auf nur unix linux (LF) Zeilenenden überprüft werden In. Wenn Sie dann überprüfen Sie die Dateien auf Windows, die Autocrlf - Konvertierung die Dateien intakt (da sie bereits die richtigen Endungen für die aktuelle Plattform), aber der Prozess, der entscheidet, ob es einen Unterschied zu den eingecheckten Dateien führt die Reverse-Konvertierung vor dem Vergleich, was zu vergleichen, was es denkt, ist ein LF in der ausgecheckten Datei mit einem unerwarteten CRLF im Repository. Soweit ich sehe, Ihre Auswahl sind: Re-Importieren Sie Ihren Code in ein neues Git-Repository ohne Verwendung von git-svn, bedeutet dies, dass Zeilenenden in der intial git commit konvertiert werden --all Setzen Sie autocrlf auf false, und ignorieren Sie die Tatsache Dass die Zeilenendungen nicht in gits bevorzugter Stil sind. Schauen Sie Ihre Dateien mit autocrlf aus, fixieren Sie alle Zeilenenden, überprüfen Sie alles wieder in, und schalten Sie es wieder ein. Aktualisieren Sie Ihr Repositorys-Protokoll, so dass das ursprüngliche Commit nicht mehr die CRLF enthält, die git nicht erwartet. Fußnote: Wenn Sie Option 2 wählen, dann meine Erfahrung ist, dass einige der Hilfs-Tools (Rebase, Patch etc.) nicht mit CRLF-Dateien zu bewältigen und Sie werden am Ende früher oder später mit Dateien mit einem Mischung von CRLF und LF (inkonsistente Zeilenenden). Ich kenne keine Möglichkeit, das Beste von beiden zu bekommen. Ich weiß nicht viel über git auf Windows, aber. Erscheint mir, dass git das Rückkehrformat konvertiert, um das der laufenden Plattform (Windows) zu entsprechen. CRLF ist das Standardrückgabeformat in Windows, während LF das Standardrückgabeformat für die meisten anderen Betriebssysteme ist. Die Wahrscheinlichkeit ist, dass das Rückgabeformat korrekt angepasst wird, wenn der Code in ein anderes System verschoben wird. Ich rechne auch git ist schlau genug, um binäre Dateien intakt zu halten, anstatt zu versuchen, LFs zu CRLFs in, sagen wir, JPEGs zu konvertieren. Zusammenfassend, müssen Sie wahrscheinlich nicht zu viel ärgern über diese Konvertierung. Wenn Sie jedoch zum Archivieren Ihres Projekts als Tarball gehen, würden Kollegen wahrscheinlich mit LF-Zeilenabschlüssen lieber als CRLF schätzen. Abhängig davon, wie viel Sie Pflege (und je nach Ihnen nicht mit Editor), möchten Sie vielleicht git verwenden LF zurückgibt, wenn Sie können :) Anhang: CR ist ASCII-Code 13, ist LF ASCII-Code 10. Daher ist CRLF zwei Byte, während LF eins ist. Ein GitHubs Artikel auf Linie Enden wird allgemein erwähnt, wenn man über dieses Thema spricht. Meine persönliche Erfahrung mit der Verwendung der oft empfohlenen core. autocrlf config Einstellung war sehr gemischt. Im mit Windows mit Cygwin, die sich mit Windows-und UNIX-Projekte zu verschiedenen Zeiten. Sogar meine Windows-Projekte verwenden manchmal Bash-Shell-Skripte, die UNIX (LF) Zeilenendungen erfordern. GitHubs empfahl core. autocrlf Einstellung für Windows, wenn ich auschecken ein UNIX-Projekt (das funktioniert perfekt auf Cygwin - oder vielleicht Im beitragen, um ein Projekt, das ich auf meinem Linux-Server), werden die Textdateien mit Windows ausgecheckt ( CRLF) Zeilenenden, die Probleme verursachen. Grundsätzlich für eine gemischte Umgebung wie ich, die Festlegung der globalen core. autocrlf auf eine der Optionen nicht gut funktioniert in einigen Fällen. Diese Option kann auf einer lokalen (Repository) git config gesetzt werden, aber auch das wäre nicht gut genug für ein Projekt, das sowohl Windows-und UNIX-bezogene Zeug enthält (z. B. ich habe ein Windows-Projekt mit einigen Bash-Utility-Skripts). Die beste Wahl Ive gefunden wird, um pro-Repository. gitattributes Dateien zu erstellen. Der GitHub Artikel erwähnt es. Beispiel aus diesem Artikel: In einem meiner Projekte Repository: Es ist ein bisschen mehr Dinge zu gründen, aber es einmal pro Projekt, und jeder Mitarbeiter auf jedem Betriebssystem sollte keine Probleme mit Zeilenenden bei der Arbeit mit diesem Projekt haben. Wenn Sie Git verwenden, um mit anderen auf GitHub zusammenzuarbeiten, stellen Sie sicher, dass Git richtig konfiguriert ist, um Zeilenendungen zu behandeln. Jedes Mal, wenn Sie Return auf Ihrer Tastatur youre tatsächlich einfügen ein unsichtbares Zeichen namens eine Zeile endet. Historisch gesehen haben unterschiedliche Betriebssysteme Zeilenenden unterschiedlich behandelt. Wenn Sie Änderungen in einer Datei anzeigen, behandelt Git Zeilenende auf seine eigene Weise. Da Sie an Projekten mit Git und GitHub arbeiten, kann Git unerwartete Ergebnisse erzielen, wenn Sie beispielsweise auf einem Windows-Computer arbeiten und Ihr Mitarbeiter eine Änderung in OS X vorgenommen hat. Globale Einstellungen für Zeilenende Der Befehl gonconfig core. autocrlf Wird verwendet, um zu ändern, wie Git Zeilenendungen behandelt. Es dauert ein einziges Argument. Unter OS X übergeben Sie einfach die Eingabe an die Konfiguration. Beispiel: Unter Windows gehen Sie einfach zur Konfiguration über. Zum Beispiel: Unter Linux führen Sie einfach die Eingabe in die Konfiguration. Beispiel: Unter OS X und Linux möchten Sie normalerweise Eingabe für diese Einstellung übergeben. Unter Windows möchten Sie normalerweise true verwenden. Beispiel: Pro-Repository-Einstellungen Optional können Sie die Art und Weise konfigurieren, wie Git die Zeilenendungen pro Repository verwaltet, indem Sie eine spezielle. gitattributes-Datei konfigurieren. Diese Datei wird in das Repository übergeben und überschreibt eine Core. autocrlf-Einstellung, die für alle Benutzer unabhängig von ihren Git-Einstellungen konsistent ist. Der Vorteil einer. gitattributes-Datei ist, dass Ihre Zeilenkonfigurationen mit Ihrem Repository verknüpft sind. Sie müssen sich keine Sorgen darüber, ob oder nicht Mitarbeiter haben die gleiche Zeile endet Einstellungen, die Sie tun. Die. gitattributes-Datei muss im Stammverzeichnis des Repository erstellt und wie jede andere Datei übergeben werden. Hier ist ein Beispiel für die Datei im GitHub Developers Guide. Eine. gitattributes-Datei sieht wie eine Tabelle mit zwei Spalten aus: Auf der linken Seite befindet sich der Dateiname für Git, der übereinstimmt. Auf der rechten Seite befindet sich die Zeilenendekonfiguration, die Git für diese Dateien verwenden soll. Hier ist eine Beispieldatei. gitattributes. Sie können es als Vorlage für Ihre Repositories verwenden: Youll bemerken, dass Dateien aufeinander abgestimmt sind. S. png -, durch ein Leerzeichen getrennt, dann mit einer Einstellung - Text. Text eolcrlf. binär. Nun gehen über einige mögliche Einstellungen unten. Textauto Git wird die Dateien in der Weise behandeln, wie es denkt, ist am besten. Dies ist eine gute Standardoption. Text eolcrlf Git wandelt immer Zeilenendungen in CRLF an der Kasse um. Sie sollten dies für Dateien verwenden, die CRLF-Endungen auch auf OSX oder Linux beibehalten müssen. Beispielsweise ist hier ein Windows-Projekt, das CRLF-Zeilenendungen erzwingt. Text eollf Git wandelt immer Zeilenenden zu LF auf Kasse um. Sie sollten dies für Dateien, die LF-Endungen, auch auf Windows halten müssen. Beispielsweise ist hier ein Projekt, das LF-Zeilenendungen erzwingt. Binary Git wird verstehen, dass die angegebenen Dateien nicht Text sind, und es sollte nicht versuchen, sie zu ändern. Die binäre Einstellung ist auch ein Alias für - text - diff. Aktualisieren eines Repository nach dem Ändern von Zeilenendungen Nachdem Sie die Option core. autocrlf festgelegt und eine. gitattributes-Datei übergeben haben, können Sie feststellen, dass Git Dateien, die Sie nicht geändert haben, begehen möchte. An dieser Stelle ist Git bemüht, die Zeilenendungen jeder Datei für Sie zu ändern. Der beste Weg, um automatisch Ihre Repositorys Zeilenendungen zu konfigurieren, ist das erste Backup Ihrer Dateien mit Git, löschen Sie jede Datei in Ihrem Repository (außer dem. git-Verzeichnis), und dann die Dateien alle auf einmal wiederherzustellen. Speichern Sie Ihre aktuellen Dateien in Git, so dass keine Ihrer Arbeit verloren geht. Entfernen Sie jede Datei aus Gits-Index. Schreiben Sie den Git-Index neu, um alle neuen Zeilenenden aufzuheben. Fügen Sie alle geänderten Dateien zurück, und bereiten Sie sie für ein Commit vor. Dies ist Ihre Chance zu prüfen, welche Dateien, wenn überhaupt, wurden unverändert. Übernehmen Sie die Änderungen an Ihrem Repository.
Comments
Post a Comment