git merge时,如果两个版本有冲突,冲突文件中会有:
<<<<<<< HEAD
....
=======
....
>>>>>>> branch_name
如果冲突文件很多,一个一个手动修改很麻烦,写了一个Python脚本,自动批处理。
import re
import io
FileList = open("status.txt", "r")
Files = FileList.readlines()
#clear file content
def clear_file(filename):
with io.open(filename, 'r+', encoding='utf-8') as f:
f.seek(0)
f.truncate()
for FileName in Files:
#extract file name without space
FileName = FileName[18:-1]
if FileName:
#read file content
oldFile = open(FileName, "r")
lines = oldFile.readlines()
#clear file content
clear_file(FileName)
oldFile.close()
#open file again
newFile = open(FileName, "w")
#main task
bInHead = False
for line in lines:
if re.search("<<<<<<<", line, re.IGNORECASE) != None:
bInHead = True
continue
elif re.search("=======", line, re.IGNORECASE) != None:
bInHead = False
continue
elif re.search(">>>>>>>", line, re.IGNORECASE) != None:
continue
elif bInHead:
continue
else:
newFile.write(line)
#close file
newFile.close()
status.txt中存放的是git status的结果,格式类似于:
both modified: project\file\path
.....
这个脚本只会处理both modified的情况,其他如deleted by us、deleted by them、added by us、added by them等情况需要先处理掉。应该是可以统一用脚本一起处理掉的,后面再完善。