我有一个项目的不同版本的 zip,例如:
- project_v1.zip
- project_v2.zip
- project_v3.zip
- project_v4.zip
其中没有任何.svn
内容,但我们知道 v2 是从 v1 开发的,v3 是从 v2 开发的,v4 是从 v3 开发的
我正在使用python
并svn command-line
解压缩每个文件并使用其内容创建一个标签,但我不确定如何重新创建一个主干,在其历史记录中您可以看到代码如何从 v1 更改为 v4 到 v2 和 v3。
我需要以编程方式执行此操作,因为我们在多个项目中存在相同的问题,而且我们没有时间手动合并或处理冲突,因此脚本必须无人看管。
我正在尝试这个:
import os
import subprocess
from shutil import copyfile
import filecmp
def run(cmd):
try:
r = subprocess.check_output(cmd)
except:
print ("\n\n")
print (" ".join(cmd))
raise
return r.decode('cp1252').strip()
def update_svn(zip_content, work_copy, comment):
for root, dirs, files in os.walk(work_copy, topdown=True):
dirs[:] = [d for d in dirs if d !=".svn"]
borrados = set()
for name in files:
filename = os.path.join(root, name)
filename = os.path.relpath(filename, work_copy)
new_file = zip_content+"\\"+filename
if not os.path.exists(new_file):
run(["svn", "delete", work_copy+"\\"+filename, "-m", comment])
for name in dirs:
dirname = os.path.join(root, name)
dirname = os.path.relpath(dirname, work_copy)
new_dir = zip_content+"\\"+dirname
if not os.path.exists(new_dir):
run(["svn", "delete", work_copy+"\\"+dirname, "-m", comment])
borrados.add(name)
dirs[:] = [d for d in dirs if d in borrados]
for root, dirs, files in os.walk(zip_content, topdown=True):
dirs[:] = [d for d in dirs if d !=".svn"]
for name in files:
filename = os.path.join(root, name)
old_file = work_copy+"\\"+os.path.relpath(filename, zip_content)
if not os.path.exists(old_file) or not filecmp.cmp(filename, old_file):
copyfile(filename, old_file)
run(["svn", "-q", "add", destino])
for name in dirs:
dirname = os.path.join(root, name)
dirname = os.path.relpath(dirname, zip_content)
old_dir = work_copy+"\\"+dirname
if not os.path.exists(old_dir):
run(["svn", "mkdir", old_dir])
run(["svn", "commit", work_copy, "-m", comment])
但是当我在 svn 树干中与最后一个标签进行比较时,我发现它们有一些差异