Git und das Zeilenendeproblem
Problembeschreibung
Es gibt mehrere Optionen für das Zeilenende:
- Windows (CR+LF)
- Unix, Linux und Mac OS (ab OS X) (LF)
- Mac (bis Version 9) (CR)
Das bedeutet, dass jedes Format anders ist, in der Größe weicht aber nur Windows ab, die Dateien sind größer, da zwei Zeichen das zeilenende markieren.
Die globalen Einstellungen dafür findet man in der Datei
C:\Users\Nutzer\.gitconfig
Den Speicherort dieser Datei kann man im Zweifelsfall mit
git config --global --edit
herausfinden.
In der Datei steht dann z.B.
[core]
autocrlf = true
Man kann sich die gesamt Konfiguration auch einfach mit git config --global --list
anzeigen lassen. Außer dem Parameter global gibt es noch --system
und --local
. --system
befindet sich in C:\Program Files\Git\etc\gitconfig
und --local
befindet sich in Laufwerk:\Vollständiger Pfad der Repo\.git\config
Die obige Einstellung gilt global für alle Repos.
Problemlösung
Man kann diese Einstellung ändern mit git config --global core.autocrlf input
Dadurch werden alle CRLF bis LF beim Festschreiben festgelegt. Oder git config --global core.autocrlf true
Dadurch wird sichergestellt, dass beim Auschecken in Windows alle LF in CRLF konvertiert werden.
Daneben kann man die Einstellung auch für jede Repo festlegen, und zwar mit einer Datei .gitattributes
Man beachte den Punkt am Beginn des Dateinamens. Dort kann man angeben: * text=auto
Dadurch werden alle Dateien als Textdateien behandelt und beim Auschecken in die Zeile des Betriebssystems und beim automatischen Festschreiben wieder in LF konvertiert. Wenn Sie explizit mitteilen möchten, verwenden Sie
* text eol=crlf
* text eol=lf
Der erste ist für das Auschecken und der zweite für das Festschreiben.
*.jpg binary
Behandle alle .jpg Bilder als Binärdateien. Also keine Umstellung nötig.
Test
Es wurde eine Repo angelegt. https://github.com/bpgs/zeilenendetest enthält drei am PC mit Notepad++ unter Windows angelegte Dateien. In Notepad++ gibt es die Möglichkeit, oben genannten unterschiedlichen Zielenendeoptionen zu verwenden. Diese drei Dateien sind:
- format-zeilenende-mac.txt mit 107 Byte
- format-zeilenende-unix.txt mit 107 Byte
- format-zeilenende-win.txt mit 110 Byte
Wenn man die Repo als zip-Datei herunter lädt und entpackt haben sie die ursprüngliche Größe wie am PC erstellt.
Mit Git Gui wurde die Repo gecloned (Clone Existing Repository). Jetzt haben die Dateien:
- format-zeilenende-mac.txt 107 Byte
- format-zeilenende-unix.txt 110 Byte
- format-zeilenende-win.txt mit 110 Byte
Die Unix-/Linux-Datei hat jetzt, wie man auch in Notepad++ sehen kann, ein Windows-Zeilenende. Wenn man jetzt in Git Gui die Repo auf Veränderungen überorüft, dann wird nur das veränderte Modification Date genannt.
git config --global -l
zeigt den Wert core.autocrlf=true
an.
Jetzt wird mit
git config --global core.autocrlf input
der Modus geändert. Dann habe ich die alte geclonte Repo auf dem PC gelöscht und wieder geclont. Nun haben sie
Jetzt haben die Dateien:
- format-zeilenende-mac.txt 107 Byte
- format-zeilenende-unix.txt 107 Byte
- format-zeilenende-win.txt mit 110 Byte
Größenvergleich der Datei index.php im Wurzelverzeichnis des phpSQLiteCMS bzw. des MySQLiteCMS
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\chirurg-tychy-cms-master-org\index.php: 5.730 Byte
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\ilosuna-phpsqlitecms-d9b8219-mit-zusatz\index.php: 5.730 Byte
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\ilosuna-phpsqlitecms-d9b8219-org\index.php: 5.730 Byte
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\phpsqlitecms-master-3-a-org\index.php: 6.014 Byte (auch UNIX-Zeilenende aber anderer Inhalt)
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\phpsqlitecms-master-3-b-org\index.php: 5.730 Byte
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\phpsqlitecms-master-3-d-org\index.php: 5.730 Byte
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\phpsqlitecms-master-emanuel4you-anpassungen\index.php: 5.730 Byte
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\phpsqlitecms-master-theasgar\index.php: 5.758 Byte (auch UNIX-Zeilenende aber anderer Inhalt)
- E:\software\php\anwendungen\phpsqlitecms\phpsqlitecms-3.x\phpsqlitecms-master-ztatement\index.php: 5.758 Byte (auch UNIX-Zeilenende aber anderer Inhalt)
- H:\xampp-webs\phpsqlitecms\www\3.2015.04.02-bs01\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\3.2015.04.02-org\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\emanuel4you\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mein-wunschname.4lima.de\index.php: 5.929 Byte (auch UNIX-Zeilenende aber anderer Inhalt)
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-01\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-02\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-03\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-04\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-05\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-06\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-07\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-08\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-09\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-10\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-11\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-12\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-13\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-14\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\github-15\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.0.1\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.1.0\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.2.0\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.3.0\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.4.0\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.5.0\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.5.1\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.6.0\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.6.1\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.6.2\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.6.3\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.6.4\index.php: 5.730 Byte
- H:\xampp-webs\phpsqlitecms\www\mysqlitecms-github\MySQLiteCMS-Version-3.6.5\index.php: 5.730 Byte