Verschieben des lokalen Repositorys in das Remote-Repository mithilfe von Python Github

Oct 28 2020

Der Code sollte in der folgenden Reihenfolge Folgendes ausführen:

  1. Es sollte das öffentliche Github-Repository lokal herunterladen / klonen.
  2. Es sollte den gesamten Git-Verlauf (und die Zweige) entfernen.
  3. 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

2 Reinderien Oct 28 2020 at 05:02

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'
Dion Oct 28 2020 at 18:44

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