700 Stimmen

Rückgängig machen git update-index --assume-unchanged <file>

Ich habe den folgenden Befehl ausgeführt, um das Beobachten/Verfolgen eines bestimmten Verzeichnisses/einer bestimmten Datei zu ignorieren:

git update-index --assume-unchanged 

Wie kann ich das rückgängig machen, so dass wieder beobachtet/verfolgt wird?

24voto

C0DEF52 Punkte 1039

Wenn Sie alle Dateien rückgängig machen möchten, die als unverändert angenommen wurden, unabhängig vom Status (git markiert sie mit einem Zeichen in Kleinbuchstaben), können Sie den folgenden Befehl verwenden:

git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
  1. git ls-files -v listet alle Dateien mit ihrem Status auf
  2. grep '^[a-z]' filtert Dateien und wählt nur als unverändert angenommene aus
  3. cut -c 3- entfernt den Status und hinterlässt nur Pfade, indem es ab dem 3. Zeichen abschneidet
  4. tr '\012' '\000' ersetzt das Zeilenendezeichen (\012) durch ein Nullzeichen (\000)
  5. xargs -0 git update-index --no-assume-unchanged übergibt alle Pfade, die durch Nullzeichen getrennt sind, an git update-index --no-assume-unchanged, um sie rückgängig zu machen

15voto

sagunms Punkte 7234

Zusätzlich zu der Antwort von @adardesign, wenn Sie alle Dateien zurücksetzen möchten, die zur assume-unchanged-Liste hinzugefügt wurden, auf no-assume-unchanged in einem Schritt können Sie Folgendes tun:

git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true

Dies entfernt einfach die zwei Zeichen, die von grep ausgegeben werden, d. h. "h ", ersetzt dann alle Leerzeichen, die sich in Dateinamen befinden können, und schließlich verhindert || true, dass der Befehl vorzeitig abgebrochen wird, falls einige Dateien in der Schleife Fehler enthalten.

8voto

Shivang Gupta Punkte 2861

Wenn Sie Git Extensions verwenden, befolgen Sie die folgenden Schritte:

  1. Gehen Sie zum Commit-Fenster.
  2. Klicken Sie auf das Dropdown-Menü namens Arbeitsverzeichnisänderungen.
  3. Wählen Sie die Option Als unverändert angenommene Dateien anzeigen aus.
  4. Klicken Sie mit der rechten Maustaste auf die Datei, die Sie nicht mehr als angenommen markieren möchten.
  5. Wählen Sie Nicht als unverändert annehmen aus.

Sie sind fertig.

1voto

Tyagi Akhilesh Punkte 726

Nichts hier, was nicht abgedeckt ist. Aber ich möchte gerne meinen Senf dazugeben. Manchmal führe ich einen Build durch und es ändert viele Dateien, und dann möchte ich an etwas arbeiten, also hilft mir dieser Befehl wirklich sehr.

git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`

Hoffentlich findet es auch jemand anders nützlich.

0voto

Steve Chambers Punkte 33674

Keine der Lösungen hat für mich unter Windows funktioniert - es scheint, dass es das Großbuchstabe H anstelle von kleinbuchstabe h für den Dateistatus verwendet und der grep-Befehl ein zusätzliches Zirkumflexzeichen benötigt, da ^ auch den Anfang der Zeile sowie die Verneinung des nächsten Zeichens darstellt.

Windows-Lösung

  1. Öffnen Sie die Git-Bash und wechseln Sie in das relevante Top-Level-Verzeichnis.
  2. git ls-files -v | grep '^^H', um alle nicht zwischengespeicherten Dateien aufzulisten.
  3. git ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree, um das Überspringen der Dateien rückgängig zu machen, das über update-index --skip-worktree erfolgt ist.
  4. git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged, um das Überspringen der Dateien rückgängig zu machen, das über update-index --assume-unchanged erfolgt ist.
  5. git ls-files -v | grep '^^H', um erneut alle nicht zwischengespeicherten Dateien aufzulisten und zu überprüfen, ob die obigen Befehle funktioniert haben - jetzt sollte dies nichts mehr zurückgeben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X