Monday, 6 November 2017

Gitattributes Binär Optionen


Wenn Sie mit Git zusammenarbeiten, um mit anderen auf GitHub zusammenzuarbeiten, stellen Sie sicher, dass Git richtig konfiguriert ist, um Zeilenendungen zu behandeln. Jedes Mal, wenn du die Rückkehr auf deiner Tastatur drückst, fügst du eigentlich einen unsichtbaren Charakter ein. Historisch gesehen haben verschiedene Betriebssysteme Leitungsendungen unterschiedlich gehandhabt. Wenn Sie Änderungen in einer Datei anzeigen, behandelt Git Zeilenendungen auf seine eigene Weise. Da Sie bei Projekten mit Git und GitHub zusammenarbeiten, kann Git unerwartete Ergebnisse erzielen, wenn Sie beispielsweise auf einer Windows-Maschine arbeiten und Ihr Mitarbeiter eine Änderung in OS X vorgenommen hat. Globale Einstellungen für Zeilenendungen Der Befehl git config core. autocrlf Wird verwendet, um zu ändern, wie Git Linien endet. Es dauert ein einziges Argument. Bei OS X übergeben Sie einfach die Eingabe in die Konfiguration. Zum Beispiel: Unter Windows geht man einfach auf die Konfiguration über. Zum Beispiel: Unter Linux gehst du einfach die Eingabe in die Konfiguration. Zum Beispiel: Auf OS X und Linux möchten Sie in der Regel die Eingabe für diese Einstellung übergeben. Unter Windows willst du normalerweise true verwenden Zum Beispiel: Per-Repository-Einstellungen Optional können Sie die Art und Weise konfigurieren, wie Git Linienendungen auf einer Repository-Basis verwaltet, indem Sie eine spezielle. gitattributes-Datei konfigurieren. Diese Datei ist in das Repository eingegangen und überschreibt eine Einzelperson-core. autocrlf-Einstellung, um ein konsistentes Verhalten für alle Benutzer zu gewährleisten, unabhängig von ihren Git-Einstellungen. Der Vorteil einer. gitattributes-Datei ist, dass Ihre Linienkonfigurationen mit Ihrem Repository verknüpft sind. Sie müssen sich nicht darum kümmern, ob oder nicht Kollaborateure die gleichen Zeilenende Einstellungen haben, die Sie tun. Die. gitattributes-Datei muss im Stammverzeichnis des Repositorys erstellt und wie jede andere Datei begangen werden. Heres ein Beispiel für die Datei im GitHub Developers Guide. Eine. gitattributes-Datei sieht aus wie eine Tabelle mit zwei Spalten: Auf der linken Seite ist der Dateiname für Git zu übereinstimmen. Auf der rechten Seite ist die Linie endet Konfiguration, die Git für diese Dateien verwenden sollte. Heres ein Beispiel. gitattributes Datei. Sie können es als Vorlage für Ihre Repositories verwenden: Youll bemerken, dass Dateien abgestimmt sind -.c..sln. png -, durch einen Raum getrennt, dann gegeben eine Einstellung - Text. Text eolcrlf. binär. Gehen Sie gut über einige mögliche Einstellungen unten. Textauto Git wird die Dateien in was auch immer es denkt, ist am besten. Dies ist eine gute Standardoption. Text eolcrlf Git wird immer Line Endings zu CRLF bei der Kasse umwandeln. Sie sollten dies für Dateien verwenden, die CRLF-Endungen behalten müssen, auch auf OSX oder Linux. Zum Beispiel ist hier ein Windows-Projekt, das CRLF-Zeilenendungen erzwingt. Text eollf Git wird immer Line Endings zu LF bei der Kasse umwandeln. Sie sollten dies für Dateien verwenden, die LF-Endungen behalten müssen, auch unter Windows. Zum Beispiel ist hier ein Projekt, das LF-Linienendungen erzwingt. Binär 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 Repositorys nach dem Ändern von Zeilenendungen Nachdem Sie die core. autocrlf-Option festgelegt und eine. gitattributes-Datei festgelegt haben, können Sie feststellen, dass Git Dateien festlegen möchte, die Sie nicht geändert haben. An diesem Punkt ist Git eifrig, die Zeilenendungen jeder Datei für Sie zu ändern. Der beste Weg, um Ihre Repositorys Line Endings automatisch zu konfigurieren, besteht darin, zuerst Ihre Dateien mit Git zu sichern, jede Datei in deinem Repository zu löschen (mit Ausnahme des. git-Verzeichnisses) und dann die Dateien auf einmal wiederherzustellen. Sichern Sie Ihre aktuellen Dateien in Git, so dass keine Ihrer Arbeit verloren geht. Entfernen Sie jede Datei aus dem Gits-Index. Umschreiben Sie den Git-Index, um alle neuen Zeilenendungen aufzunehmen. Fügen Sie alle Ihre geänderten Dateien zurück, und bereiten sie für ein Commit vor. Dies ist Ihre Chance zu prüfen, welche Dateien, wenn überhaupt, unverändert waren. Beende die Änderungen an deinem Repository. Ich habe CRLF-Probleme nach der Verschmelzung von Bündeln von meinem Kollegen beobachtet. Manchmal wurden Linien mit LF in die Quellen gemischt, wahrscheinlich die, die in verschmolzen wurden. Deshalb haben wir beschlossen, die. gitattributes-Datei mit folgendem Inhalt hinzuzufügen (Kommentare entfernt): Jetzt beobachte ich das seltsame Verhalten. Ich kann viel verändert haben. Dateien (d. h. unstaged), die nicht dort sein sollten. Ich habe versucht, git zurückzusetzen - hart. Aber die Dateien haben immer noch den gleichen Status. Ich habe versucht, das Repository noch einmal zu klonen - das gleiche Ergebnis. Ich habe git Version 1.7.11.msysgit.0 installiert von der Git-1.7.11-preview20120620.exe als aktuelle Version für Windows heruntergeladen. Was soll ich nochmal versuchen. Es ist die Textauto-Einstellung in. gitattributes, die dieses Problem verursacht. Sie können es entfernen und glücklich leben, aber Sie können Dateien mit Nicht-Repo-Standard-Line-Codierungen oder sogar Dateien mit mehreren verschiedenen Zeilenende Kodierung (d. H. Sowohl LF und CRLF und sogar CR) in Ihrem Repo. Warum dies geschieht (Details) Wenn git eine Datei as-is auscheckt, woraufhin sie Zeilenendungen bei addcommit ändern wird. Die Datei ist in der Tat noch nicht geändert, aber git hält es schon als modifiziert, weil es sein wird. Aufgrund der Einstellungen des Repo. Irgendwie funktioniert es ein bisschen komisch mit git. Zum Beispiel, git reset - hart funktioniert manchmal und manchmal nicht, vielleicht abhängig von Ihren Einstellungen. Oder wenn du in deine. gitattributes gehst und die Erweiterung als Binär markierst, verschwindet die modifizierte Datei magisch: Der Effekt bleibt auch nach dem Entfernen der Binärmarkierung, auch wenn du git zurücksetzt - hart wieder, also könnte es ein Git sein Bug oder Git Caching Problem. Git-rm auf der Akte machen und dann git reset - hart wieder die modifizierte Markierung. Wie man es beheben Wir nehmen hier an, dass du deine Textauto-Einstellung behalten willst, so dass Git dich vor inkonsistenten Zeilenendungen in verschiedenen Textdateien warnt und in Zukunft. Wenn ja, wählen Sie Ihre Methode: Option 0. Vorzeitiges Dummkopf von Markierungsdateien als modifizierter Bearbeiten. gitattributes. Kommentieren textauto Save git status (dieser Schritt ist erforderlich, um git Datensatz Änderungen in. Gitattributes) git reset - hard (dies wird wiederherstellen textauto und auch nuke alle Änderungen in Ihrem Arbeitsverzeichnis, wenn youve gemacht). Dies funktioniert in der Regel (außer in vielleicht hartnäckigsten Fällen). Es verschiebt auch das Problem, das höchstwahrscheinlich irgendwann später auftauchen wird, weil Zeilenendungen noch nicht normalisiert wurden. Diese Option ist großartig, wenn Sie ein vorheriges Commit zurückspulen müssen, das nicht normalisiert wurde, wie bei einem Rebase oder einer anderen Git-Arbeit, wo Sie wissen, dass bestehende Commits die Line-Endungen normalisieren, aber Git beschwert sich über modifizierte Dateien, die Sie jetzt verhindern Von weiter Also grundsätzlich diese Methode verwenden, wenn Sie git brauchen, um zu halten und ignorieren geänderte Dateien, die wirklich nicht für Ihren bestimmten Kontext geändert wurden. Option 1 . Einfache Endbenutzer-Korrektur Wenn Sie nur ein paar Dateien haben, stellen Sie sicher, dass Ihre. gitattributes und core. autocrlf auf Ihre Vorlieben eingestellt sind, und dann machen Sie einfach einen git addcommit und Sie sollten dieses Problem nicht wieder sehen. Die Dateien werden in die gewünschten Zeilenendungen konvertiert und in Ihrem Repo gespeichert, wie in Ihrer Konfiguration angegeben. Dieses Commit wird in deinem Repo gespeichert, da sich die gesamte Datei geändert hat, weil jede Zeile ihre Zeilenendungen geändert hat. Für ein paar Dateien in einem größeren oder Open-Source-Repo ist das gut. Seien Sie sicher zu fusionieren oder Cherry-Pick, die in alle Ihre Filialen verpflichten, da das Problem in allen Filialen, die diese Dateien haben, bis Sie es beheben. Wenn du hier die Option 0 benutzt hast, dann gehst du, wenn du zu einem unfixierten Zweig wechsest und es beschwert, die Option 0 ausführen, dann mache das Fix (Merge oder Cherry Pick). WICHTIG: Wenn du diese Route von Option 1 gehst, kannst du die geänderten Dateien richtig umwandeln. Git kann es nicht für Sie tun, ganz wie Sie erwarten, also tun Sie es sich vor Ihrem Commit, dh verwenden Sie diese: Konvertieren von Newline-Formatierung von Mac zu Windows Der Grund git kann verwirrt werden Ich habe Dateien, die alle drei CR, LF - und CRLF-Zeilenende-Formatierung in ihnen. Nimm die in dein bevorzugtes Format selbst vor Commit. Option 2 . Fortgeschrittene Mechanik Git Geschichte Umschreiben Fix: Wenn Sie eine privatere Repo haben und haben keine Angst, Geschichte neu zu schreiben, gehen Sie zu sehen: Git sieht ganze Datei als eine Zeile aufgrund von Mac-Zeilen endet Dies wird umschreiben ganze Repo und loszuwerden, alle Zeile endet Fragen überall auf allen Bäumen, Zweige, für immer Seien Sie sicher, alle möglichen problemlosen Text-Datei-Erweiterungen, die Sie vielleicht normalisieren möchten, oder sonst können sie später auftauchen. In meinem Fall habe ich Option 2 gemacht, wie ich es mit vielen Dateianlagen in vielen Filialen zu tun hatte. Aber dann hatte ich einige unerwartete Erweiterungen zeigen, dass ich nicht normalisiert habe, und nur Option 1, wie ich nur 5-6 Dateien verpasst. Git: Umgang mit Line Endings 8211 Lösung Wenn Sie auf einer Plattform entwickeln und nicht teilen Ihren Code , Du wirst kein Problem mit den Zeilenendungen haben. Aber auf multiplatform entwickelte Projekt können Sie ein Problem mit verschiedenen Leitungsendungen 8211 Windows, Linux und Mac haben. Als Lösung hat Git die Möglichkeit, die Zeilenendungen konsistent zu machen. Um Ihre Umgebung einzurichten, setzen Sie die globalen Git-Einstellungen zuerst: Jeder Repo kann unterschiedliche Anforderung für die Zeilenendungen haben, so dass für jeden Repo die Zeilenendungen angegeben werden können. Im Repository-Ordner laufen: Um konsistent zu sein und die Zeilenende für verschiedene Dateien durch die Erweiterung zu definieren, können Sie die Datei "gitattributes" verwenden. Die Datei ist dem Repository verpflichtet und überschreibt die Entwicklereinstellung. Die. gitattributes-Datei sollte im Stammverzeichnis des Repositorys erstellt und in die Repo wie jede andere Datei eingefügt werden. Nachdem you8217ve die core. autocrlf-Option gesetzt und eine. gitattributes-Datei erstellt hat, können Sie feststellen, dass git Dateien festlegen möchte, die Sie nicht geändert haben. Das ist, weil git die Linienendungen für dich normalisieren möchte. Vergewissern Sie sich, dass Sie irgendwelche Arbeiten begangen haben, bevor Sie dies tun, oder es wird verloren gehen. Hinterlasse eine Antwort Abbrechen Antwort KategorienGitattributes (5) Manuelle Seite Wenn core. safecrlf auf true gesetzt oder warnt, überprüft Git, ob die Konvertierung für die aktuelle Einstellung von core. autocrlf reversibel ist. Für wahr, Git lehnt irreversible Umwandlungen für warnen, Git nur druckt eine Warnung, sondern akzeptiert eine irreversible Umwandlung. Die Sicherheit triggert, um eine solche Umwandlung in den Dateien im Arbeitsbaum zu verhindern, aber es gibt ein paar Ausnahmen. Auch wenn8230 git add sich nicht die Dateien im Arbeitsbaum berührt, würde die nächste Kasse, so dass die Sicherheits-Trigger Git gelten, um eine Textdatei mit einem Patch zu aktualisieren, berührt die Dateien im Arbeitsbaum, aber die Operation ist über Textdateien Und CRLF-Konvertierung ist über die Festsetzung der Linie endet Inkonsistenzen, so dass die Sicherheit nicht auslösen git diff selbst nicht berühren die Dateien in den Arbeitsbaum, wird es oft ausgeführt, um die Änderungen zu überprüfen, die Sie beabsichtigen, nächste git hinzufügen. Um frühzeitig Probleme zu lösen, löst die Sicherheit aus. Wenn das Attribut ident für einen Pfad gesetzt ist, ersetzt Git die ID im Blobobjekt mit Id:. Gefolgt von dem 40-stelligen hexadezimalen Blob-Objektnamen, gefolgt von einem Dollar-Zeichen bei der Kasse. Jede Byte-Sequenz, die mit Id beginnt und endet mit der Worktree-Datei, wird beim Einchecken mit Id ersetzt. Ein Filterattribut kann auf einen Zeichenfolgenwert gesetzt werden, der einen in der Konfiguration angegebenen Filtertreiber benennt. Ein Filtertreiber besteht aus einem sauberen Befehl und einem Verschlüsselungsbefehl, von denen jeder nicht spezifiziert werden kann. Bei der Kasse, wenn der Verschmierungsbefehl angegeben ist, wird der Befehl das Blob-Objekt aus seiner Standard-Eingabe zugeführt und seine Standardausgabe wird verwendet, um die Worktree-Datei zu aktualisieren. Ebenso wird der Clean-Befehl verwendet, um den Inhalt der Worktree-Datei beim Check-in zu konvertieren. Eine Verwendung der Inhaltsfilterung ist, den Inhalt in eine Form zu massieren, die für die Plattform, das Dateisystem und den Benutzer bequemer ist. Für diese Betriebsart ist der Schlüsselphrase hier bequemer und macht nichts unbrauchbares in nutzbares. Mit anderen Worten, die Absicht ist, dass, wenn jemand die Filter-Treiber-Definition, oder nicht über die entsprechenden Filter-Programm, das Projekt noch verwendbar ist. Eine weitere Verwendung der Inhaltsfilterung besteht darin, den Inhalt zu speichern, der nicht direkt im Repository verwendet werden kann (zB eine UUID, die sich auf den wahren Inhalt bezieht, der außerhalb von Git oder einem verschlüsselten Inhalt gespeichert ist) und ihn bei der Kasse in eine nutzbare Form umwandeln (zB Download Den externen Inhalt oder den verschlüsselten Inhalt entschlüsseln). Diese beiden Filter verhalten sich anders, und standardmäßig wird ein Filter als ersterer aufgenommen, der den Inhalt in eine bequemere Form massiert. Eine fehlende Filtertreiberdefinition in der config oder ein Filtertreiber, der mit einem Nicht-Null-Status beendet wird, ist kein Fehler, sondern macht den Filter zu einem No-Op-Durchgang. Sie können erklären, dass ein Filter einen Inhalt verwandelt, der von selbst für einen verwendbaren Inhalt unbrauchbar ist, indem er die filter. ltdrivergt. required Konfigurationsvariable auf true setzt. Zum Beispiel würden Sie in. gitattributes das Filterattribut für Pfade zuordnen. Dann würden Sie eine filter. indent. clean - und filter. indent. smudge-Konfiguration in Ihrer. gitconfig definieren, um ein Paar von Befehlen anzugeben, um den Inhalt von C-Programmen zu ändern, wenn die Quelldateien eingecheckt sind (Clean wird ausgeführt) und ausgecheckt ( Keine Änderung wird gemacht, weil der Befehl Katze ist). Für die besten Ergebnisse sollte Clean nicht seine Leistung weiter ändern, wenn es zweimal läuft (clean8594clean sollte gleichbedeutend mit sauberen), und mehrere Schmutzbefehle sollten nicht ändern saubere s Ausgang (smudge8594smudge8594clean sollte gleichbedeutend mit sauberen). Weitere Informationen finden Sie im Abschnitt "Zusammenführen". Der Einzugsfilter ist in dieser Hinsicht gut erzogen: er wird nicht die Eingabe ändern, die bereits korrekt eingerückt ist. In diesem Fall bedeutet das Fehlen eines Verschmutzungsfilters, dass der saubere Filter seine eigene Ausgabe akzeptieren muss, ohne ihn zu modifizieren. Wenn ein Filter erfolgreich sein muss, um den gespeicherten Inhalt verwendbar zu machen, können Sie erklären, dass der Filter erforderlich ist. In der Konfiguration: Sequenz f auf der Filterbefehlszeile wird durch den Namen der Datei ersetzt, an der der Filter arbeitet. Ein Filter könnte dies in Keyword-Substitution verwenden. Zum Beispiel: Beachten Sie, dass f der Name des Pfades ist, an dem gearbeitet wird. Abhängig von der Version, die gefiltert wird, ist die entsprechende Datei auf der Festplatte möglicherweise nicht vorhanden oder kann unterschiedliche Inhalte haben. Also, verschmieren und saubere Befehle sollten nicht versuchen, auf die Datei auf der Festplatte zuzugreifen, sondern nur als Filter auf den Inhalt, der ihnen bei der Standard-Eingabe zur Verfügung gestellt wird. Interaktion zwischen Checkincheckout-Attributen Im Check-In-Codepath wird die Worktree-Datei zunächst mit dem Filtertreiber konvertiert (falls angegeben und der entsprechende Treiber definiert), dann wird das Ergebnis mit ident (falls angegeben) verarbeitet und dann endlich mit Text (wieder, wenn Spezifiziert und anwendbar). Im Check-out-Codepath wird der Blob-Inhalt zunächst mit Text umgerechnet. Und dann ident und gefüttert zu filtern. Zusammenführen von Zweigen mit unterschiedlichen Checkincheckout-Attributen Wenn Sie Attribute einer Datei hinzugefügt haben, die dazu führt, dass das kanonische Repository-Format für diese Datei geändert wird, z. B. das Hinzufügen eines Cleansmudge-Filters oder texteolident-Attribute, das Verschmelzen von allem, wo das Attribut nicht vorhanden ist, würde normalerweise Zusammenführungskonflikte verursachen . Um diese unnötigen Zusammenführungskonflikte zu vermeiden, kann Git angewiesen werden, bei der Auflösung eines Drei-Wege-Zusammenführens einen virtuellen Auschecken und Einchecken aller drei Stufen einer Datei durchzuführen, indem die Konfigurationsvariable merge. renormalize gesetzt wird. Dies verhindert, dass Änderungen, die durch die Check-In-Konvertierung verursacht werden, zu falschen Zusammenführungskonflikten führen, wenn eine konvertierte Datei mit einer nicht konvertierten Datei zusammengeführt wird. Solange ein smudge8594clean die gleiche Ausgabe wie eine saubere sogar auf Dateien, die bereits verschmiert sind, führt, wird diese Strategie automatisch alle Filter-bezogenen Konflikte lösen. Filter, die nicht auf diese Weise handeln, können zusätzliche Zusammenführungskonflikte verursachen, die manuell gelöst werden müssen. Erzeugen von diff text Das Attribut diff beeinflusst, wie Git diffs für bestimmte Dateien erzeugt. Es kann Git sagen, ob man einen Text-Patch für den Pfad generieren oder den Pfad als Binärdatei behandeln soll. Es kann auch beeinflussen, welche Zeile auf dem Hunk-Header angezeigt wird - k, l n, m Zeile, erzähle Git, um einen externen Befehl zu verwenden, um das diff zu erzeugen, oder bittet Git, Binärdateien in ein Textformat zu konvertieren, bevor du das diff erzeugt Ein Pfad, auf den das Diff-Attribut gesetzt ist, wird als Text behandelt, auch wenn sie Byte-Werte enthalten, die normalerweise niemals in Textdateien wie NUL erscheinen. Ein Pfad, zu dem das Diff-Attribut nicht gesetzt ist, erzeugt Binärdateien (oder ein Binär-Patch, wenn Binär-Patches aktiviert sind). Ein Pfad, zu dem das Diff-Attribut nicht spezifiziert wird, bekommt seinen Inhalt inspiziert, und wenn er wie Text aussieht und kleiner als core. bigFileThreshold ist, wird er als Text behandelt. Ansonsten würde es Binärdateien unterscheiden. Diff wird mit dem angegebenen Diff-Treiber angezeigt. Jeder Fahrer kann eine oder mehrere Optionen angeben, wie im folgenden Abschnitt beschrieben. Die Optionen für den diff driver foo werden durch die Konfigurationsvariablen im diff. foo-Bereich der Git-Konfigurationsdatei definiert. Definieren eines externen Diff-Treibers Die Definition eines Diff-Treibers erfolgt in gitconfig. Nicht gitattributes Datei, so streng genommen diese Handbuchseite ist ein falscher Ort, um darüber zu sprechen. It8230 Um einen externen diff-Treiber jcdiff zu definieren. Fügen Sie einen Abschnitt zu Ihrer GITDIRconfig-Datei (oder HOME. gitconfig-Datei) wie folgt hinzu: Wenn Git muss Ihnen ein diff für den Pfad mit diff-Attribut auf jcdiff gesetzt zeigen. Es ruft den Befehl an, den du mit der obigen Konfiguration spezifiziert hast, d. h. j-c-diff. Mit 7 Parametern, genau wie das GITEXTERNALDIFF Programm heißt. Siehe git (1) für Details. Definieren eines benutzerdefinierten Hunk-Headers Jede Gruppe von Änderungen (genannt hunk) in der Text-Diff-Ausgabe wird mit einer Zeile des Formulars vorangestellt: Dies wird als Hunk-Header bezeichnet. Der TEXT-Teil ist standardmäßig eine Zeile, die mit einem Alphabet beginnt, ein Unterstrich oder ein Dollarzeichen, das entspricht, was GNU diff - p Ausgabe verwendet. Diese Voreinstellung ist jedoch nicht für einige Inhalte geeignet, und Sie können ein angepasstes Muster verwenden, um eine Auswahl zu treffen. Zuerst würden Sie in. gitattributes das diff-Attribut für Pfade zuordnen. Dann würden Sie eine Definition von diff. tex. xfuncname definieren, um einen regulären Ausdruck anzugeben, der mit einer Zeile übereinstimmt, die Sie als Hunk-Header TEXT anzeigen möchten. Fügen Sie einen Abschnitt zu Ihrer GITDIRconfig-Datei (oder HOME. gitconfig-Datei) wie folgt hinzu: Hinweis. Eine einzelne Ebene von Backslashs wird von der Konfigurationsdatei-Parser gegessen, also musst du die Backslashes verdoppeln, die das Muster oben pickt, eine Zeile, die mit einem Backslash beginnt, und null oder mehr Vorkommen von sub gefolgt von Abschnitt gefolgt von offener Klammer, an die Ende der Linie. Es gibt ein paar eingebaute Muster, um dies zu erleichtern, und tex ist einer von ihnen, also musst du das oben in deiner Konfigurationsdatei nicht schreiben (du musst das noch mit dem Attributmechanismus über. gitattributes aktivieren). Folgende eingebaute Muster stehen zur Verfügung: ada passend für Quellcode in der Ada-Sprache. Bibtex geeignet für Dateien mit BibTeX codierten Referenzen. Cpp geeignet für Quellcode in den C - und C-Sprachen. Csharp geeignet für Quellcode in der C-Sprache. Fortran geeignet für Quellcode in der Fortran Sprache. Brunnen passend für Springbrunnen. Html geeignet für HTMLXHTML Dokumente. Java geeignet für Quellcode in der Java-Sprache. Matlab geeignet für Quellcode in der MATLAB Sprache. Objc geeignet für Quellcode in der Objective-C Sprache. Pascal geeignet für Quellcode in der PascalDelphi Sprache. Perl geeignet für Quellcode in der Perl-Sprache. PHP geeignet für Quellcode in der PHP-Sprache. Python geeignet für Quellcode in der Python-Sprache. Rubin geeignet für Quellcode in der Ruby-Sprache. Tex passend für Quellcode für LaTeX Dokumente. Anpassen von Wortdiften Sie können die Regeln anpassen, die von git diff --word-diff verwendet werden, um Wörter in einer Zeile zu teilen, indem Sie einen entsprechenden regulären Ausdruck in der Variable diff..wordRegex angeben. Zum Beispiel, in TeX ein Backslash gefolgt von einer Folge von Buchstaben bildet einen Befehl, aber mehrere solcher Befehle können zusammen ausgeführt werden, ohne intervenieren Whitespace. Um sie zu trennen, verwenden Sie einen regulären Ausdruck in Ihrer GITDIRconfig-Datei (oder HOME. gitconfig-Datei) wie folgt: Ein eingebautes Muster wird für alle im vorherigen Abschnitt aufgeführten Sprachen bereitgestellt. Texte von Binärdateien ausführen Manchmal ist es wünschenswert, das Diff einer textkonvertierten Version einiger Binärdateien zu sehen. Beispielsweise kann ein Textverarbeitungsdokument in eine ASCII-Textdarstellung und das Diff des dargestellten Textes umgewandelt werden. Obwohl diese Umwandlung einige Informationen verliert, ist das resultierende Diff für die menschliche Betrachtung nützlich (kann aber nicht direkt angewendet werden). Mit der Option textconv config wird ein Programm für die Durchführung einer solchen Umwandlung definiert. Das Programm sollte ein einziges Argument, den Namen einer Datei zu konvertieren, und produzieren den daraus resultierenden Text auf stdout. Um zum Beispiel das diff der exif-Informationen einer Datei anstelle der binären Informationen anzuzeigen (vorausgesetzt, du hast das Exif-Tool installiert), füge den folgenden Abschnitt zu deiner GITDIRconfig-Datei (oder HOME. gitconfig-Datei) hinzu: Die Textkonvertierung ist im Allgemeinen Eine Einweg-Konvertierung in diesem Beispiel, verlieren wir die tatsächlichen Bildinhalte und konzentrieren uns nur auf die Textdaten. Dies bedeutet, dass diffs, die durch textconv erzeugt werden, nicht geeignet sind. Aus diesem Grund wird nur git diff und die git log Familie der Befehle (d. h. log, whatchanged, show) die Textumwandlung durchführen. Git format-patch wird diese Ausgabe nie generieren. Wenn du jemandem einen textkonvertierten Diff einer Binärdatei senden möchtest (zB weil er schnell die vorgenommenen Änderungen vermittelt), solltest du ihn separat generieren und ihn als Kommentar zusätzlich zum üblichen Binärdiff senden, den du senden möchtest . Weil Textumwandlung langsam sein kann, besonders wenn man eine große Anzahl von ihnen mit git log - p macht. Git bietet einen Mechanismus zum Cache der Ausgabe und nutzt es in zukünftigen Diffs. Um das Caching zu aktivieren, setze die Variable cachetextconv in deiner diff driver8217s config ein. Zum Beispiel: Dies wird das Ergebnis der Ausführung exif auf jedem Blob auf unbestimmte Zeit zwischenspeichern. Wenn Sie die Textconv-Konfigurationsvariable für einen Diff-Treiber ändern, wird Git automatisch die Cache-Einträge ungültig und führt den Textconv-Filter erneut aus. Wenn du den Cache manuell ungültig machen möchtest (zB weil deine Version von exif aktualisiert wurde und nun eine bessere Ausgabe erzeugt) kannst du den Cache manuell mit git update-ref - d refsnotestextconvjpg entfernen (wobei jpg der Name des diff-Treibers ist Im obigen Beispiel). Auswählen von Textconv gegen externe diff Wenn Sie Unterschiede zwischen binären oder speziell formatierten Blobs in Ihrem Repository anzeigen möchten, können Sie entweder einen externen diff Befehl verwenden oder um textconv verwenden, um sie in ein diffuses Textformat zu konvertieren. Welche Methode Sie wählen, hängt von Ihrer genauen Situation ab. Der Vorteil der Verwendung eines externen diff Befehl ist Flexibilität. Sie sind nicht verpflichtet, line-orientierte Änderungen zu finden, noch ist es notwendig, dass die Ausgabe einem einheitlichen diff ähnelt. Sie sind frei zu lokalisieren und berichten Änderungen in der am besten geeigneten Weise für Ihr Datenformat. Ein Textconv, im Vergleich, ist viel mehr einschränkend. Sie geben eine Umwandlung der Daten in ein zeilenorientiertes Textformat und Git verwendet seine regulären Diff-Werkzeuge, um die Ausgabe zu generieren. Es gibt mehrere Vorteile bei der Auswahl dieser Methode: Einfache Bedienung. Es ist oft viel einfacher, eine Binär-Text-Transformation zu schreiben, als es ist, dein eigenes Diff auszuführen. In vielen Fällen können bestehende Programme als Textconv-Filter (z. B. exif, odt2txt) verwendet werden. Git diff Features. Durch die Durchführung nur der Transformation Schritt selbst, können Sie immer noch viele Git8217s diff Features, einschließlich der Kolorierung, Word-Diff, und kombinierte Diffs für Merges. Caching Textconv-Caching kann beschleunigte wiederholte Diffs, wie die, die Sie auslösen könnten, indem Sie git log - p ausführen. Markieren von Dateien als Binär Git in der Regel richtig, ob ein Blob Text oder Binärdaten enthält, indem er den Anfang des Inhalts untersucht. Allerdings können Sie manchmal ihre Entscheidung überschreiben, entweder weil ein Blob Binärdaten später in der Datei enthält oder weil der Inhalt, während er technisch aus Textzeichen besteht, für einen menschlichen Leser undurchsichtig ist. Zum Beispiel enthalten viele Postscript-Dateien nur ASCII-Zeichen, erzeugen aber laute und sinnlose Diffs. Der einfachste Weg, um eine Datei als Binär zu markieren, besteht darin, das diff-Attribut in der. gitattributes-Datei zu löschen: Dies führt dazu, dass Git Binärdateien unterscheidet (oder ein binärer Patch, wenn binäre Patches aktiviert sind) anstelle eines regulären Diffs. Allerdings kann man auch andere Diff-Treiber-Attribute angeben. Zum Beispiel möchten Sie vielleicht textconv verwenden, um Postscript-Dateien in eine ASCII-Darstellung für die menschliche Betrachtung zu konvertieren, aber sonst behandeln sie als Binärdateien. Sie können nicht beide - diff - und difps-Attribute angeben. Die Lösung besteht darin, die diff..binary config-Option zu verwenden: Durchführen eines Drei-Wege-Merges Der Attribut-Merge beeinflusst, wie drei Versionen einer Datei zusammengeführt werden, wenn ein Dateiebenen-Merge während des Git-Merge erforderlich ist. Und andere Befehle wie git revert und git cherry-pick. Ein eingebauter 3-Wege-Merge-Treiber wird verwendet, um den Inhalt in einer Weise zusammenzuführen, die dem Befehl der RCS-Suite zusammenführt. Dies ist für gewöhnliche Textdateien geeignet. Nehmen Sie die Version aus dem aktuellen Zweig als vorläufiges Zusammenführungsergebnis und erklären Sie, dass die Zusammenführung Konflikte hat. Dies ist für Binärdateien geeignet, die keine definierte Merge-Semantik haben. Standardmäßig verwendet dies denselben eingebauten 3-Wege-Merge-Treiber, wie es der Fall ist, wenn das Merge-Attribut gesetzt ist. Die merge. default-Konfigurationsvariable kann jedoch einen anderen Merge-Treiber benennen, der mit Pfaden verwendet werden soll, für die das Merge-Attribut nicht spezifiziert ist. Der 3-Wege-Merge wird mit dem angegebenen benutzerdefinierten Merge-Treiber durchgeführt. Der eingebaute 3-Wege-Merge-Treiber kann explizit spezifiziert werden, indem man nach Texttreiber fragt, ob der eingebaute Einstieg der aktuelle Zweig-Treiber mit Binär angefordert werden kann. Eingebaute Merge-Treiber Es gibt ein paar eingebaute Low-Level-Merge-Treiber, die über das Merge-Attribut gefragt werden können. Übliche 3-Wege-Datei Ebene fusionieren für Textdateien. Konfliktregionen sind mit Konfliktmarkern markiert ltltltltltltlt. Und gtgtgtgtgtgt. Die Version von Ihrem Zweig erscheint vor der Markierung, und die Version aus dem zusammengeführten Zweig erscheint nach der Markierung. Halten Sie die Version von Ihrem Zweig in den Arbeitsbaum, aber lassen Sie den Pfad in den Konfliktzustand für den Benutzer zu sortieren. Führen Sie 3-Wege-Dateiebene fusionieren für Textdateien, aber nehmen Sie Zeilen aus beiden Versionen, anstatt Konfliktmarkierungen zu hinterlassen. Dies neigt dazu, die hinzugefügten Zeilen in der resultierenden Datei in zufälliger Reihenfolge zu verlassen, und der Benutzer sollte das Ergebnis überprüfen. Verwenden Sie das nicht, wenn Sie die Implikationen nicht verstehen. Definieren eines benutzerdefinierten Merge-Treibers Die Definition eines Merge-Treibers erfolgt in der. gitconfig-Datei, nicht in der gitattributes-Datei, so streng genommen diese Handbuchseite ist ein falscher Ort, um darüber zu sprechen. It8230 So definieren Sie einen benutzerdefinierten Merge-Treiber filfre. Fügen Sie einen Abschnitt zu Ihrer GITDIRconfig-Datei (oder HOME. gitconfig-Datei) wie folgt hinzu: Die Variable merge..name gibt dem Treiber einen menschlich lesbaren Namen. Der Wert 8216merge..driver variable8217s wird verwendet, um einen Befehl zu erstellen, der ausgeführt werden soll, um ancestor8217s Version (O), aktuelle Version (A) und die andere branches8217 Version (B) zusammenzuführen. Diese drei Token werden durch die Namen der temporären Dateien ersetzt, die den Inhalt dieser Versionen enthalten, wenn die Befehlszeile erstellt wird. Zusätzlich wird L durch die Konfliktmarkergröße ersetzt (siehe unten). Der Merge-Treiber wird erwartet, dass das Ergebnis des Zusammenführungsvorgangs in der Datei mit A durch Überschreiben überschritten wird, und beenden mit Null-Status, wenn es geschafft, sie zusammen zu verschmelzen, oder ungleich Null, wenn es Konflikte gab. Die merge..recursive Variable gibt an, welcher andere Merge-Treiber verwendet werden soll, wenn der Merge-Treiber für einen internen Merge zwischen gemeinsamen Vorfahren aufgerufen wird, wenn es mehr als einen gibt. Wenn sie nicht spezifiziert ist, wird der Fahrer selbst sowohl für den internen Zusammenschluss als auch für den endgültigen Zusammenschluss verwendet. Der Merge-Treiber kann den Pfadnamen erlernen, in dem das zusammengeführte Ergebnis über den Platzhalter P gespeichert wird. Konfliktmarker-Größe Dieses Attribut steuert die Länge der Konfliktmarker, die in der Arbeitsbaumdatei während eines Konflikts verschoben wurden. Nur die Einstellung auf den Wert einer positiven Ganzzahl hat eine sinnvolle Wirkung. Zum Beispiel kann diese Zeile in. gitattributes verwendet werden, um zu sagen, dass die Merge-Maschine bei der Zusammenführung der Datei viel länger (anstelle der üblichen 7-Zeichen-langen) Konfliktmarker verlässt. Documentationgit-merge. txt führt zu einem Konflikt. Überprüfen von Whitespace-Fehlern Whitespace Die Konfigurationsvariable core. whitespace erlaubt Ihnen, festzulegen, welche diff und apply Whitespace-Fehler für alle Pfade im Projekt berücksichtigen sollen (siehe git-config (1)). Dieses Attribut gibt Ihnen eine feinere Kontrolle pro Pfad. Beachten Sie alle Arten von potentiellen Whitespace-Fehlern, die Git bekannt sind. Die Tabulatorbreite wird aus dem Wert der core. whitespace-Konfigurationsvariable übernommen. Merke nichts als Fehler Verwenden Sie den Wert der core. whitespace-Konfigurationsvariable, um zu entscheiden, was als Fehler zu bemerken ist. Geben Sie eine separate separate Liste der allgemeinen Whitespace-Probleme an, die im selben Format wie die core. whitespace-Konfigurationsvariable zu beachten sind. Erstellen eines Archivs export-ignore Dateien und Verzeichnisse mit dem Attribut export-ignore won8217t werden zu Archivdateien hinzugefügt. Export-subst Wenn das Attribut export-subst für eine Datei gesetzt ist, wird Git mehrere Platzhalter beim Hinzufügen dieser Datei in ein Archiv erweitern. Die Erweiterung hängt von der Verfügbarkeit einer Commit-ID ab, d. H. Wenn git-archive (1) einen Baum anstelle eines Commit oder eines Tags erhalten hat, dann wird kein Ersatz durchgeführt. Die Platzhalter sind die gleichen wie die für die Option --prettyformat: von git-log (1). Außer dass sie so gewickelt werden müssen: Format: PLACEHOLDERS in der Datei. Z. B. Die Zeichenfolge Format: H wird durch den Commit-Hash ersetzt. Packungsobjekte Delta-Komprimierung wird nicht für Blobs für Pfade versucht, wobei das Attribut-Delta auf false gesetzt ist. Anzeigen von Dateien in GUI-Tools Der Wert dieses Attributs gibt die Zeichencodierung an, die von GUI-Tools (z. B. gitk (1) und git-gui (1)) verwendet werden soll, um den Inhalt der entsprechenden Datei anzuzeigen. Beachten Sie, dass gitk (1) aufgrund von Leistungsüberlegungen dieses Attribut nicht verwendet, es sei denn, Sie manuell aktivieren Sie per-Datei-Codierungen in seinen Optionen. Wenn dieses Attribut nicht gesetzt ist oder ungültig ist, wird stattdessen der Wert der Konfigurationsvariable gui. encoding verwendet (siehe git-config (1)). BENUTZUNG VON MAKRO-ATTRIBUTEN Sie wollen nicht, dass keine End-of-line-Conversions angewendet werden, noch Text-Diffs, die für jede Binärdatei erstellt werden, die Sie verfolgen. Sie müssten z. B. Aber das kann schwerfällig werden, wenn man viele Attribute hat. Mit Makroattributen können Sie ein Attribut definieren, das bei der Einstellung auch eine Anzahl anderer Attribute gleichzeitig sperrt oder löscht. Das System kennt ein eingebautes Makroattribut, binär: Das Binärattribut setzen auch die Text - und Diffattribute wie oben. Beachten Sie, dass Makroattribute nur gesetzt werden können, obwohl die Einstellung die Möglichkeit hat, andere Attribute einzustellen oder zu deaktivieren oder sogar andere Attribute in den nicht spezifizierten Zustand zurückzugeben. DEFINING MACRO ATTRIBUTES Custom macro attributes can be defined only in top-level gitattributes files ( GITDIRinfoattributes . the. gitattributes file at the top level of the working tree, or the global or system-wide gitattributes files), not in. gitattributes files in working tree subdirectories. The built-in macro attribute binary is equivalent to: If you have these three gitattributes file: the attributes given to path tabc are computed as follows: By examining t. gitattributes (which is in the same directory as the path in question), Git finds that the first line matches. merge attribute is set. It also finds that the second line matches, and attributes foo and bar are unset. Then it examines. gitattributes (which is in the parent directory), and finds that the first line matches, but t. gitattributes file already decided how merge . foo and bar attributes should be given to this path, so it leaves foo and bar unset. Attribute baz is set. Finally it examines GITDIRinfoattributes . This file is used to override the in-tree settings. The first line is a match, and foo is set, bar is reverted to unspecified state, and baz is unset. As the result, the attributes assignment to tabc becomes:

No comments:

Post a Comment