Verschieben des lokalen Repositorys in das Remote-Repository mithilfe von Python Github
Der Code sollte in der folgenden Reihenfolge Folgendes ausführen:
- Es sollte das öffentliche Github-Repository lokal herunterladen / klonen.
- Es sollte den gesamten Git-Verlauf (und die Zweige) entfernen.
- Verwenden Sie die Github-API, um ein neues Github-Repository zu erstellen, das mit dem eingegebenen Github-Repository-Inhalt initialisiert wurde, den Sie lokal heruntergeladen haben. Das neue Repository sollte unter Verwendung des angegebenen Namens benannt werden. Ich kann die Schritte 1 und 3 ausführen, frage aber zweimal nach der Anmeldung . Ich kann das neue Remote-Repo nicht mit dem lokalen Repo initialisieren. local_repo = repo1 wie? Und Git-Geschichte entfernen? Wo finde ich die Git-Geschichte im geklonten Repo?
import git,os,tempfile,os,fnmatch,sys
from github import Github
username = sys.argv[1]
password = sys.argv[2]
input_repo_url = sys.argv[3]
output_repo_name = sys.argv[4]
tempdir=tempfile.mkdtemp(prefix="",suffix="")
predictable_filename = "myfile"
saved_umask = os.umask(77)
path = os.path.join(tempdir,predictable_filename)
print("Cloning the repository at "+path)
local_repo = git.Repo.clone_from(input_repo_url,path, branch="master")
print("Clone successful!")
g = Github(username,password)
user = g.get_user()
repo1 = user.create_repo(output_repo_name)
print("New repository created at "+username+" account ")
print(repo1)
target_url = "https://github.com/"+username+"/"+output_repo_name+".git"
print(target_url)
print("Pushing cloned repo to target repo")
local_repo.create_remote("new",url=target_url)
local_repo.git.push("new")
print("Success!!")
Antworten
Oktale Berechtigungsfelder
77
ist wahrscheinlich falsch. Was Sie geschrieben haben, ist 77 in Dezimalzahl , aber dies würde 115in Oktal funktionieren . Wenn Sie 077in Oktal wollten , müssten Sie tatsächlich schreiben 0o077.
Pathlib
Erwägen Sie das Ersetzen os.pathdurch die Verwendung von pathlib.
Argumentanalyse
Die argvAnalyse, die Sie durchgeführt haben, ist fragil. Sie schlägt mit einer Ausnahme für ungültige Indizes fehl, wenn der Benutzer nicht genügend Parameter angibt. Verwenden Sie argparsestattdessen.
Außerdem: Fragen Sie nicht als Teil einer Befehlszeile nach einem Kennwort, da es im Shell-Verlauf des Benutzers gespeichert wird. Akzeptieren Sie es von einer Umgebungsvariablen, einer sicheren Brieftasche oder von stdin via getpass(nicht input).
String-Interpolation
"https://github.com/"+username+"/"+output_repo_name+".git"
ist leichter zu schreiben als
f'https://github.com/{username}/{output_repo_name}.git'
Kommentieren Sie Ihren Code
Dies ist ein allgemeinerer Tipp, aber es ist sehr empfehlenswert, Kommentare in Ihren Code einzufügen, um ihn lesbarer und verständlicher zu machen