本意是想写一个可以通过python能自动同步项目,采用Repo方式,
但后来遇到,当git分支需要进行切换时:
repo = Repo(download_path)
repo.remote().pull()
不同分支下,进行pull是没有意义的,思来想去最后决定,采用Repo三方工具的同时,利用git 本身的命令行模式进行切分支和代码更新实现起来更简单,也很通用,最终实现如下:
try
:
import
sys
import
os
from git.repo
import
Repo
except ImportError:
import
os
os.system(
'pip3 install repo --quiet'
)
os.system(
'pip3 install gitpython --quiet'
)
os.system(
'pip3 install python-gitlab --quiet'
)
class
GitUtils:
# pip install gitpython
def clone_or_pull_project():
# 创建本地路径用来存放远程仓库下载的代码
download_path = os.path.join(
'{path}'
)
gitBranch =
'{branch}'
print(download_path)
print(os.path.exists(download_path))
if
not os.path.exists(download_path):
Repo.clone_from(
'http://{tokenName}:{gitToken}@{gitlaProjectUrl}.git'
, to_path=download_path, branch=gitBranch)
else
:
cmd =
'cd '
+ download_path +
' && '
+
'git fetch --all'
+
' && '
+
'git checkout '
+ gitBranch +
' && git pull'
os.system(cmd)
print(
'execd: '
, cmd)
tokenName、gitToken可以登录 项目git地址 Preferences → Access Tokens 进行设置
其中:Expiration date,默认一个月,按照实际需要进行配置,也可以清理永不失效
ps:后续计划将Repo的方式也全部切换为shell git命令,上下进行统一