在两个不同的git repos中的文件之间获取差异并应用于第一个repo

时间:2017-10-18 22:43:04

标签: linux git version-control git-diff

我有两个不同的本地git repos,我们会调用ab。它们都位于我的主目录中的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

现在,我可以复制文件以获得与应用差异相同的效果,但这是否有充分理由说明它不起作用?

2 个答案:

答案 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 ...