Wie man “git status” ausführt und nur die Dateinamen erhält

Lesezeit: 5 Minuten

Benutzeravatar von Mahdi Yusuf
Mahdi Yusuf

Wie kann ich “git status” ausführen und nur die Dateinamen im Gegensatz zum langen relativen Pfad abrufen?

Benutzeravatar von Mark Longair
Markus Longair

Die Ausgabe von git status --porcelaindas so konzipiert ist, dass es in einem Skript einfach zu analysieren ist, gibt die vollständigen Pfade anstelle der relativen Pfade aus, unabhängig davon, wo sich Ihr aktuelles Verzeichnis innerhalb des Baums befindet.

Jede Zeile ausgegeben von git status --porcelain hat zwei führende Zeichen, die den Status der Datei angeben (z. B. ob sie nicht verfolgt, geändert, neu, gelöscht usw. ist), gefolgt von einem Leerzeichen. Wenn Sie also nur die vollständigen Pfade von allem möchten, was in der Ausgabe von erwähnt würde git status du kannst tun:

git status --porcelain | sed s/^...//

  • Das gleiche wie git status -s, aber ohne Färbung.

    – Ohrlängsschienen

    6. Februar 2013 um 18:51 Uhr

  • Ich habe festgestellt, dass ich nach einer etwas anderen Frage gesucht habe, aber diese enthält immer noch die Statusmarkierung (von der ich nicht glaube, dass es eine Option zum Entfernen gibt). Die Antwort von @sehe ist besser, wenn Sie nur den Dateinamen und sonst nichts wollen.

    – Isaac Aggrey

    7. August 2013 um 22:05 Uhr


  • @IsaacAggrey: außer dass Sie mit der Antwort von sehe mehrere Befehle ausführen müssen, und selbst diese Befehle werden nicht nachverfolgte Dateien übersehen, die in der Ausgabe von git status erscheinen würden, daher ist dies keine genaue Antwort auf die Frage. Es ist einfach, die Statuszeichen am Anfang der von mir vorgeschlagenen Ausgabe zu entfernen – ich habe meine Antwort bearbeitet, um zu zeigen, wie.

    – Mark Longair

    23. August 2013 um 8:59 Uhr


  • @earlonrails Es ist nur dasselbe, wenn Sie sich im Stammverzeichnis befinden, führen Sie dieselben Befehle aus einem Unterverzeichnis des Repos aus und Sie werden sehen, dass einer relative Pfade zum Arbeitsverzeichnis verwendet, der andere vollständige Pfade im Stammverzeichnis des Repos

    – jxramos

    28. März 2018 um 23:55 Uhr

  • @jxramos Sie können cut immer noch verwenden, ändern Sie einfach das Flag für den Befehl git status, git status --porcelain | cut -c4-. Meiner Meinung nach cut ist besser als benutzen sed weil mehr Systeme haben werden cut bereits installiert.

    – Ohrlängsschienen

    2. April 2018 um 18:41 Uhr


Benutzeravatar von earlonrails
earlonrails

Ich finde cut ist gut dafür.

git status -s | cut -c4-

  • und hier habe ich sed verwendet, um die Statuscodes zu entfernen. Ich habe das Flag -c noch nie zum Schneiden verwendet. Hübsch! fügen Sie dies zu Ihrer .gitconfig für einen guten Tagesstart hinzu: de=!$EDITOR $( git status --porcelain | cut -c4- ) & # open all changed files in EDITOR

    – Johannes Hart

    2. August 2013 um 22:09 Uhr


  • Für jemanden, der sich nicht auskennt cut Befehl, cut -c 4- bedeutet, Zeichen vom vierten Zeichen nehmen.

    – Sanghyun Lee

    20. Februar 2014 um 7:15 Uhr


  • Ja, sauberer als in diesem Fall.

    – Simon Pickup

    12. April 2019 um 7:48 Uhr

Benutzeravatar von sehe
sehen

Aha, ich denken Ich habe gerade habe die Frage verstanden: Sie wollen Basisnamen? Anheften | while read a; do basename "$a"; done zu einem der folgenden:

wie wäre es mit

  • git diff --name-only

    für Änderungen relativ zum Index

  • git diff --name-only --staged

    für … gut inszenierte Chages 🙂

  • git diff --name-only HEAD

    habe beides

  • Ich verstehe, wenn du nur willst Basisnamen heften Sie dies an das Ende von: ` | while read fname; do basename “$fname”; fertig`

    – sehen

    16. März 2011 um 14:27 Uhr

  • Erzeugt keine Pfadnamen relativ zum aktuellen Verzeichnis wie git status | Antwort schneiden

    – AnthumChris

    14. März 2019 um 21:13 Uhr


  • Auch wenn es sicherlich nur relativ zum Stamm des Git-Repositorys ausgibt, ist dies eine viel treffendere Lösung als git status --porcelainda Sie die Ausgabe nicht verarbeiten/bereinigen müssen.

    – Miguel Ruiz

    3. November 2021 um 17:34 Uhr

  • Funktioniert einfach super: vi `git dno` Ich glaube, die dno-Verknüpfung für git diff kam standardmäßig in meine gitconfig.

    – k00ka

    9. Februar 2022 um 17:43 Uhr


Eine viel einfachere Lösung, die in integriert ist git verwenden ls-files.

Aus den Dokumenten:

OPTIONEN

-c –cached Zwischengespeicherte Dateien in der Ausgabe anzeigen (Standard)

-d –deleted Gelöschte Dateien in der Ausgabe anzeigen

-m –modified Zeigt geänderte Dateien in der Ausgabe an

-o –others Andere (dh nicht getrackte) Dateien in der Ausgabe anzeigen

-i –ignored Nur ignorierte Dateien in der Ausgabe anzeigen. Wenn Sie Dateien im Index anzeigen, drucken Sie nur diejenigen, die mit einem Ausschlussmuster übereinstimmen. Wenn Sie „andere“ Dateien anzeigen, zeigen Sie nur diejenigen an, die mit einem Ausschlussmuster übereinstimmen. Standard-Ignore-Regeln werden nicht automatisch aktiviert, daher ist mindestens eine der –exclude*-Optionen erforderlich.

-s –stage Zeigt die Modusbits, den Objektnamen und die Stufennummer des gestuften Inhalts in der Ausgabe an.

-u –unmerged Nicht zusammengeführte Dateien in der Ausgabe anzeigen (erzwingt –stage)

Beispiel, das Flaggen zeigt, kann auch kombiniert werden:

git ls-files -dmo

Benutzeravatar von Dan McClain
Dan McClain

git status wird immer nach unten gehen (bearbeiten und höher) den Baum und zeigen relative Pfade an. Wenn Sie die Datei nur in dem Verzeichnis haben möchten, in dem Sie sich befinden, lesen Sie diese verwandte Antwort

Benutzeravatar von You-Liang Shih
Sie-Liang Shih

Rufen Sie den Namen geänderter Dateien ab

git status --porcelain|awk '{if($1=="M") {print "basename " $2}}'|sh

Ich verwende ein ähnliches Skript, um meine geänderten Dateien wie folgt auf einen Remote-Server zu kopieren:

git status --porcelain|awk '{if($1=="M") {print "scp " $2 " account_name@server_ip:~/my_codebase/$(dirname " $2 ")/;"} }'|sh

Benutzeravatar von Stassa Patsantzis
Stassa Patsantzis

git status gibt relative Pfade aus, wenn Sie also in dasselbe Verzeichnis wie die Datei (unter dem Stammverzeichnis Ihres Arbeitsverzeichnisses) wechseln, bevor Sie git status ausführen, werden nur die Basisnamen von hinzugefügten/bereitgestellten Dateien ausgegeben.

cd /long/path/to/my/repo/root/dir
"stuff" > ./newfile.txt
> git status
# On branch master
# Changes not staged for commit:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#       modified:   /long/path/to/my/repo/root/dir/plus/some/more/levels/of/directory/structure/inside/it/changed_file.txt
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#       long/path/to/my/repo/root/dir/plus/some/even/more/levels/of/directory/structure/inside/it/but_another_new_file.txt
#       newfile.txt
no changes added to commit (use "git add" and/or "git commit -a")

dh „newfile.txt“ wird ohne den vollständigen Pfad aufgeführt, da Sie sich im selben Pfad befinden.

1446100cookie-checkWie man “git status” ausführt und nur die Dateinamen erhält

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

Privacy policy