删除git pull冲突文件


删除git pull冲突文件

如zig在某次更新时,出现如下错误:

remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (1/1), 653 bytes | 32.00 KiB/s, done.
From https://hub.fastgit.org/ziglang/zig
   81e2034d4..594271f8d  master     -> origin/master
Updating 81e2034d4..594271f8d
error: Your local changes to the following files would be overwritten by merge:
        CMakeLists.txt
        doc/langref.html.in
        src/AstGen.zig
        src/Sema.zig
        src/Zir.zig
        test/behavior.zig
        test/compile_errors.zig
Please commit your changes or stash them before you merge.
Aborting

编译gitmerge.vsh脚本,完成自动删除冲突文件、重新拉取文件:

#!/usr/bin/env -S v run

import io.util

println('gitmerge v0.0.3 by Zhuo Nengwen at 2021-09-04\n')

// 获取git pull错误内容
mut f, file_name := util.temp_file() ?
f.close()
system('git pull 2>$file_name')

// 检查是否有冲突文件
content := read_lines(file_name) ?
if content.len > 3 {
	mut start := 0
	for content[start] != 'error: Your local changes to the following files would be overwritten by merge:' {
		start++
	}
	mut end := content.len - 1
	for content[end] != 'Please commit your changes or stash them before you merge.' {
		end--
		if end < 0 {
			break
		}
	}
	// 如果冲突太多,最后只有一行Aborting信息
	if end < 0 {
		end = content.len - 1
		for content[end] != 'Aborting' {
			end--
		}
	}

	// 删除所有冲突文件
	for name in content[start + 1..end] {
		new_name := name.trim_space()
		cmd := 'rm $new_name'
		println(cmd)
		system(cmd)
	}

	// 重新拉取
	println('')
	system('git pull')
}

// 删除临时文件
system('rm $file_name')