快速git pull更新所有项目文件
程序员文章站
2022-03-10 16:09:40
...
需求分析
故事的开始是这样的,有位搬砖工,名字叫小徐,他所在的公司用的是VMware Horizon 7虚拟桌面环境,软件开发根本连不上外部网络,这让他非常苦恼。
突然有一天,公司内部大变革,要开始使用maven私服,要开始使用内部PaaS,这让小徐心里乐开了花。“可是新知识太多,这该如何学习呢?”小徐泛起了嘀咕。
功夫不负有心人,在小徐的日夜努力中,在一个号称全球最大的同性交友网站上,找到了很多学习资料。小徐在自己查询外部互联网资料的笔记本上,熟练的git clone各种各样的仓库,很快,满满一个硬盘都是这些仓库的文件夹。
时间过的很快,转眼7个月过去了。
技术变化的很快,转眼,满满硬盘的学习资料都过时了,怎么一下子将他们更新呢?
以上就是小徐向我提出了需求。
设计软件
python是世界上最好的语言!????
设计思路很简单,判断当前目录的所有文件夹中,是否其中包含后缀是.git的文件夹,如果是,则为仓库,进行更新,不是就跳过。
其中需要依赖gitpython这个包,来进行git pull操作。
import git
from git import *
import threading
import os
def isGitDir(dir):
repdir = os.path.join(os.path.abspath('.'), dir)
repgitdir = os.path.join(repdir, '.git')
if not os.path.exists(repgitdir):
return False
return True
def updateSub(subdir):
repdir = os.path.join(os.path.abspath('.'), subdir)
try:
repo = git.Repo(repdir)
if repo.is_dirty():
dirSubDir.append(subdir)
return
remote = repo.remote()
print("start pulling from remote for: %s\r\n" %subdir)
remote.pull()
print("Done pulling for %s\r\n" %subdir)
except NoSuchPathError as e:
pass
except InvalidGitRepositoryError as e:
pass
finally:
pass
currDir = os.path.abspath('.')
subDirs = [x for x in os.listdir('.') if isGitDir(x)]
print("ready to update git repo:")
for dir in subDirs:
print(dir+ '\r\n')
dirSubDir = []
poole = []
for subdir in subDirs:
t = threading.Thread(target=updateSub,args=(subdir,))
t.start()
poole.append(t)
for t in poole:
t.join(30)
print('\r\n')
if len(dirSubDir)!= 0:
print('these repos have uncommitted changes:')
for dirtyDir in dirSubDir:
print('dir %s has uncommited change, please check' % dirtyDir)
测试投产
打开电脑,在cmd中运行pip install gitpython或者conda install gitpython,来安装必要的包。
将上述文件保存到仓库的目录,并且命名为update.py,右键使用VS Code运行,即可发现目录中所有仓库都成功git pull 了,大成功!
上一篇: 十六、Shellcode指令优化
下一篇: 旋转数组-python