2017-07-11 11 views
-1

いくつかのターゲット(Windows)コンピュータにファイルをデプロイするために、必要なパラメータを使用してフィードできるPythonモジュールを作成したかったのです。 モジュールは、指定されたrepoが出力パスに存在するかどうかを確認する必要があります。GitPython:リモートからプル/チェックアウトしてローカルの変更を破棄します

A)が存在しない場合:最新の

リモートBからコミットクローン)が存在する場合:その時(最新のリモート

から道をコミット引く、すべてのローカルの変更を破棄少なくともこれは私のために働いた)は、ローカルのターゲットフォルダを削除し、それを再作成し、すべてを再びクローンすることです。

だけ空のディレクトリのために働くことを

私のコード、:すべてのローカル変更をレポが存在し、あなたが破棄する場合

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 ----") 

答えて

0

これは私の問題を解決したコードです。

)出力ディレクトリには.gitフォルダが含まれています。これはローカルのリポジトリです。すべてのローカルの変更を元に戻し、バージョン管理されていないファイルをパージします。

b。)出力ディレクトリに.gitフォルダが含まれていません(またはファイルツリーが存在しません):ターゲットディレクトリがダーティであるかローカルリポジトリではないと仮定します。ターゲットツリーを削除し、リモートディレクトリを指定されたターゲットにクローンします。

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

、および最新のリモートからコミットプル次のコマンドを使用できます。

# 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() 

Withこれらのコマンドを使用すると、repoを削除して再度クローンする必要はありません。

詳細については、ドキュメントhereをご確認ください。

+0

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

関連する問題