import os
import datetime
import shutil
def get_dir_and_file(src_file_path, work_dir, desc_dir):
"""获取需要拷贝的文件的源路径和目标路径"""
if '/' in src_file_path:
file_path = src_file_path.split('/')
src_file_path = work_dir + '/' + '/'.join(file_path)
desc_dir_path = desc_dir + '/' + '/'.join(file_path[:-1])
desc_file_path = desc_dir + '/' + '/'.join(file_path)
else:
source_file_path = src_file_path
src_file_path = work_dir + '/' + source_file_path
desc_dir_path = desc_dir
desc_file_path = desc_dir + '/' + source_file_path
return src_file_path, desc_dir_path, desc_file_path
def get_work_dir(work_dir, desc_dir):
"""获取目标目录的名称"""
now = datetime.datetime.now()
now = [str(now.month), str(now.day), str(now.hour), str(now.minute), str(now.second)]
now = "_".join(now)
desc_dir = desc_dir + '_' + now
return work_dir, desc_dir
def get_src_file_list(work_dir, commit_lvl):
"""获取需要拷贝的文件的路径"""
os.chdir(work_dir)
update_files = os.popen("git diff --name-only HEAD~" + str(commit_lvl)).read()
update_files = update_files.split('\n')
update_files.pop()
os.chdir('..')
return update_files
def start(work_dir, desc_dir, commit_lvl):
work_dir, desc_dir = get_work_dir(work_dir, desc_dir)
update_files = get_src_file_list(work_dir, commit_lvl)
os.mkdir(desc_dir)
for src_file_path in update_files:
src_file_path, desc_dir_path, desc_file_path = get_dir_and_file(src_file_path, work_dir, desc_dir)
if desc_dir_path and not os.path.exists(desc_dir_path):
os.makedirs(desc_dir_path)
shutil.copy(src_file_path, desc_file_path)
if __name__ == '__main__':
work_dir = "git_test_2" # git 目录
desc_dir = 'update_files' # 目标目录
commit_lvl = 1 # 工作区文件与 n 次提交之前的的文件比对, commit_lvl 为 n 的值
start(work_dir, desc_dir, commit_lvl)
git-获取与n次提交前比对有变化的文件并导出
最新推荐文章于 2024-05-15 09:02:53 发布