如何告诉git在子树合并期间忽略某些文件夹和文件?

时间:2012-07-31 13:49:42

标签: git git-merge git-subtree

我有一个具有以下目录结构的主分支

templates/something.lib
templates/libs/1.lib

我还有一个templates_master分支,其中包含以下文件(位于根目录中)

a.html
b.html

然后我去掌握并将模板加载到主模板文件夹

git read-tree --prefix=templates/ -u templates_master

现在导致这个主结构

templates/something.lib
templates/libs/1.lib
templates/a.html
templates/b.html

然后我继续掌握并在模板中引入一些更改/ a.html进行多次提交。现在我希望这个修改过的templates / a.html重新回到原来的分支。我切换到templates_master分支并运行此命令

git merge -s subtree master

然而,这个命令不仅将master:templates / a.html复制到templates_master:a.html而且还复制了这些libs文件,所以基本上现在我的templates_master分支拥有原始主模板/拥有的所有东西。是否有可能告诉git仅在主分支中保留某些文件和文件夹,或者这个逻辑在git级别上是硬编码的,即在子目录合并期间它使用树状指向模板/并且模板中的所有内容都是,并且只能是子项of templates /?

1 个答案:

答案 0 :(得分:0)

不幸的是,我很确定这是子树工作流程的要求。它们毕竟被称为"子树"。您不能在子树的任何路径中拥有超级项目文件。

那说,这出现了很多!我想知道是否有人会想到解决方案。

想象一下,如果你可以将2个项目合并到同一个文件夹中?你会如何处理像README这样的常见文件?如果添加新文件,您会期望什么; git怎么知道你将它添加到哪个项目?几乎需要一个类似于perforce中的clientspec映射的新概念来满足这些需求。

现在尝试将子项目保留在 子文件夹