Ich möchte in der Lage sein, ein großes Repository mit Python und einer Bibliothek zu klonen, aber vor allem möchte ich den Fortschritt des Klons sehen können, während er geschieht. Ich habe pygit2 und GitPython ausprobiert, aber sie scheinen ihren Fortschritt nicht zu zeigen. Gibt es eine andere Art und Weise?
Wie kann ich ein Repository mit Python klonen und den Fortschritt des Klonvorgangs abrufen?
Robᵩ
Sie können verwenden RemoteProgress
aus GitPython. Hier ein grobes Beispiel:
import git
class Progress(git.remote.RemoteProgress):
def update(self, op_code, cur_count, max_count=None, message=""):
print 'update(%s, %s, %s, %s)'%(op_code, cur_count, max_count, message)
repo = git.Repo.clone_from(
'https://github.com/gitpython-developers/GitPython',
'./git-python',
progress=Progress())
Oder verwenden Sie diese update()
Funktion für ein etwas verfeinertes Nachrichtenformat:
def update(self, op_code, cur_count, max_count=None, message=""):
print self._cur_line
Bruce
Wenn Sie nur die Kloninformationen abrufen möchten, ist keine Installation erforderlich gitpython
können Sie es direkt aus dem Standardfehlerstrom über die integrierte Funktion abrufen subprocess
Modul.
import os
from subprocess import Popen, PIPE, STDOUT
os.chdir(r"C:\Users") # The repo storage directory you want
url = "https://github.com/USER/REPO.git" # Target clone repo address
proc = Popen(
["git", "clone", "--progress", url],
stdout=PIPE, stderr=STDOUT, shell=True, text=True
)
for line in proc.stdout:
if line:
print(line.strip()) # Now you get all terminal clone output text
Sie können einige relative Informationen zum Klonbefehl sehen, nachdem Sie den Befehl ausgeführt haben git help clone
.
--progress
Der Fortschrittsstatus wird standardmäßig im Standardfehlerstrom gemeldet, wenn er an ein Terminal angeschlossen ist, es sei denn
--quiet
angegeben. Dieses Flag erzwingt den Fortschrittsstatus, selbst wenn der Standardfehlerstrom nicht an ein Terminal geleitet wird.
Wie möchten Sie den Fortschritt anzeigen? In einer GUI oder auf stdout?
– Robᵩ
5. August 2016 um 3:42 Uhr
stackoverflow.com/questions/23155452/…
– DavidN
5. August 2016 um 3:53 Uhr
@Robᵩ, ich dachte nur so, wie der CLI-Git-Befehl Ihnen den Fortschritt anzeigt, z. B. Objekt 11/27 greifen …
– Jonathan
9. August 2016 um 7:19 Uhr