如何将Git补丁应用于具有不同名称和path的文件?
我有两个存储库。 其中之一是对文件./hello.test
进行更改。 我提交更改并使用git format-patch -1 HEAD
创build一个补丁。 现在,我有第二个存储库,其中包含一个文件,其内容与hello.test相同,但放置在不同的目录下: ./blue/red/hi.test
。 我如何去应用上述补丁到hi.test
文件? 我试过git am --directory='blue/red' < patch_file
但是当然抱怨这些文件的命名不一样(我以为Git不关心它?)。 我知道我可以编辑差异来应用到特定的文件,但我正在寻找一个命令解决scheme。
你可以使用git diff
来创build补丁,然后使用patch
工具来应用它,它允许你指定你想应用diff的文件。
例如:
cd first-repo git diff HEAD^ -- hello.test > ~/patch_file cd ../second-repo patch -p1 blue/red/hi.test ~/patch_file
有一个简单的解决scheme,不涉及手动补丁编辑或外部脚本。
在第一个仓库中(这也可能导出一系列的提交,如果你只想select一个提交,则使用-1
):
git format-patch --relative <committish> --stdout > ~/patch
在第二个存储库中:
git am --directory blue/red/ ~/patch
而不是在git format-patch
中使用--relative
,另一个解决scheme是在git am
使用-p<n>
选项从修补程序的path中剥离n
目录,如类似问题的答案中所述 。
也可以运行没有--stdout
git format-patch --relative <committish>
,它会生成一组.patch
文件。 这些文件,然后可以直接馈送到git am
git am --directory blue/red/ path/to/*.patch
。
用一个脚本来回答我自己的问题: https : //github.com/mprpic/apply-patch-to-file
它不会手动修改补丁文件,而是提示用户input目标文件,修改补丁,并将其应用于当前所在的补丁。