Python Github kullanarak yerel depoyu uzak depoya gönderme

Oct 28 2020

Kod sırayla şunları yapmalıdır:

  1. Halka açık Github deposunu yerel olarak indirmeli / klonlamalıdır.
  2. Tüm git geçmişini (ve dalları) kaldırmalıdır
  3. Yerel olarak indirdiğiniz giriş github havuz içeriği ile başlatılan yeni bir Github deposu oluşturmak için Github API'sini kullanın. Yeni depo, sağlanan ad kullanılarak adlandırılmalıdır. Adım 1 ve 3'ü yapabiliyorum ama 2 kez giriş yapmamı istiyor . Yeni uzak depoyu yerel depo ile başlatamıyorum. local_repo = repo1 nasıl? Ve git geçmişini kaldırmak? klonlanmış depoda git geçmişini nerede bulabilirim.
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!!")

Yanıtlar

2 Reinderien Oct 28 2020 at 05:02

Sekizli izin alanları

77

muhtemelen yanlıştır. Yazdığınız 77 ondalık sayıdır , ancak bu 115sekizlik olarak işe yarar. Eğer isteseydi 077sekizlik, gerçekte yazma gerekir 0o077.

Pathlib

os.pathKullanımıyla değiştirmeyi düşünün pathlib.

Bağımsız değişken çözümleme

argvYaptığın o ayrıştırma kırılgandır - Kullanıcı yetersiz parametreleri sağlıyorsa onu geçersiz endeksi hariç başarısız olur. argparseBunun yerine kullanmayı düşünün .

Ayrıca: do not o kullanıcının kabuk geçmişinde saklanır beri bir komut satırının parçası olarak bir şifre isteyecek. Çevresel bir değişkenden, güvenli bir cüzdandan veya stdin'den getpass(değil input) yoluyla kabul edin .

Dize enterpolasyonu

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

olarak daha kolay yazılır

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

Kodunuzu yorumlayın

Bu daha genel bir ipucudur, ancak kodunuzu daha okunaklı ve anlaşılır hale getirmek için kodunuza yorum eklemek çok iyi bir uygulamadır.