快速git pull更新所有项目文件

河蟹,本山大王回来了。回想一下,已经大概整整7个月没用更新博客了!!!等我意识到这个问题的时候,居然连markdown都不会写了,罪恶罪恶。今日,重拾我的纸币,继续更新博客,请各位看客给予鼓励。

需求分析

故事的开始是这样的,有位搬砖工,名字叫小徐,他所在的公司用的是VMware Horizon 7虚拟桌面环境,软件开发根本连不上外部网络,这让他非常苦恼。

突然有一天,公司内部大变革,要开始使用maven私服,要开始使用内部PaaS,这让小徐心里乐开了花。“可是新知识太多,这该如何学习呢?”小徐泛起了嘀咕。

功夫不负有心人,在小徐的日夜努力中,在一个号称全球最大的同性交友网站上,找到了很多学习资料。小徐在自己查询外部互联网资料的笔记本上,熟练的git clone各种各样的仓库,很快,满满一个硬盘都是这些仓库的文件夹。

时间过的很快,转眼7个月过去了。

技术变化的很快,转眼,满满硬盘的学习资料都过时了,怎么一下子将他们更新呢?

以上就是小徐向我提出了需求。

设计软件

python是世界上最好的语言!😆

设计思路很简单,判断当前目录的所有文件夹中,是否其中包含后缀是.git的文件夹,如果是,则为仓库,进行更新,不是就跳过。

其中需要依赖gitpython这个包,来进行git pull操作。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
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 了,大成功!

续1s时间

写完这个博客的时候,偷偷看了一下记录博客浏览量的网站,爆炸了!!!这7个月我不在线的日子,这么多人访问我博客啊。很开心,谢谢你那么可爱,还一直关注着我~❤😝

全片结束,觉得我写的不错?想要了解更多精彩新姿势?赶快打开我的👉个人博客 👈吧!

-------------本稿が終わる感谢您的阅读-------------