2017-07-11 2 views
-1

Pour le déploiement de fichiers sur certains ordinateurs cibles (Windows), j'ai voulu créer un module Python que je peux alimenter avec les paramètres nécessaires. Le module doit alors vérifier si le référentiel spécifié existe dans le chemin de sortie.GitPython: extraction/extraction à distance, suppression des modifications locales

a) Si elle n'existe pas: cloner la dernière commettras de distance

b) Si elle existe: annuler toutes les modifications locales, tirer la dernière commettras de la

à distance Une façon (que, à cela fonctionnerait pour moi) serait de supprimer le dossier cible local, le recréer et tout cloner à nouveau.

Mon code, qui ne fonctionne que pour un vide dir:

stderr: 'fatal: remote origin already exists.'

import git, os, shutil 
#outputfolder there? 
if not os.path.exists(MY_outputfolder): 
    os.makedirs(MY_outputfolder) 
repowrk = git.Repo.init(MY_outputfolder) 
wrkr = repowrk.create_remote('origin',MY_REMOTE_URL) 
wrkr.fetch() 
wrkr.pull(wrkr.refs[0].remote_head) 
print("---- DONE ----") 

Répondre

0

Ceci est le code qui a résolu mon problème. A.) Le répertoire de sortie contient un dossier .git: Supposons qu'il s'agit d'un dépôt local. B) Le répertoire de sortie ne contient pas de dossier .git (ou le fichier n'existe pas): Supposons que le répertoire cible soit sale ou ne soit pas un référentiel local. Supprimez l'arborescence cible et clonez le répertoire distant sur la cible spécifiée.

outdir_checker = outdir+'\.git' 

if os.path.exists(outdir_checker): 
    repo_worker = git.Repo.init(outdir) 
    repo_worker.git.fetch(remote_url) 
    repo_worker.git.reset('--hard') 
    repo_worker.git.clean('-fdx') 
    print('git dir not created; already existed') 
if not os.path.exists(outdir_checker): 
    shutil.rmtree(outdir, ignore_errors=True) 
    os.makedirs(outdir) 
    git.Repo.clone_from(remote_url, outdir) 
    print('git dir created') 
0

Si le existe repo et que vous voulez annuler toutes les modifications locales et tirer le dernier commettras de distance , vous pouvez utiliser les commandes suivantes:

# discard any current changes 
repo.git.reset('--hard') 

# if you need to reset to a specific branch:  
repo.git.reset('--hard','origin/master') 

# pull in the changes from from the remote 
repo.remotes.origin.pull() 

Avec ces commandes vous n'avez pas à supprimer le repo et cloner à nouveau.

Vous pouvez consulter le document here pour plus d'informations.

+0

'repo.remotes.origin.pull()' == 'git tirez l'origine master'? –