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等情況需要先處理掉。應該是可以統一用腳本一起處理掉的,後面再完善。