【发布时间】:2013-09-20 23:20:00
【问题描述】:
对于我正在进行的项目,我们决定开发一个工具来帮助开发,所以这不应该在生产中。
所以我想知道,由于 git 太棒了,是否有一个功能可以防止某些 文件 (是的,只有文件:这是一个 Magento 项目,我们将要开发的工具将在他自己的模块,与应用程序的其余部分没有交集)要合并到 master 中,但应该在其他分支中可用。
如果有帮助,我们正在考虑使用 git-flow。所以我们会有master,我们将从它创建develop,从中创建我们所有的功能分支。我们的想法是让这个模块处于开发状态,但永远不会合并回主模块。
我现在在想,像只在 master 分支中忽略那些文件(.gitignore)这样行吗?
编辑 1:项目结构
我觉得我必须提供有关项目结构的更多信息,这里是:
+ main_folder/
+ magento/
|---+ app/
| |--+ code/
| | |--+ community/
| | |--+ core/
| | |--+ local/
| | |--+ Namespace1/
| | |--+ Module1/
| | |--+ Module2/
| | |--+ Namespace2/
| | |--+ Module1/
| | |--+ Module2/
| |--+ design/
| | |--+ frontend/
| | |--+ default/
| | |--+ default/
| | |--+ layout/
| | |--+ template/
| + js/
| + lib/
+ ezpublish/
开发工具模块必须包含在不同位置的主项目(仅magento部分)中,即app/code/local/Namespace1/Module3/、app/design/frontend /layout/dev.xml、app/design/frontend/template/dev/tool.phtml 和 js/dev/
编辑 2:子模块选项
探索@VonC 的answer,这是我所做的:
- 在分支主控中:
- git submodule add git@github.com:path/to/submodule.git devtool
- cd 开发工具
- git checkout 123abc #submodule 的初始提交
- cd ..
- git 添加开发工具
- git commit -m "在初始提交时添加子模块"
- 在分支开发中:
- cd 开发工具
- git checkout abc213 #submodule's last commit
- cd ..
- git 添加开发工具
- git commit -m "子模块最后一次提交"
- 回到主分支:
- 触摸 .gitattributes
- 在 .gitattributes 我把这个:
devtool merge=ours - git add .gitattributes
- git commit -m ".gitattributes 指令"
但是 master 中的子模块具有最后一次提交的内容,如果我签出 master 中的初始提交并签出回开发,初始提交仍然存在(当我想要开发中的最后一次提交时)。
所以我显然做错了什么,但是什么?
【问题讨论】:
-
这是一个想法,因为我不知道而且我认为它不存在任何 git 构造来防止文件存在于分支上,除了 .gitignore。问题是您将始终在分支中拥有该代码。此外,如果您的代码依赖于 master 分支中的代码,您将不得不不断地 rebase 或将 master 合并到您的工具分支中,但如果这不是问题,那就去吧。
-
@bitoiu 代码将不依赖于 master,所以这不会是一个问题。但我找不到任何关于每个分支有不同的
.gitignore的信息。当我尝试时,当我将分支合并到 master 时,master 的.gitignore也包括分支。有任何相关信息吗? -
@OSdave,这是关于每个分支有不同的 .gitignore:这里有很好的解释 stackoverflow.com/questions/1836742/…(请查看“excludesfile”部分)
-
你试过我的答案了吗?
-
@Meabed 还没有,刚打开电脑,今天晚些时候再做,我会及时通知你
标签: git magento merge git-merge git-flow