我有两个不同的本地git repos,我们会调用a
和b
。它们都位于我的主目录中的projects
文件夹中。我希望在两个repos中的特定文件之间进行差异化,让我们将其称为foo
,并将该差异应用于a
。
如果我从git diff ./foo ../b/foo > diff.diff
内部运行a
,我可以查看差异并确认它包含我想要应用的更改,但是当我运行git apply diff.diff
时,我收到此错误:
fatal: invalid path './foo'
如果我尝试运行git diff ~/projects/a/foo ~/projects/b/foo > diff.diff
,那么当我尝试应用差异时,我会收到此错误:
error: home/ryan/projects/a/foo: No such file or directory
现在,我可以复制文件以获得与应用差异相同的效果,但这是否有充分理由说明它不起作用?
答案 0 :(得分:1)
要比较回购foo
和回购a
之间的b
文件并将更改应用于回购a
,您只需使用以下命令:
# In ~/projects/a (local repo a)
git remote add repob ~/projects/b -f
git diff master repob/master -- foo > diff.patch
git apply diff.patch
现在,repo foo
中的a
更改为回购b
的版本。然后你可以提交并推送:
git add foo
git commit -m 'change foo as the version in repo b'
git push
答案 1 :(得分:0)
首先,git diff
并没有在这里购买任何东西 - 您也可以使用普通diff -u
。修补程序不适用的原因是因为git-apply
被diff中不一致的文件路径混淆了。要解决此问题,您需要设置工作目录,以便diff对于文件的两个版本都具有相同深度的相对路径。在这里,我将目录更改为两个项目目录的公共父目录:
cd ~/projects
diff -u a/foo b/foo >a/diff.patch
cd a
patch -p1 <diff.patch
git add ... commit ... etc ...