Mit Git nach einem schmutzigen Index oder nicht verfolgten Dateien suchen

243

Wie kann ich überprüfen, ob ich nicht festgeschriebene Änderungen in meinem Git-Repository habe:

  1. Dem Index hinzugefügte, aber nicht festgeschriebene Änderungen
  2. Nicht verfolgte Dateien

aus einem Skript?

git-status scheint mit git Version 1.6.4.2 immer Null zurückzugeben.

Robert Munteanu
quelle
3
Der Git-Status gibt 1 zurück, wenn nicht bereitgestellte geänderte Dateien vorhanden sind. Aber im Allgemeinen finde ich, dass die Git-Tools mit dem Rückgabestatus nicht besonders gründlich sind. EG git diff gibt 0 zurück, unabhängig davon, ob es Unterschiede gibt oder nicht.
Intuition
11
@intuited: Wenn Sie diffdas Vorhandensein oder Fehlen von Unterschieden anstelle der erfolgreichen Ausführung des Befehls angeben müssen, müssen Sie --exit-codeoder verwenden --quiet. Git-Befehle stimmen im Allgemeinen sehr gut mit der Rückgabe eines Exit-Codes von Null oder Nicht-Null überein, um den Erfolg des Befehls anzuzeigen.
CB Bailey
1
@ Charles Bailey: Hey toll, ich habe diese Option verpasst. Vielen Dank! Ich glaube, ich habe es nie wirklich gebraucht, um das zu tun, oder ich hätte wahrscheinlich die Manpage danach durchsucht. Ich
bin
1
robert - das ist ein sehr verwirrendes thema für die community (hilft nicht, dass 'porzellan' in verschiedenen kontexten unterschiedlich verwendet wird). Die Antwort, die Sie ausgewählt haben, ignoriert eine 2,5-mal höher bewertete Antwort, die robuster ist und dem Git-Design folgt. Hast du die Antwort von @ChrisJ gesehen?
Mike
1
@ Robert - Ich hoffe, Sie könnten erwägen, Ihre akzeptierte Antwort zu ändern. Diejenige, die Sie ausgewählt haben, basiert auf zerbrechlicheren Git-Porzellan-Befehlen. Die tatsächlich richtige Antwort (auch mit 2x Upvotes) hängt von den richtigen Git-Plumbing-Befehlen ab. Diese richtige Antwort stammt ursprünglich von Chris Johnsen. Ich spreche das an, da ich heute zum dritten Mal jemanden auf diese Seite verweisen musste, aber ich kann nicht nur auf die Antwort verweisen, ich habe erklärt, warum die akzeptierte Antwort nicht optimal / grenzwertig falsch ist. Danke dir!
Mike

Antworten:

173

Großartiges Timing! Ich habe vor ein paar Tagen einen Blog-Beitrag darüber geschrieben, als ich herausfand, wie ich meiner Eingabeaufforderung Informationen zum Git-Status hinzufügen kann.

Folgendes mache ich:

  1. Für schmutzigen Status:

    # Returns "*" if the current git branch is dirty.
    function evil_git_dirty {
      [[ $(git diff --shortstat 2> /dev/null | tail -n1) != "" ]] && echo "*"
    }
  2. Für nicht verfolgte Dateien (Beachten Sie das --porcelainFlag, mit git statusdem Sie eine schöne analysierbare Ausgabe erhalten):

    # Returns the number of untracked files
    
    function evil_git_num_untracked_files {
      expr `git status --porcelain 2>/dev/null| grep "^??" | wc -l` 
    }

Obwohl dies git diff --shortstatbequemer ist, können Sie auch git status --porcelainschmutzige Dateien abrufen:

# Get number of files added to the index (but uncommitted)
expr $(git status --porcelain 2>/dev/null| grep "^M" | wc -l)

# Get number of files that are uncommitted and not added
expr $(git status --porcelain 2>/dev/null| grep "^ M" | wc -l)

# Get number of total uncommited files
expr $(git status --porcelain 2>/dev/null| egrep "^(M| M)" | wc -l)

Hinweis: 2>/dev/nullHiermit werden die Fehlermeldungen herausgefiltert, sodass Sie diese Befehle für Nicht-Git-Verzeichnisse verwenden können. (Sie werden einfach 0für die Anzahl der Dateien zurückkehren.)

Bearbeiten :

Hier sind die Beiträge:

Hinzufügen von Git-Statusinformationen zu Ihrer Terminal-Eingabeaufforderung

Verbesserte Git-fähige Shell-Eingabeaufforderung

0xfe
quelle
8
Es ist erwähnenswert, dass die Git-Bash-Vervollständigung eine Shell-Funktion enthält, mit der Sie so ziemlich das tun können, was Sie mit Ihrer Eingabeaufforderung tun __git_ps1. Es werden Zweigstellennamen angezeigt, einschließlich einer Sonderbehandlung, wenn Sie gerade eine Neugründung, eine Am-Apply, eine Zusammenführung oder eine Halbierung durchführen. GIT_PS1_SHOWDIRTYSTATEAußerdem können Sie die Umgebungsvariable so einstellen , dass ein Sternchen für nicht bereitgestellte Änderungen und ein Plus für bereitgestellte Änderungen angezeigt wird. (Ich denke, Sie können es auch dazu bringen, nicht verfolgte Dateien anzuzeigen und Ihnen eine git-describeAusgabe zu geben)
Cascabel
8
Eine Warnung: git diff --shortstatGibt ein falsches Negativ aus, wenn sich bereits Änderungen im Index befinden.
Marko Topolnik
4
git status --porcelainist vorzuziehen, da git diff --shortstatneu erstellte leere Dateien nicht abgefangen werden. Sie können es in jedem sauberen Arbeitsbaum versuchen:touch foo && git diff --shortstat
Campadrenalin
7
NEIN - Porzellan bedeutet, dass die Ausgabe für Menschen ist und leicht bricht !! Siehe die Antwort von @ChrisJohnsen, in der die stabilen, skriptfreundlichen Optionen korrekt verwendet werden.
Mike
7
@mike von der git-status-Manpage zur Porzellanoption: "Geben Sie die Ausgabe in einem einfach zu analysierenden Format für Skripte an. Dies ähnelt der kurzen Ausgabe, bleibt jedoch über Git-Versionen hinweg und unabhängig von der Benutzerkonfiguration stabil. ""
Itsadok
399

Der Schlüssel zum zuverlässigen "Scripting" von Git liegt in der Verwendung der "Plumbing" -Befehle.

Die Entwickler achten beim Ändern der Installationsbefehle darauf, dass sie sehr stabile Schnittstellen bereitstellen (dh eine bestimmte Kombination aus Repository-Status, Standard, Befehlszeilenoptionen, Argumenten usw. erzeugt in allen Git-Versionen dieselbe Ausgabe, in denen der Befehl / Option existiert). Neue Ausgabevarianten in Installationsbefehlen können über neue Optionen eingeführt werden, dies kann jedoch keine Probleme für Programme mit sich bringen, die bereits für ältere Versionen geschrieben wurden (sie würden die neuen Optionen nicht verwenden, da sie nicht vorhanden waren (oder zumindest waren) nicht verwendet) zum Zeitpunkt der Erstellung des Skripts).

Leider sind die "alltäglichen" Git-Befehle die "Porzellan" -Befehle, so dass die meisten Git-Benutzer möglicherweise nicht mit den Installationsbefehlen vertraut sind. Die Unterscheidung zwischen Porzellan und Sanitärbefehl wird in der Haupt- Git-Manpage vorgenommen (siehe Unterabschnitte mit dem Titel Befehle auf hoher Ebene (Porzellan) und Befehle auf niedriger Ebene (Sanitär) .


Um sich über nicht genehmigte Änderungen zu informieren, müssen Sie wahrscheinlich git diff-index(Index (und möglicherweise verfolgte Teile des Arbeitsbaums) mit einem anderen Baum vergleichen (z. B. HEAD)), möglicherweise git diff-files(Arbeitsbaum mit Index vergleichen) und möglicherweise git ls-files( Listendateien ; z. B. Liste nicht verfolgt) , nicht signierte Dateien).

(Beachten Sie, dass in den folgenden Befehlen HEAD --anstelle von verwendet wird, HEADda sonst der Befehl fehlschlägt, wenn eine Datei mit dem Namen vorhanden ist HEAD.)

Verwenden Sie Folgendes, um zu überprüfen, ob ein Repository Änderungen vorgenommen hat (noch nicht festgeschrieben):

git diff-index --quiet --cached HEAD --
  • Wenn es mit beendet 0wird, gab es keine Unterschiede ( 1bedeutet, dass es Unterschiede gab).

So überprüfen Sie, ob ein Arbeitsbaum Änderungen enthält, die bereitgestellt werden könnten:

git diff-files --quiet
  • Der Exit-Code ist der gleiche wie für git diff-index( 0== keine Unterschiede; 1== Unterschiede).

So überprüfen Sie, ob sich die Kombination aus Index und nachverfolgten Dateien im Arbeitsbaum in Bezug auf Folgendes geändert hat HEAD:

git diff-index --quiet HEAD --
  • Dies ist wie eine Kombination der beiden vorherigen. Ein Hauptunterschied besteht darin, dass immer noch "keine Unterschiede" gemeldet werden, wenn Sie eine abgestufte Änderung haben, die Sie im Arbeitsbaum "rückgängig gemacht" haben (zurück zu den Inhalten, die sich in befinden HEAD). In derselben Situation würden die beiden separaten Befehle Berichte über "vorhandene Unterschiede" zurückgeben.

Sie haben auch nicht verfolgte Dateien erwähnt. Sie meinen möglicherweise "nicht verfolgt und nicht signiert", oder Sie meinen einfach "nicht verfolgt" (einschließlich ignorierter Dateien). In jedem Fall git ls-filesist das Werkzeug für den Job:

Für "nicht verfolgt" (enthält ignorierte Dateien, falls vorhanden):

git ls-files --others

Für "nicht verfolgt und nicht signiert":

git ls-files --exclude-standard --others

Mein erster Gedanke ist, nur zu überprüfen, ob diese Befehle ausgegeben wurden:

test -z "$(git ls-files --others)"
  • Wenn es mit beendet 0wird, gibt es keine nicht verfolgten Dateien. Wenn es mit beendet 1wird, gibt es nicht verfolgte Dateien.

Es besteht eine geringe Wahrscheinlichkeit, dass dadurch abnormale Exits git ls-filesin Berichte "Keine nicht verfolgten Dateien" übersetzt werden (beide führen zu Exits ungleich Null des obigen Befehls). Eine etwas robustere Version könnte folgendermaßen aussehen:

u="$(git ls-files --others)" && test -z "$u"
  • Die Idee ist dieselbe wie beim vorherigen Befehl, ermöglicht jedoch die git ls-filesAusbreitung unerwarteter Fehler . In diesem Fall kann ein Exit ungleich Null bedeuten, dass nicht verfolgte Dateien vorhanden sind, oder dass ein Fehler aufgetreten ist. Wenn Sie stattdessen die Ergebnisse "Fehler" mit dem Ergebnis "Keine nicht verfolgten Dateien" kombinieren möchten, verwenden Sie test -n "$u"(wobei exit von 0"einige nicht verfolgte Dateien" bedeutet und ungleich Null Fehler oder "keine nicht verfolgten Dateien" bedeutet).

Eine andere Idee besteht darin --error-unmatch, einen Exit ungleich Null zu verursachen, wenn keine nicht verfolgten Dateien vorhanden sind. Dies birgt auch das Risiko, dass "keine nicht verfolgten Dateien" (Beenden 1) mit "Ein Fehler ist aufgetreten" (Beenden ungleich Null, aber wahrscheinlich 128) zusammengeführt werden. Die Überprüfung auf Exit-Codes von 0vs. 1vs. ungleich Null ist jedoch wahrscheinlich ziemlich robust:

git ls-files --others --error-unmatch . >/dev/null 2>&1; ec=$?
if test "$ec" = 0; then
    echo some untracked files
elif test "$ec" = 1; then
    echo no untracked files
else
    echo error from ls-files
fi

Jedes der oben genannten git ls-filesBeispiele kann verwendet werden, --exclude-standardwenn Sie nur nicht verfolgte und nicht signierte Dateien berücksichtigen möchten.

Chris Johnsen
quelle
5
Ich möchte darauf hinweisen , dass git ls-files --othersgibt lokale untracked Dateien, während die git status --porcelainder akzeptierte Antwort alle die untracked Dateien gibt , die unter dem git - Repository sind. Ich bin nicht das, was das Originalplakat wollte, aber der Unterschied zwischen beiden ist interessant.
Eric O Lebigot
1
@phunehehe: Sie müssen eine Pfadspezifikation mit angeben --error-unmatch. Versuchen Sie es (z. B.) git ls-files --other --error-unmatch --exclude-standard .(beachten Sie die nachfolgende Periode, die sich auf die cwd bezieht; führen Sie diese aus dem Verzeichnis der obersten Ebene des Arbeitsbaums aus).
Chris Johnsen
8
@phs: Möglicherweise müssen Sie dies git update-index -q --refreshvor dem tun diff-index, um einige „Fehlalarme“ zu vermeiden, die durch nicht übereinstimmende stat (2) -Informationen verursacht werden.
Chris Johnsen
1
Ich wurde von der git update-indexNotwendigkeit gebissen ! Dies ist wichtig, wenn etwas die Dateien berührt, ohne Änderungen vorzunehmen.
Nakedible
2
@RobertSiemer Mit "lokal" meine ich die Dateien in Ihrem aktuellen Verzeichnis , die sich möglicherweise unter dem Haupt-Git-Repository befinden. Die --porcelainLösung listet alle nicht verfolgten Dateien auf, die im gesamten Git-Repository gefunden wurden (abzüglich der von Git ignorierten Dateien), selbst wenn Sie sich in einem der Unterverzeichnisse befinden.
Eric O Lebigot
139

Angenommen, Sie sind auf Git 1.7.0 oder höher ...

Nachdem ich alle Antworten auf dieser Seite gelesen und einige Experimente durchgeführt habe, denke ich, dass die Methode, die die richtige Kombination aus Korrektheit und Kürze trifft, folgende ist:

test -n "$(git status --porcelain)"

Während Git eine Menge Nuancen zwischen dem zulässt, was verfolgt, ignoriert, nicht verfolgt, aber nicht signiert usw. ist, glaube ich, dass der typische Anwendungsfall für die Automatisierung von Build-Skripten besteht, bei denen Sie alles stoppen möchten, wenn Ihre Kaufabwicklung nicht sauber ist.

In diesem Fall ist es sinnvoll zu simulieren, was der Programmierer tun würde: git statusGeben Sie die Ausgabe ein und sehen Sie sie sich an. Wir möchten uns jedoch nicht darauf verlassen, dass bestimmte Wörter --porcelainangezeigt werden. Daher verwenden wir den in 1.7.0 eingeführten Modus. Wenn diese Option aktiviert ist, führt ein sauberes Verzeichnis zu keiner Ausgabe.

Dann prüfen wir test -n, ob eine Ausgabe vorhanden war oder nicht.

Dieser Befehl gibt 1 zurück, wenn das Arbeitsverzeichnis sauber ist, und 0, wenn Änderungen festgeschrieben werden müssen. Sie können das -nin a ändern , -zwenn Sie das Gegenteil wollen. Dies ist nützlich, um dies mit einem Befehl in einem Skript zu verketten. Beispielsweise:

test -z "$(git status --porcelain)" || red-alert "UNCLEAN UNCLEAN"

Dies besagt effektiv: "Entweder müssen keine Änderungen vorgenommen werden oder es wird ein Alarm ausgelöst." Je nach dem Skript, das Sie schreiben, ist dieser Einzeiler möglicherweise einer if-Anweisung vorzuziehen.

Benzado
quelle
1
Für mich lieferten alle anderen Befehle unterschiedliche Ergebnisse bei derselben Wiederholung zwischen Linux und Windows. Dieser Befehl gab mir in beiden die gleiche Ausgabe.
Adarsha
6
Vielen Dank, dass Sie die Frage beantwortet haben und nicht weiter und weiter streifen, ohne eine klare Antwort zu geben.
NateS
Kombinieren Sie dies für ein manuelles Bereitstellungsskript mit test -n "$(git diff origin/$branch)", um zu verhindern, dass lokale Commits in einer Bereitstellung zulässig sind
Erik Aronesty
14

Eine Implementierung aus VonCs Antwort:

if [[ -n $(git status --porcelain) ]]; then echo "repo is dirty"; fi
Dean Rather
quelle
8

Ich habe ein paar dieser Antworten durchgesehen ... (und hatte verschiedene Probleme mit * nix und Windows, was eine Anforderung war, die ich hatte) ... fand, dass das Folgende gut funktioniert hat ...

git diff --no-ext-diff --quiet --exit-code

So überprüfen Sie den Exit-Code in * nix

echo $?   
#returns 1 if the repo has changes (0 if clean)

So überprüfen Sie den Exit-Code im Fenster $

echo %errorlevel% 
#returns 1 if the repos has changes (0 if clean) 

Der von https://github.com/sindresorhus/pure/issues/115 Dank @paulirish an diesem Beitrag für die gemeinsame Nutzung

mlo55
quelle
4

Warum nicht git statusmit einem Skript einkapseln, das:

  • analysiert die Ausgabe dieses Befehls
  • gibt den entsprechenden Fehlercode basierend auf Ihren Anforderungen zurück

Auf diese Weise können Sie diesen erweiterten Status in Ihrem Skript verwenden.


Wie 0xfe in seiner hervorragenden Antwort erwähnt , git status --porcelainist es für jede skriptbasierte Lösung von entscheidender Bedeutung

--porcelain

Geben Sie die Ausgabe in einem stabilen, einfach zu analysierenden Format für Skripte an.
Derzeit ist dies identisch mit --short output, wird sich aber in Zukunft garantiert nicht ändern, sodass es für Skripte sicher ist.

VonC
quelle
Weil ich wahrscheinlich faul bin. Ich dachte, es gibt einen eingebauten Anwendungsfall, da dies ein ziemlich häufig anzutreffender Anwendungsfall zu sein scheint.
Robert Munteanu
Ich habe eine Lösung auf der Grundlage Ihres Vorschlags veröffentlicht, obwohl ich damit nicht sehr zufrieden bin.
Robert Munteanu
4

Eine DIY-Möglichkeit, die aktualisiert wurde, um dem Vorschlag von 0xfe zu folgen

#!/bin/sh
exit $(git status --porcelain | wc -l) 

Wie von Chris Johnsen bemerkt , funktioniert dies nur auf Git 1.7.0 oder neuer.

Robert Munteanu
quelle
6
Das Problem dabei ist, dass Sie die Zeichenfolge 'Arbeitsverzeichnis sauber' in zukünftigen Versionen nicht zuverlässig erwarten können. Das Flag --porcelain war zum Parsen gedacht, daher wäre eine bessere Lösung: exit $ (git status --porcelain | wc -l)
0xfe
@ 0xfe - Weißt du, wann die --porcelainFlagge hinzugefügt wurde? Funktioniert nicht mit 1.6.4.2.
Robert Munteanu
@ Robert: versuchen Sie es git status --shortdann.
VonC
3
git status --porcelainund git status --shortwurden beide in 1.7.0 eingeführt. --porcelainEs wurde speziell eingeführt, um git status --shortdas Format in Zukunft ändern zu können. Es git status --shortwürde also das gleiche Problem auftreten wie git status(die Ausgabe kann sich jederzeit ändern, da es sich nicht um einen Installationsbefehl handelt).
Chris Johnsen
@ Chris, danke für die Hintergrundinformationen. Ich habe die Antwort aktualisiert, um die beste Vorgehensweise ab Git 1.7.0 widerzuspiegeln.
Robert Munteanu
2

Ich brauchte ziemlich oft einen einfachen Weg, um einen Build fehlzuschlagen, wenn am Ende der Ausführung modifizierte oder nicht verfolgte Dateien vorhanden sind, die nicht ignoriert werden.

Dies ist sehr wichtig, um zu vermeiden, dass Builds Reste produzieren.

Bisher sieht der beste Befehl, den ich letztendlich verwendet habe, so aus:

 test -z "$(git status --porcelain | tee /dev/fd/2)" || \
     {{ echo "ERROR: git unclean at the end, failing build." && return 1 }}

Es mag etwas komplex aussehen und ich würde mich freuen, wenn jemand eine kurzgeschlossene Variante findet, die das gewünschte Verhalten beibehält:

  • Keine Ausgabe und erfolgreicher Exit-Code, wenn alles in Ordnung ist
  • Beenden Sie Code 1, wenn dies fehlschlägt
  • Fehlermeldung auf stderr, die erklärt, warum es fehlschlägt
  • Liste der Dateien anzeigen, die den Fehler verursacht haben, stderr erneut.
Sorin
quelle
2

@ eduard-wirch Antwort war ziemlich vollständig, aber da ich beide gleichzeitig überprüfen wollte, ist hier meine endgültige Variante.

        set -eu

        u="$(git ls-files --others)"
        if ! git diff-index --name-only --quiet HEAD -- || [ -z "${u:-}" ]; then
            dirty="-dirty"
        fi

Wenn die Ausführung nicht mit set -e oder einem gleichwertigen Element ausgeführt wird, können wir stattdessen eine ausführen u="$(git ls-files --others)" || exit 1(oder zurückkehren, wenn dies für eine verwendete Funktion funktioniert).

Untracked_files wird also nur gesetzt, wenn der Befehl ordnungsgemäß erfolgreich ist.

Danach können wir nach beiden Eigenschaften suchen und eine Variable (oder was auch immer) festlegen.

oliver
quelle
1

Dies ist eine Shell-freundlichere Variante, um herauszufinden, ob nicht verfolgte Dateien im Repository vorhanden sind:

# Works in bash and zsh
if [[ "$(git status --porcelain 2>/dev/null)" = *\?\?* ]]; then
  echo untracked files
fi

Dies führt nicht zu einem zweiten Prozess grepund erfordert keine Überprüfung, ob Sie sich in einem Git-Repository befinden oder nicht. Das ist praktisch für Shell-Eingabeaufforderungen usw.

docwhat
quelle
1

Sie können auch tun

git describe --dirty

. Am Ende wird das Wort "-dirty" angehängt, wenn ein schmutziger Arbeitsbaum erkannt wird. Nach git-describe(1):

   --dirty[=<mark>]
       Describe the working tree. It means describe HEAD and appends <mark> (-dirty by default) if
       the working tree is dirty.

. Vorsichtsmaßnahme: Nicht verfolgte Dateien gelten nicht als "schmutzig", da sie sich, wie in der Manpage angegeben, nur um den Arbeitsbaum kümmern.

Linus Arver
quelle
0

Es kann eine bessere Kombination von Antworten aus diesem Thread sein .. aber das funktioniert für mich ... für .gitconfig‚s [alias]Abschnitt ...

          # git untracked && echo "There are untracked files!"
untracked = ! git status --porcelain 2>/dev/null | grep -q "^??"
          # git unclean && echo "There are uncommited changes!"
  unclean = ! ! git diff --quiet --ignore-submodules HEAD > /dev/null 2>&1
          # git dirty && echo "There are uncommitted changes OR untracked files!"
    dirty = ! git untracked || git unclean
Alex Gray
quelle
0

Der einfachste automatische Test, den ich verwende, um einen verschmutzten Zustand zu erkennen = alle Änderungen, einschließlich nicht verfolgter Dateien :

git add --all
git diff-index --exit-code HEAD

HINWEIS:

  • Ohne add --all diff-index bemerkt nicht verfolgte Dateien nicht.
  • Normalerweise laufe ich git resetnach dem Testen des Fehlercodes, um alles wieder zu entfernen.
uvsmtid
quelle
Die Frage ist speziell "aus einem Skript" ... es ist keine gute Idee, den Index zu ändern, nur um auf schmutzigen Zustand zu testen.
ScottJ
@ScottJ, wenn es das Problem löst, ist nicht jeder unbedingt streng, ob der Index geändert werden kann oder nicht. Betrachten Sie den Fall eines automatisierten Jobs, bei dem es um automatische Patch-Quellen mit Versionsnummer geht, und erstellen Sie ein Tag. Sie müssen lediglich sicherstellen, dass absolut keine anderen lokalen Änderungen im Weg bleiben (unabhängig davon, ob sie im Index enthalten sind oder nicht). Bisher war dies ein zuverlässiger Test für Änderungen, einschließlich nicht verfolgter Dateien .
Uvsmtid
-3

Hier ist der beste und sauberste Weg. Die ausgewählte Antwort hat aus irgendeinem Grund bei mir nicht funktioniert. Sie hat keine Änderungen erfasst, bei denen es sich um neue Dateien handelt, die nicht festgeschrieben wurden.

function git_dirty {
    text=$(git status)
    changed_text="Changes to be committed"
    untracked_files="Untracked files"

    dirty=false

    if [[ ${text} = *"$changed_text"* ]];then
        dirty=true
    fi

    if [[ ${text} = *"$untracked_files"* ]];then
        dirty=true
    fi

    echo $dirty
}
codyc4321
quelle