it-swarm.com.de

Git Status ignoriert Zeilenenden/identische Dateien/Windows & Linux-Umgebung/Dropbox/mled

Wie mache ich 

git-Status

zeilenende-Unterschiede ignorieren?

Hintergrundinformation:

Ich benutze zufällig Windows und Linux, um an dem Projekt zu arbeiten. Das Projekt befindet sich in Dropbox.

Ich habe viel darüber gefunden, wie man git diff Zeilenenden ignoriert. Da ich meld git diff verwende, öffnet sich meld für jede Datei. Und meld sagt "identische Datei". 

Wie vermeide ich das? Git sollte meld nur für geänderte Dateien öffnen ... und git status sollte Dateien nicht als geändert melden, wenn sich nur die Dateiendung unterscheidet.

BEARBEITEN: Ursache:

Dies geschah aufgrund dieser Einstellung unter Windows 

core.autocrlf wahr

Also habe ich die Arbeitskopie unter Linux ausgecheckt und core.autocrlf unter Windows auf false gesetzt.

Es wäre immer noch schön zu wissen, wie man git status dazu bringt, verschiedene neue Zeilen zu ignorieren.

45

Legen Sie den Wert für core.autocrlf wie folgt fest: 

git config --global core.autocrlf true
47
Saša Šijak

Verwenden Sie stattdessen .gitattributes mit der folgenden Einstellung:

# Ignore all differences in line endings
*        -crlf

.gitattributes befinden sich in demselben Verzeichnis wie Ihre globale .gitconfig. Wenn .gitattributes nicht vorhanden ist, fügen Sie es diesem Verzeichnis hinzu. Nach dem Hinzufügen/Ändern von .gitattributes müssen Sie das Repository zurücksetzen, um die Änderungen erfolgreich auf vorhandene Dateien anzuwenden.

30
Trashman

Problem bezogen auf git-Befehle unter Windows-Betriebssystemen:

$ git add --all

warnung: LF wird durch CRLF in ... ersetzt.

Die Datei hat die ursprünglichen Zeilenenden in Ihrem Arbeitsverzeichnis.

Auflösung :

$ git config --global core.autocrlf false     
$ git add --all 

Es werden keine Warnmeldungen angezeigt.

8
winstonhong

Ich benutze Windows und Linux, aber die Lösung core.autocrlf true hat mir nicht geholfen. Ich habe sogar nach git checkout <filename> nichts verändert. 

Also benutze ich Workaround, um git status zu ersetzen - gitstatus.sh

#!/bin/bash

git status | grep modified | cut -d' ' -f 4 | while read x; do
 x1="$(git show HEAD:$x | md5sum | cut -d' ' -f 1 )"
 x2="$(cat $x | md5sum | cut -d' ' -f 1 )"

 if [ "$x1" != "$x2" ]; then
    echo "$x NOT IDENTICAL"
 fi
done

Ich vergleiche einfach md5sum einer Datei und ihres Bruders im Repository.

Beispielausgabe:

$ ./gitstatus.sh
application/script.php NOT IDENTICAL
application/storage/logs/laravel.log NOT IDENTICAL
3
shukshin.ivan

Ich habe ein Skript erstellt, um Unterschiede in den Zeilenenden zu ignorieren:

Es werden die Dateien angezeigt, die nicht zur Festschreibungsliste hinzugefügt wurden und geändert wurden (nachdem Unterschiede in den Zeilenenden ignoriert wurden). Sie können das Argument "hinzufügen" hinzufügen, um diese Dateien zu Ihrem Commit hinzuzufügen.

#!/usr/bin/Perl

# Usage: ./gitdiff.pl [add]
#    add : add modified files to git

use warnings;
use strict;

my ($auto_add) = @ARGV;
if(!defined $auto_add) {
    $auto_add = "";
}

my @mods = `git status --porcelain 2>/dev/null | grep '^ M ' | cut -c4-`;
chomp(@mods);
for my $mod (@mods) {
    my $diff = `git diff -b $mod 2>/dev/null`;
    if($diff) {
        print $mod."\n";
        if($auto_add eq "add") {
            `git add $mod 2>/dev/null`;
        }
    }
}

Quellcode: https://github.com/lepe/scripts/blob/master/gitdiff.pl

Aktualisierung:

  • fix by evandro777: Wenn die Datei Platz in Dateiname oder Verzeichnis hat
3
lepe

Diese Antwort erscheint relevant, da das OP auf die Notwendigkeit einer Lösung mit mehreren Betriebssystemen verweist. In diesem Github Hilfeartikel werden die verfügbaren Ansätze für die Behandlung von Zeilenenden OS-übergreifend beschrieben. Es gibt globale Ansätze und Pro-Repo-Ansätze zum Verwalten von Cross-OS-Zeilenenden.

Globaler Ansatz

Konfigurieren Sie die Handhabung der Git-Zeilenenden unter Linux oder OS X:

git config --global core.autocrlf input

Konfigurieren Sie die Verarbeitung der Git-Zeilenenden unter Windows:

git config --global core.autocrlf true

Pro-Repo-Ansatz:

Erstellen Sie im Stammverzeichnis Ihres Repos eine .gitattributes-Datei und definieren Sie die Zeilenendeeinstellungen für Ihre Projektdateien Zeile für Zeile im folgenden Format: path_regex line-ending-settings Dabei ist line-ending-settings eine der folgenden:

  • text
  • binär (Dateien, für die Git keine Zeilenenden ändern soll)

Der text-Wert kann weiter konfiguriert werden, um Git mitzuteilen, wie Zeilenenden für übereinstimmende Dateien behandelt werden:

  • text - Ändert Zeilenenden in native OS-Zeilenenden.
  • text eol=crlf - Konvertiert Zeilenenden in CRLF an der Kasse.
  • text eol=lf - Konvertiert Zeilenenden in LF an der Kasse.
  • text=auto - Vernünftige Standardeinstellung, bei der das Line Handle im Ermessen von Git bleibt.

Hier ist der Inhalt einer Beispieldatei .gitattributes:

# Set the default behavior for all files.
* text=auto

# Normalized and converts to 
# native line endings on checkout.
*.c text
*.h text

# Convert to CRLF line endings on checkout.
*.sln text eol=crlf

# Convert to LF line endings on checkout.
*.sh text eol=lf

# Binary files.
*.png binary
*.jpg binary

Weitere Informationen zum Aktualisieren Ihres Repos nach dem Ändern der Zeilenendeinstellungen hier . Tldr: 

sichern Sie Ihre Dateien mit Git, löschen Sie jede Datei in Ihrem Repository (mit Ausnahme des Verzeichnisses .git) und stellen Sie dann alle Dateien auf einmal wieder her. Speichern Sie Ihre aktuellen Dateien in Git, damit Ihre Arbeit nicht verloren geht.

git add . -u

git commit -m "Saving files before refreshing line endings"

Entfernen Sie den Index und zwingen Sie Git, das Arbeitsverzeichnis erneut zu durchsuchen.

rm .git/index

Schreiben Sie den Git-Index neu, um alle neuen Zeilenenden zu erfassen.

git reset

Zeigt die umgeschriebenen, normalisierten Dateien an.

In einigen Fällen ist dies alles, was getan werden muss. Andere müssen möglicherweise die folgenden zusätzlichen Schritte ausführen:

git status

Fügen Sie alle Ihre geänderten Dateien wieder hinzu und bereiten Sie sie für ein Commit vor. Dies ist Ihre Chance zu überprüfen, welche Dateien, falls vorhanden, unverändert waren.

git add -u

Es ist absolut sicher, dass hier viele Meldungen angezeigt werden, die lesen [s] "Warnung: CRLF wird durch LF in der Datei ersetzt."

Schreiben Sie die .gitattributes-Datei neu.

git add .gitattributes

Übernehmen Sie die Änderungen in Ihrem Repository.

git commit -m "Normalize all the line endings"

1
user4603841