为了将文件部署到某些目标(Windows)计算机,我想创建一个可以使用必要参数提供的Python模块。 然后,模块应检查输出路径中是否存在指定的repo。
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 :(得分:0)
如果存在repo且您想放弃所有本地更改,并且从远程提取最新提交,则可以使用以下命令:
# 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()
使用这些命令,您不必删除存储库并再次克隆。
您可以查看文档here以获取更多信息。
答案 1 :(得分:0)
这是代码,解决了我的问题。
a。)输出目录包含一个.git文件夹:假设这是一个本地仓库。还原所有本地更改,清除未版本控制的文件
b。)输出目录不包含.git文件夹(或filetree不存在):假设目标目录是脏的或不是本地存储库。删除目标树并将远程目录克隆到指定目标。
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')
答案 2 :(得分:0)
对于那些更喜欢正确使用 gitpython 而不是命令行界面的编码版本的人:
# Create a new branch
new_branch = repo.create_head("new_branch")
# Point your head to the new branch. Note that no working tree changes have taken place yet
repo.head.reference=new_branch
# Perform a reset. Note that index and working_tree must be set to True
# to ensure that the staging area and working tree are overwritten
repo.head.reset(index=True, working_tree=True)