Wie erhalte ich bereitgestellte Dateien mit GitPython?

Lesezeit: 3 Minuten

Benutzeravatar von Kentaro Wada
Kentaro Wada

Ich zähle bereitgestellte Dateien in Git mit GitPython.

Für geänderte Dateien kann ich verwenden

repo = git.Repo()
modified_files = len(repo.index.diff(None))

Aber für bereitgestellte Dateien kann ich keine Lösung finden.

Ich weiss git status --porcelain aber ich suche nach einer anderen Lösung, die besser ist. (Ich hoffe mit gitpython nicht Git-Befehl, das Skript wird schneller sein)

Benutzeravatar von Anshul Goyal
Anshul Goyal

Du bist in der Nähe, benutze repo.index.diff("HEAD") um Dateien im Staging-Bereich abzurufen.


Vollständige Demo:

Erstellen Sie zunächst ein Test-Repo:

$ cd test
$ mkdir repo && cd repo && touch a b c && git init && git add . && git commit -m "init"
$ echo "a" > a && echo "b" > b && echo "c" > c && git add a b
$ git status
On branch master
Changes to be committed:
        modified:   a
        modified:   b
Changes not staged for commit:
        modified:   c

Checken Sie nun ipython ein:

$ ipython
In [1]: import git
In [2]: repo = git.Repo()
In [3]: count_modified_files = len(repo.index.diff(None))
In [4]: count_staged_files = len(repo.index.diff("HEAD"))
In [5]: print count_modified_files, count_staged_files
1 2

  • len(repo.index.diff("HEAD")) bricht bei einem Repo ohne Commits ab. Gibt es eine Möglichkeit, dies zu umgehen?

    – pd93

    3. Juli 2021 um 15:11 Uhr

  • @pd93 „Pausen“ ist keine nützliche Beschreibung des Problems, das Sie gesehen haben. Es besteht eine gute Chance, dass Sie, wenn Sie in nützlichen Beschreibungen denken, so etwas wie „löst eine Ausnahme aus“, selbst herausfinden können, wie Sie das Problem beheben können.

    – mah

    29. Dezember 2021 um 20:28

  • @mah Klar, ich stimme zu, dass „eine Ausnahme auslöst“ eine bessere Beschreibung ist als „Unterbrechungen“. Mein Punkt war lediglich, dass diese Antwort (obwohl sie in den meisten Fällen hervorragend ist) das Problem nicht löst, wenn Sie keine gültige Antwort haben HEAD. (z. B. in einem Repo ohne Commits). Das Bereitstellen von Dateien in einem Repo ohne HEAD ist ein gültiger Status und das Abfangen der Ausnahme, die durch die Ausführung des Codes in der Antwort ausgelöst wird, hilft in diesem Szenario nicht weiter. Anstatt sich über die Semantik Gedanken zu machen, wäre es viel wertvoller, wenn Sie eine Alternative vorschlagen würden, anstatt auf einer wörtlichen Frage-und-Antwort-Website zu kommentieren: „Finden Sie es selbst heraus.“

    – pd93

    30. Dezember 2021 um 21:10 Uhr

  • @pd93 Es geht hier nicht um eine heikle Terminologie; Willkommen in der Informatik, wo Präzision in der Kommunikation zählt. Wenn Sie jedoch eine Antwort auf Ihr Problem wünschen, müssen Sie eine Frage richtig posten – keinen Kommentar zu einer anderen Antwort, sondern eine tatsächlich neue Frage. So funktioniert diese Seite; Der Grund dafür ist, dass in Zukunft möglicherweise andere von Ihrer Frage und den folgenden Antworten profitieren könnten. Wenn Sie nur in einem Kommentar beantwortet würden, wäre Ihnen geholfen, aber andere würden als Community nicht davon profitieren.

    – mah

    31. Dezember 2021 um 18:22 Uhr

1450380cookie-checkWie erhalte ich bereitgestellte Dateien mit GitPython?

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

Privacy policy