Invio del repository locale al repository remoto utilizzando python Github

Oct 28 2020

Il codice dovrebbe eseguire le seguenti operazioni in ordine:

  1. Dovrebbe scaricare / clonare il repository Github pubblico in locale.
  2. Dovrebbe rimuovere tutta la cronologia di git (e i rami)
  3. Utilizza l'API Github per creare un nuovo repository Github inizializzato con il contenuto del repository Github di input scaricato in locale. Il nuovo repository dovrebbe essere denominato utilizzando il nome fornito. Sono in grado di eseguire i passaggi 1 e 3 ma chiedo di eseguire il login 2 volte . Non sono in grado di inizializzare il nuovo repository remoto con il repository locale. local_repo = repo1 come? E rimuovere la cronologia di git? dove posso trovare la cronologia di git nel repository clonato.
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!!")

Risposte

2 Reinderien Oct 28 2020 at 05:02

Campi di autorizzazione ottale

77

probabilmente non è corretto. Quello che hai scritto è 77 in decimale , ma funzionerebbe 115in ottale. Se volessi 077in ottale, dovresti effettivamente scrivere 0o077.

Pathlib

Considera la sostituzione os.pathcon l'uso di pathlib.

Analisi degli argomenti

L' argvanalisi che hai fatto è fragile: fallirà con un'eccezione di indice non valido se l'utente fornisce parametri insufficienti. Considera l'utilizzo argparseinvece.

Inoltre: non chiedere una password come parte di una riga di comando, poiché verrà memorizzata nella cronologia della shell dell'utente. Accettalo da una variabile ambientale, un portafoglio sicuro o da stdin tramite getpass(non input).

Interpolazione di stringhe

"https://github.com/"+username+"/"+output_repo_name+".git"

è più facilmente scritto come

f'https://github.com/{username}/{output_repo_name}.git'
Dion Oct 28 2020 at 18:44

Commenta il tuo codice

Questo è un suggerimento più generale, ma è una buona pratica inserire commenti nel codice per renderlo più leggibile e comprensibile