Kann Git automatisch zwischen Leerzeichen und Tabs wechseln?

Lesezeit: 6 Minuten

Kann Git automatisch zwischen Leerzeichen und Tabs wechseln
Olivier Verdier

Ich verwende Tabulatoren zum Einrücken in meinen Python-Programmen, aber ich würde gerne (mit Git) mit Leuten zusammenarbeiten, die stattdessen Leerzeichen verwenden.

Gibt es eine Möglichkeit für Git, beim Pushen/Abrufen automatisch zwischen Leerzeichen und Tabulatoren (z. B. 4 Leerzeichen = 1 Tabulatortaste) zu konvertieren? (ähnlich der CR/LF-Konvertierung)

  • PEP8 ist genau mein Problem. Jeder folgt ihm und ich stecke mit meinen Tabs fest. Ich denke das zufällig ein Einzug = ein Tabulator richtig ist (warum Leerzeichen? warum 4 Leerzeichen? PEP8 erklärt das nicht…). Wie auch immer, mit diesem Git-Trick kann ich problemlos Tabs auf meinem Computer verwenden und meinen Code mit allen PEP8-Followern da draußen teilen.

    – Olivier Verdier

    23. Februar 2010 um 8:57 Uhr

  • Oh! Ich verwende TextMate und kann Leerzeichen in Tabulatoren umwandeln. Die Sache ist, wenn ich Tab drücke, möchte ich, dass mein Editor schreibt… Tab. Wenn ich also ein Python-Projekt mit Leerzeichen auschecke, füge ich alle möglichen Tabulatoren ein. Ich muss manuell in Tabs konvertieren, aber wenn ich einchecke, sieht es aus wie 1000 Löschungen, 1000 Hinzufügungen, und meine Mitarbeiter werden nicht glücklich sein. 🙂

    – Olivier Verdier

    23. Februar 2010 um 9:45 Uhr

  • Der Grund, warum PEP8 Leerzeichen anstelle von Tabulatoren angibt, liegt an den Fortsetzungseinrückungsregeln. Es gibt zwei Möglichkeiten, eine überlange Zeile innerhalb einer Klammer fortzusetzen. Wenn Sie unmittelbar nach einer Klammer eine neue Zeile beginnen, rücken Sie nur eine ein. Wenn Sie stattdessen einen Teil des Inhalts der Klammer in die erste Zeile setzen, müssen Sie die Klammer in der nächsten Zeile auf der Einrückungsebene der öffnenden Klammer fortsetzen. Wenn Sie Tabs verwenden, funktioniert das nicht.

    – John Christopher Jones

    25. November 2015 um 4:58 Uhr

  • @JohnChristopherJones Für diese Situation könnte man Tabulatoren verwenden, um den Einzug mit der vorherigen Zeile abzugleichen, und dann Leerzeichen, um eine Position in der vorherigen Zeile abzugleichen. Dies kann leicht in Leerzeichen umgewandelt werden. Leider ist das Gegenteil nicht der Fall, da es Einrückungsinformationen mit Ausrichtungsinformationen vermischt.

    – Patrick Parker

    11. September 2019 um 15:31 Uhr

Kann Git automatisch zwischen Leerzeichen und Tabs wechseln
Olivier Verdier

Hier die Komplettlösung:

Fügen Sie in Ihrem Repository eine Datei hinzu .git/info/attributes was beinhaltet:

*.py  filter=tabspace

Linux/Unix

Führen Sie nun die Befehle aus:

git config --global filter.tabspace.smudge 'unexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'expand --tabs=4 --initial'

OSX

Installieren Sie zuerst coreutils mit brew:

brew install coreutils

Führen Sie nun die Befehle aus:

git config --global filter.tabspace.smudge 'gunexpand --tabs=4 --first-only'
git config --global filter.tabspace.clean 'gexpand --tabs=4 --initial'

Alle Systeme

Sie können nun alle Dateien Ihres Projekts auschecken. Sie können das tun mit:

git checkout HEAD -- **

und alle Python-Dateien haben jetzt Tabulatoren anstelle von Leerzeichen.

Bearbeiten: Befehl zum erzwungenen Auschecken geändert. Sie sollten Ihre Arbeit natürlich zuerst festschreiben.

  • Der saubere Filter funktioniert bei mir nicht. Wenn ich Git hinzufüge. Ich erhalte eine Fehlermeldung mit der Aufschrift „error: external filter expand –tabs=4 –initial failed“. Ich bin auf Windows. Macht das einen Unterschied?

    – Jeremy Hicks

    9. Juni 2011 um 19:06 Uhr

  • @Jeremy: expand/unexpand sind Unix-Befehle. Sie müssen entweder Windows-Ports / Äquivalente finden oder so etwas verwenden Cygwin

    – Tim

    10. Juni 2011 um 0:28 Uhr


  • Ich habe Bast Arbeitsversion gefunden sourceforge.net/projects/gnuwin32/files/coreutils/5.3.0

    – Hazzik

    21. Dezember 2011 um 14:18 Uhr

  • @Marc-André Guter Punkt. Ich verwende tatsächlich die Coreutils-Versionen. (Installieren homebrewund dann laufen brew install coreutils).

    – Olivier Verdier

    1. Mai 2012 um 6:32 Uhr


  • Es scheint, dass dies nicht mehr funktioniert, die Filter tun nichts für mich. Nach dem Auschecken haben die Dateien noch Leerzeichen. Gibt es hierzu Neuigkeiten?

    – Philipp Ludwig

    14. Mai 2017 um 13:20 Uhr


Kann Git automatisch zwischen Leerzeichen und Tabs wechseln
VonC

Ja, eine mögliche Lösung ist die Verwendung von a Git-Attributfiltertreiber (siehe auch GitPro-Buch), um einen Wisch-/Reinigungsmechanismus zu definieren.

Alt-Text

Dieser Weg:

  • Jedes Mal, wenn Sie einige Dateien Ihres Repos auschecken, können Leerzeichen in Tabs umgewandelt werden,
  • aber wenn Sie einchecken (und pushen und veröffentlichen), werden dieselben Dateien nur mit Leerzeichen gespeichert.

Sie können diesen Filtertreiber (hier benannt ‘tabspace‘) in dem .git/info/attributes (für einen Filter, der auf alle Dateien im Git-Repo angewendet wird), mit folgendem Inhalt:

*.py  filter=tabspace

Führen Sie nun die Befehle aus:

# local config for the current repo
git config filter.tabspace.smudge 'script_to_make_tabs'
git config filter.tabspace.clean 'script_to_make_spaces'

In Oliviers Antwort finden Sie ein konkretes Arbeitsbeispiel für eine solche wisch-/saubere Anleitung.

  • Leider funktioniert es einfach nicht. Ich habe alle Anweisungen befolgt, aber git wendet den Filter nicht an. 🙁 Wenn ich auschecke, wird der Wischfilter nicht angewendet, und wenn ich einchecke, passiert auch nichts … git ist manchmal so frustrierend …

    – Olivier Verdier

    23. Februar 2010 um 9:42 Uhr

  • @Olivier: Seltsam, ich hatte nie ein Problem damit, solange ich den Umfang des Attributfilters sorgfältig beschränke (auf einen bestimmten Unterbaum, nur für einen bestimmten Dateityp), um das Auschecken/Prüfen nicht zu verlangsamen. in Bearbeitung. Siehe zum Beispiel stackoverflow.com/questions/62264/…

    – VonC

    23. Februar 2010 um 9:55 Uhr


  • Danke! Jetzt funktioniert es. Sehen Sie sich die vollständige Lösung an: stackoverflow.com/questions/2316677/…

    – Olivier Verdier

    23. Februar 2010 um 12:33 Uhr

  • @Vonc: vielleicht sollte man das entfernen --global Flag, da dies bedeuten würde, dass Sie Leerzeichen an jedes Kooperationsprojekt senden …

    – Willem Van Onsem

    22. Oktober 2014 um 13:46 Uhr

  • @CommuSoft nur an die Projekte die das Recht dazu haben .gitattributes. Aber ja, es ist einfacher zu verstehen, wenn die Konfiguration lokal im Repo gehalten wird. Ich habe die Antwort bearbeitet.

    – VonC

    22. Oktober 2014 um 13:48 Uhr

1646904488 756 Kann Git automatisch zwischen Leerzeichen und Tabs wechseln
Simo

Sehr nützliche Informationen für alle, die GitHub (oder einen ähnlichen Dienst) verwenden.

~/.gitconfig

[filter "tabspace"]
    smudge = unexpand --tabs=4 --first-only
    clean = expand --tabs=4 --initial
[filter "tabspace2"]
    smudge = unexpand --tabs=2 --first-only
    clean = expand --tabs=2 --initial

Dann habe ich zwei Dateien:
attributes

*.js  filter=tabspace
*.html  filter=tabspace
*.css  filter=tabspace
*.json  filter=tabspace

und attributes2

*.js  filter=tabspace2
*.html  filter=tabspace2
*.css  filter=tabspace2
*.json  filter=tabspace2

Arbeiten an persönlichen Projekten

mkdir project
cd project
git init
cp ~/path/to/attributes .git/info/

Auf diese Weise sieht es in der Codeansicht nicht albern aus, wenn Sie Ihre Arbeit endlich auf Github pushen 8 space tabs Dies ist das Standardverhalten in allen Browsern.

Mitarbeit bei anderen Projekten

mkdir project
cd project
git init
cp ~/path/to/attributes2 .git/info/attributes
git remote add origin git@github.com:some/repo.git
git pull origin branch

Auf diese Weise können Sie mit normalen Registerkarten arbeiten 2 space indented Projekte.

Natürlich können Sie eine ähnliche Lösung zum Konvertieren von schreiben 4 space to 2 space Dies ist der Fall, wenn Sie zu von mir veröffentlichten Projekten beitragen möchten und dazu neigen, während der Entwicklung 2 Bereiche zu verwenden.

  • Verwandte: Git-Konfiguration als Teil des Repository speichern; Beachten Sie auch, dass Sie a verwenden (und festschreiben) können .gitattributes Datei in Ihrem Repo

    – Tobias Kienzler

    3. Mai 2016 um 12:04 Uhr

Wenn Sie Windows verwenden, müssen Sie einige zusätzliche Schritte ausführen, um die Lösung von @Olivier Verdier zum Laufen zu bringen.

  1. Herunterladen CoreUtils für Windows
  2. Geben Sie nach der Installation den Installationsort in Ihren PATH (So fügen Sie eine Pfadvariable hinzu)
  3. Ich habe expand.exe in gexpand.exe umbenannt, da es bereits ein Windows-Erweiterungsprogramm gibt.
987340cookie-checkKann Git automatisch zwischen Leerzeichen und Tabs wechseln?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy