我有两个git仓库,它们是相互fork的,我需要偶尔从一个导入提交到另一个。例如:
git-repo1
具有以下目录结构:repo1/project1/src
和repo1/project2/src
,而git-repo2
具有以下目录结构:repo2/src/
。我想要的是获取一系列提交,并仅为更改特定子目录(例如repo1/project1/src
)中的文件的提交生成补丁,并忽略仅更改其他任何位置的文件的所有提交。或者,为所有提交生成补丁,但仅在补丁更改特定目录中的文件时应用补丁。我需要保留有关提交的元数据,因此使用git diff
不可行。这两个forked git仓库之间的目录结构不同。有没有简单的方法来做到这一点?更新1:我看到了如何处理不同目录结构的git补丁?这个问题。但如果补丁涉及修改不存在的文件怎么办?我希望忽略这样的更改。
mystuff.sed
魔法,以便在补丁提交消息中添加类似于“从哈希导入”的内容?也许需要在git am
和git format-patch
中都添加-k
,以包括可能的[blah]在提交消息中。如果文件从repo1/project2/src
移动到repo1/project1/src
,添加--no-renames
似乎可以使git am
正常工作。 - vvassilev检测头部结束并插入行“llvm-monorepo: HASH”从“From HASH”
/^---$/{ x s/(From )([0-9a-f]{40})(.*)/\1\2\3\n\nllvm-monorepo: \2/ x } H;$!d } x输出头部中的“From”行
/^From /b如果补丁在 '[ab]/lvm/' 中 - 输出它
,^diff[^\n]* [ab]/llvm/,!{$!d;x;b}其他块将被跳过```
修复了提交日志中粘贴 diff 的情况。 - vvassilev