项目的部分变革

时间:2012-10-02 16:29:42

标签: git rebase

我在一个庞大的项目上工作,实际上只需要它的某些目录。所以我的项目看起来像:

project
 |- a/
 |- b/
 \- foo

但是,该项目的上游看起来像:

project
 |- a/
 |- b/
 |- c/
 |- foo
 \- bar

所以我有我的.gitignore:

c/
bar

然而,我现在正试图将上游重新加入到master中,我希望能够告诉git应该自动跳过应用于bar,c / *或.gitignore中的任何内容的补丁/帅哥。但是,应该注意的是,在foo和bar中改变帅气的单个补丁只会在foo中应用并在bar中被忽略(不要忽略整个补丁)。

有办法做到这一点吗?

2 个答案:

答案 0 :(得分:1)

Git操作“提交对象”,而不是文件/目录。每个提交对象都有一个唯一的提交ID,它是其先前提交ID的hash以及该提交的更改。

这意味着忽略某些文件/目录会创建一个不同的提交ID - 所以它基本上等同于重新定义所有上游更改,然后创建一个新的提交,删除所有你不喜欢的文件。

您可以在本地使用某些脚本执行此操作,但是如果这样做,本地存储库中的每个提交都将与服务器上的版本不同,因此每次提取新的上游更改时都必须合并/推动上游的事情。

也许您可以说服上游项目的维护人员将其拆分为更小的子模块?

答案 1 :(得分:0)

抱歉,我想你必须自己过滤一下。这没有git命令。

通过git format-patch导出,再试一次difffiltergit am来试试运气。