EMi*_*ler 5 git git-diff git-patch
我有两个git repos,它们是彼此的分叉,我需要偶尔将提交从一个提交到另一个.
例如:
git-repo1
有这个目录结构:
repo1/project1/src
repo1/project2/src
while git-repo2
具有以下目录结构:
repo2/src/
我想要做的是进行一系列提交并仅为改变特定子目录(例如repo1/project1/src
)中的文件的提交生成补丁,并忽略所有仅在其他地方改变文件的提交.
或者,为所有提交生成修补程序,但仅在应用程序修改特定目录中的文件时应用修补程序.
我需要保留有关提交的元数据,因此使用git diff
它似乎不是一个可行的选项.
forked git repos之间的目录结构不同.
有没有直接的方法来做到这一点?
UPDATE1
在处理不同的目录结构方面,我看到了这个问题(如何将git补丁从一个存储库应用到另一个存储库?)
但是,如果修补程序谈到修改根本不存在的文件会怎么样?我想忽略这些变化.
git rev-list --reverse
series
-- repo1/project1/src/ \
| xargs -I@ git format-patch --stdout @^! >mystuff.patch
会将影响该子目录的系列提交吐出mystuff.patch
然后,
cat >mystuff.sed <<\EOD
/^(From [0-9a-f]{40}|diff --git )/!{H;$!d}
x
/^From /b
${h;s,.*--,--,;x}
\,^diff[^\n]* [ab]/repo1/project1/src/,!{$!d;x;b}
${p;x}
EOD
Run Code Online (Sandbox Code Playgroud)
和
sed -Ef mystuff.sed mystuff.patch >justmystuff.patch
Run Code Online (Sandbox Code Playgroud)
将剥离该目录之外的所有帅哥.你可以申请
git am justmystuff.patch
Run Code Online (Sandbox Code Playgroud)
与-p
n
和--directory=new/path/to
如需要的话.
(编辑:EOD - >\EOD所以上面的猫不会试图替换)