我有这个代码:
import os
import threading
def push_repository():
try:
os.system('git add *')
os.system('git commit -m "Automated commit"')
os.system('git push')
except Exception as e:
print(e)
def commit_and_push_git_folders(path):
for root, dirs, files in os.walk(path):
for dir in dirs:
if dir == '.git':
print(os.path.join(root, dir))
os.chdir(os.path.join(root, dir, '..'))
t = threading.Thread(target=push_repository)
t.start()
commit_and_push_git_folders('.')
一切正常,除了它只进入给定路径的第一个文件夹而不是停止工作。
如果我在
os.system
函数中删除 push_repository
的命令并将其更改为 print(os.path.join(root, dir))
一切正常,并且它进入每个目录。
我已经尝试使用线程,不使用线程,使用子进程并且在推送第一个存储库时它仍然关闭
当前输出是这样的:
.\ANN-visualizer\.git
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
Everything up-to-date
但是我还有几个文件夹需要推送.git文件夹。
正如我上面提到的,我怀疑“当前目录”是一个全局变量而不是每个线程。
你可以试试:
def push_repository(directory):
try:
os.system(f'git -C {directory} add *')
os.system(f'git -C {directory} commit -m "Automated commit"')
os.system(f'git -C {directory} push')
except Exception as e:
print(e)
def commit_and_push_git_folders(path):
for root, dirs, files in os.walk(path):
for dir in dirs:
if dir == '.git':
print(os.path.join(root, dir))
directory = os.path.join(root, dir, '..'))
t = threading.Thread(target=push_repository, args=(directory,))
t.start()