Envio de repositório local para repositório remoto usando python Github

Oct 28 2020

O código deve fazer o seguinte em ordem:

  1. Ele deve baixar / clonar o repositório público Github localmente.
  2. Deve remover todo o histórico do git (e branches)
  3. Use a API Github para criar um novo repositório Github inicializado com o conteúdo do repositório github de entrada que você baixou localmente. O novo repositório deve ser nomeado usando o nome fornecido. Consigo executar as etapas 1 e 3, mas solicito o login 2 vezes . Não consigo inicializar o novo repo remoto com o repo local. local_repo = repo1 como? E removendo o histórico do git? onde posso encontrar o histórico do git no repositório clonado.
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!!")

Respostas

2 Reinderien Oct 28 2020 at 05:02

Campos de permissão octal

77

provavelmente está incorreto. O que você escreveu é 77 ​​em decimal , mas isso funcionaria 115em octal. Se você quisesse 077em octal, na verdade precisaria escrever 0o077.

Pathlib

Considere substituir os.pathcom o uso de pathlib.

Análise de argumento

A argvanálise que você fez é frágil - ela falhará com uma exceção de índice inválido se o usuário fornecer parâmetros insuficientes. Considere usar em seu argparselugar.

Além disso: não peça uma senha na linha de comando, pois ela será armazenada no histórico do shell do usuário. Aceite-o de uma variável ambiental, uma carteira segura ou do stdin via getpass(not input).

Interpolação de string

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

é mais facilmente escrito como

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

Comente o seu código

Esta é uma dica mais geral, mas é uma prática muito boa colocar comentários em seu código para torná-lo mais legível e compreensível