根据差分包自动创建git可用的patch

本文介绍了一个Shell脚本,用于创建Git临时仓库并生成补丁文件(patch)。此外,还详细阐述了如何手动应用这些补丁,解决冲突,并完成合并过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

shell文件:

#!/bin/sh
local_path=$(pwd)
echo "$local_path"


if [ -d $local_path/old ]; then
{
    echo "old new"
    src_oldfloder="old"
    src_newfloder="new"
}
else
{
    echo "before after"
    src_oldfloder="before"
    src_newfloder="after"
}
fi


mkdir $local_path/git_tmp
cd $local_path/git_tmp
git --bare init
mkdir $local_path/git_1 -p
cd $local_path/git_1
git clone file://$local_path/git_tmp
cp $local_path/$src_oldfloder/* $local_path/git_1/git_tmp -rf
cd $local_path/git_1/git_tmp
git add . -f
git commit --allow-empty -m "add old"
cp $local_path/$src_newfloder/* $local_path/git_1/git_tmp -rf
git add . -f
git commit --allow-empty -m "new"
git push origin master
git format-patch --root master


cp *.patch $local_path/
cd $local_path/
rm -rf git_1/
rm -rf git_tmp/


############################################


创建出patch之后,利用下面步骤进行合入:



#合入patch及冲突解决:
$git am --abort
$ git am 0001-BUG-Sybase.patch
Applying: CHG: 读取Sybase如果时间为空,设置默认时间的修改
error: patch failed: source.php:38
error: source.php: patch does not apply
Patch failed at 0001.
When you have resolved this problem run "git am --resolved".
If you would prefer to skip this patch, instead run "git am --skip".
To restore the original branch and stop patching run "git am --abort".
刚开始一看有些懵,因为没有任何冲突在哪里的提示,后来找到一种方法,am 操作出问题后先手工 apply:
$ git apply --reject 0001-BUG-Sybase.patch
Checking patch source.php...
error: while searching for:
// 注释
// 以下为几行代码片断
error: patch failed: source.php:38
Applying patch source.php with 1 rejects...
Rejected hunk #1.
这样,就把没有冲突的文件先合并了,剩下有冲突的作了标记。先看输出,error: while searching for: 说明是这段代码有冲突,error: patch failed: source.php:38 指明了产生冲突的代码片断的开始行号,相应的,patch 中应该有这么一段:
diff --git a/source.php b/source.php
index 8770441..4e77b8a 100644
--- a/source.php
+++ b/source.php
@@ -38,27 +38,23 @@ class Site extends Module
// 注释
// 以下为几行代码片断
同时,还会产生一个 source.php.rej 文件,里面也是上面这段因为冲突无法合并的代码片断。
现在,在这段代码中查找冲突原因,并对文件进行修改,source.php.rej 参考完了可以删掉。改好之后,用 git add 把 source.php 添加到缓冲区,同时也要把其他没有冲突合并成功了的文件也加进来,因为在作 apply 操作的时候他们也发生了变化:
$ git add source.php
$ git add 其他 apply 进来的文件们
最后:
$ git am --resolved
Applying: CHG: 读取Sybase如果时间为空,设置默认时间的修改
大功告成。
中间如果处理乱了,用 git reset 恢复即可,所以合并 patch 在一个“干净”的分支上处理更好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值