我在基于WordPress的项目上工作,我想在每个新版本的WP上修补我的项目.为此,我想在两个提交或标签之间生成一个补丁.
例如,在我的回购中,/www/WP我这样做:
$git patch-format com1..com2 --stdout > ~/patchs/mypatch.patch
要么
$git patch-format tag1..tag2 --stdout > ~/patchs/mypatch.patch
/www/WP git natif WordPress
/www/myproject 我的git项目基于WordPress
该git apply命令行是不行的,我想是因为我们是在不同的存储库.
我可以生成一个没有提交的补丁文件,只是一个差异并将其应用到另一个git存储库吗?
谢谢你.
我在窗户上.
由于各种原因,我们有多个不同svn分支的git实例.
很多时候我想修复存储库A中的问题,生成补丁并将其应用到存储库B.除非存在冲突,否则这种方法很好.
重新定位时,我只需右键单击该文件夹并使用tortioseGit并选择解析选项.这带来了一个很好的gui,让我解决我的冲突.
有没有办法用拒绝的补丁块完成这个?
这是我目前创建/应用补丁的方法
git format-patch master --stdout > c:\\patch\\file.patch
git apply --reject --ignore-space-change --ignore-whitespace c:\\patch\\file.patch
Run Code Online (Sandbox Code Playgroud) 我正在尝试将补丁应用于文件git apply.整个补丁失败了,所以我用了git apply --reject.
检查生成的.rej文件显示我出了什么问题,现在我修复了.rej文件中的问题.
但尝试应用该.rej文件失败并显示消息
致命的:第2行没有标题的补丁片段:...
有没有办法.rej在解决问题后重新应用文件?
或者我是否必须修改原始补丁并重新运行git apply?
在这种情况下这会有点麻烦,因为原始补丁包含几十个文件的补丁,我不想进行git checkout应用修改以便重新git apply修复整个补丁文件.
主要是,这个问题是针对Magento 2的git特有的.我有一个有效的Magento 2项目,我使用github repo安装了一个扩展 - https://github.com/Adyen/adyen-magento2.
在我目前的情况下,我必须调试该扩展,并且必须检查我的远程服务器.我已经分配了那个repo,并为例如cc_debug.patch文件创建了一个补丁.现在,我已将该补丁添加到本地服务器上的根目录.然后,如果我使用git apply --apply --directory=vendor/adyen/module-payment/ cc_debug.patch它执行补丁,那就做技巧并修改供应商目录下的文件.我将更改推送到repo,并且由于部署脚本,该文件已移至远程服务器.
现在,我只通过远程服务器进行读取访问,并且没有初始化.git.如果我确实在远程服务器上应用补丁,它肯定会被执行但是如果我下次推送,由于部署脚本供应商将被重新生成并且补丁应用的更改将丢失.据我所知,这里有一些勾引图片,但我对钩子缺乏了解.
我假设我必须在我的git local repo中创建post-deploy hook,如下所示:
#!/bin/sh
patchfile = "cc_debug.patch"
patchingdirectory = "vendor/adyen/module-payment/"
if [ -f "$patchfile" ]
then
git apply --apply --directory=$patchingdirectory $patchfile
fi
Run Code Online (Sandbox Code Playgroud)
现在,我无法将该钩子推送到远程仓库(甚至没有初始化),因此这个解决方案对我不起作用.或者我知道更新后是特定于远程的东西(如果我错了就纠正我)所以我猜测由于这个钩子会在远程服务器上执行更改但是如果我再次在另一台本地机器上克隆,我必须再次创建post-deploy补丁,这不是理想的情况.
每次部署脚本执行时,应用补丁的原因是什么?[注意:部署脚本不在我手中,因为它是由Magento通过github提供的webhooks执行的.所以,我假设必须有一些webhook使用我必须应用补丁,这又是我缺乏知识.]我相信有人和我的情况相同.请指导我.TIA.
这个问题是关于 git apply
有没有办法区分:它失败了,因为......
我工作的目录不是 git 目录,因此我不能使用git log或其他东西。
我知道-R(反向)选项,因此我目前的解决方法是:
git apply abc.patch || git apply abc.patch -R --check && echo already applied
Run Code Online (Sandbox Code Playgroud)
这种方式git apply abc.patch -R --check && git apply abc.patch只会在git apply abc.patch失败时执行,然后检查它是否失败,因为补丁已经应用(git apply abc.patch -R --check),如果是这种情况,它会回应“已经应用”
但我不喜欢它,在 git 的 apply 中不是有类似内置解决方案的东西吗?
我有两个单独的 git 存储库:A 和 B。一些存储库 B 文件已经存在于项目 A 的子文件夹中。我的目标是为存储库 B 创建补丁,然后将它们应用到存储库 A 中的子文件夹以保存存储库 B 的历史记录在合并它们的同时。问题是补丁无法创建新文件。例如:
假设此文件夹结构:/home/user/B/..bunch 目录和 /home/user/A/ext/lib/B/..bunch 目录
cd /home/用户/B
git format-patch "xx..xx" -o /home/user/A/ (创建补丁文件)
cd /home/用户/A
git apply -v --directory=ext/lib/B/ 0001-foo-12345.patch
工作正常,因为补丁没有创建任何新文件或尝试访问 B 中存在但 A 中不存在的文件夹
但
cd /home/用户/A
git apply -v --directory=ext/lib/B/ 0002-foo2-6789.patch
不起作用并抛出此错误:检查补丁 ext/lib/B/xyz/test.c... 错误:ext/lib/B/xyz/test.c:没有这样的文件或目录。
到目前为止,我已经尝试了以下命令:
git apply -v --directory=/home/user/A/lib/B/ --include=bb/cc --exclude=cc/ --exclude=bb/ --include=* 0002-foo2-6789.patch
git apply -v --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch
git am --directory=/home/user/A/lib/B/ --include=* --include=bb/cc --exclude=cc/ --exclude=bb/ 0002-foo2-6789.patch
我通过命令创建了一个差异文件:
git --no-pager diff --no-index --stat pathA pathB >\diff.log
接下来,我执行了一个命令:
git apply --index --ignore-space-change --ignore-whitespace \diff.log
在执行过程中,我遇到了一个错误:
错误:删除 1 个前导路径名组件时,git diff 头缺少文件名信息(第 2138 行)
第 2138 行导致:
第 2136 章
2137 新文件模式 100644
2138 索引 0000000000000000000000000000000000000000..e69de...
第 2139 章
我试过一个命令“git apply --reject ...”但它也没有用。我还添加了忽略 chmod 更改的配置(git config core.fileMode false)并且没有任何更改。
我正在尝试将 .patch 文件应用到我的源代码,但它失败了,因为我的文件索引 (10655) 比补丁索引 (10755) 旧。
现在我知道我可以修改补丁的文件索引,但我想知道是否有任何方法使用 git 使补丁忽略文件索引差异?
我有理由\xc2\xb9 使用 git-format-patch 和选项创建我的 git 提交作为补丁文件--no-prefix。
此选项更改补丁输出,以不在补丁文件的文件路径中添加 git-diff 特定的前缀a// 。b/它允许应用补丁文件等工具,patch而无需作为-p1参数传递。
到目前为止一切都很酷。然而,我似乎无法再用 Git 本身(git-am)来实际应用它们:
\n\n$ git am path/to/0001-patch.patch\nApplying: <commit message subject>\nerror: <path>: does not exist in index\nPatch failed at 0001\n[...]\nRun Code Online (Sandbox Code Playgroud)\n\n我现在如何应用它们git-am,同时保持简单的patch兼容性?
\xc2\xb9 它允许我在 Bazel 中将其用作补丁文件,而无需自定义补丁命令,因为您需要使用patch -p1 [...].
我想知道,使用 git apply 应用 .patch 文件时会写入哪些文件。
有没有办法通过试运行在 git 中应用 .patch 文件?