git update-index –assume-unchanged im Verzeichnis

Lesezeit: 3 Minuten

git update index assume unchanged im Verzeichnis
Xander Dunn

git 1.7.12

Ich möchte alle Dateien unterhalb eines bestimmten Verzeichnisses als unveränderlich markieren.

  1. git update-index --assume-unchanged dir/ ergibt “Pfad ignorieren”.

  2. git update-index --assume-unchanged dir/* schlägt schnell fehl, da es auf Dateien stößt, die nicht verfolgt werden, daher gibt es “fatal: Unable to mark file” aus und wird beendet.

  3. Versuchen Sie, eine Liste der zu markierenden Dateien zu erstellen. cd in das gewünschte Verzeichnis und dann ausführen git ls-files | tr '\n' ' ' | git update-index --assume-unchanged. Das erzeugt keine Fehlermeldung, aber es markiert die Dateien nicht erfolgreich. Der erste Teil des Befehls, git ls-files | tr '\n' ' ', erzeugt korrekterweise eine durch Leerzeichen getrennte Liste aller Dateien, die ich markieren möchte. Wenn ich die Ausgabe dieses Befehls kopiere und in die Befehlszeile einfüge, dann wird die git update-index Befehl funktioniert. Was funktioniert nicht mit den Rohren?

Nein, es genügt mir nicht hinzuzufügen dir zu .gitignorieren. Ich brauche diese Dateien im Repository, aber es werden lokal unerwünschte Änderungen vorgenommen, die ignoriert werden müssen, damit Benutzer Pulls durchführen können.

  • Du hast dich verschrieben –annehmen-unchanged

    – Adam Mudianto

    25. September 2020 um 2:30 Uhr


  • @AdamMudianto behoben

    – lenovet

    26. Oktober 2021 um 21:28 Uhr

1646642290 448 git update index assume unchanged im Verzeichnis
twalberg

git update-index möchte die Dateinamen auf seiner Befehlszeile, nicht auf seiner Standardeingabe.

Schritt 1:

cd in den Ordner, von dem Sie annehmen möchten, dass er unverändert ist

Schritt 2:

Sie können entweder Folgendes tun:

git update-index --assume-unchanged $(git ls-files | tr '\n' ' ')

oder

git ls-files | tr '\n' ' ' | xargs git update-index --assume-unchanged

In beiden Fällen sind Dateinamen mit Leerzeichen jedoch problematisch. Wenn Sie diese haben, können Sie dies verwenden:

git ls-files -z | xargs -0 git update-index --assume-unchanged

Edit: Eingabe von @MatthewScharley bzgl git ls-files -z.

Windows-Befehle

Notiz: Wenn Sie Windows verwenden, verwenden Sie GitBash um diese Befehle auszuführen

  • FYI, das ` | tr ‘\n’ ‘ ‘` Bit ist unnötig.

    – Václav Slavík

    9. Mai 2013 um 8:16 Uhr

  • @twalberg: Du könntest einfach verwenden git ls-files -z

    – Matthew Scharley

    22. Juli 2013 um 1:35 Uhr

  • @twalberg So machen Sie diesen Befehl rückgängig “git ls-files -z | xargs -0 git update-index –assume-unchanged”

    – Mohamed Hussain

    17. Februar 2015 um 13:05 Uhr


  • @MohamedHussain git ls-files -z | xargs -0 git update-index --no-assume-unchangedIch würde denken…

    – Twalberg

    17. Februar 2015 um 14:41 Uhr

  • git ls-files -z | git update-index -z --stdin ist sauberer.

    – Jed

    19. Mai 2019 um 3:42 Uhr

Die find Befehl von GNU Findutils hat eine -exec Option, die den größten Aufwand bei der Verwendung beseitigt xargs, obwohl seine Syntax etwas speziell ist. Es geht jedoch perfekt mit Dateinamen mit Leerzeichen um.

Dieser Befehl veranlasst git, anzunehmen, dass alle Dateien in und unter dem aufgelisteten Verzeichnis unverändert sind:

find path/to/dir -type f -exec git update-index --assume-unchanged '{}' \;

Find nimmt jedes Argument nach -exec noch bis ; (dem Sie entkommen müssen, damit Ihre Shell es nicht frisst) und führt es einmal für jede gefundene Datei aus, während es ersetzt wird {} (wieder einfache Anführungszeichen, damit Ihre Shell es nicht frisst) mit dem Namen der gefundenen Datei.

Verwenden finddie Übereinstimmungskriterien von (maximale Rekursionstiefe, ob die Übereinstimmung eine Datei oder ein Verzeichnis ist, ob der Dateiname mit einem Ausdruck übereinstimmt) und -exec Sie können alle möglichen mächtigen Dinge tun.

Nicht sicher über andere Implementierungen der find Befehl. YMMV.

  • -exec ist eine Standardoption. Du kannst auch -exec git update-index --assume-unchanged {} + (ebenfalls vom Standard definiert), der mehrere Dateinamen gleichzeitig an den Befehl übergibt, wodurch die Anzahl der Aufrufe des git-Befehls reduziert wird.

    – Tom Fenech

    8. Februar 2016 um 15:22 Uhr

Fügen Sie den Verzeichnisnamen hinzu .git/info/exclude. Dies funktioniert für nicht verfolgte Dateien.

  • Das funktioniert super! Wussten Sie, ob das auch mit Dateien funktioniert?

    – betomoretti

    28. September 2016 um 11:30 Uhr

  • Aber das pusht nicht die nicht getrackten Dateien github! Gibt es eine Möglichkeit, sie einfach aus den Aufzeichnungen zu ignorieren, sie aber tatsächlich in den Repos zu behalten!?

    – Mahmoud Zalt

    16. März 2017 um 22:55 Uhr

Ja,

git update-index --assume-unchanged

funktioniert nur mit Dateien, nicht mit Verzeichnissen. Ich denke, einer der schnelleren Wege:

cd dir
ls | xargs -l git update-index --assume-unchanged

964450cookie-checkgit update-index –assume-unchanged im Verzeichnis

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

Privacy policy