git - git 分支共享一组通用文件
问题描述
我正在使用git对软件项目进行版本控制,该软件项目包含一个很大的公共部分以及一些根据特定目标机器而更改的文件:
+project-folder
|-cnc_sources
| |-...(lot of common files)
| |-specialized.cnc
|-plc_sources
| |-...(lot of common files)
| |-specialized.plclib
|-config
| |-specialized.param
因为我支持三种不同类型的机器,所以我目前的解决方案是一个包含三个不同分支的单一仓库,每台机器一个,共享一个很大的公共部分,除了几个专门的文件。
我在本地克隆每台机器/分支的 repo(这对于测试和部署软件非常方便),但是这个解决方案不能很好地扩展,因为我必须手动保持同步所有分支的公共部分复制最后一个所有其他工作文件夹中的文件版本并在那里提交。
我想知道这项手工工作是否可以避免。我也觉得有些地方不对劲:公共文件在分支之间有不同的历史记录和变更集,有时我会感到困惑。
供应商 IDE 需要源树中某个位置的文件,因此我无法将公共部分收集在单独的文件夹中(例如创建子存储库)。
我的需要是让 N 个分支共享一组分散在源树中的公共文件(无法收集它们),但由于我是一个git新手,我不知道我的用例的最佳实践,所以我想知道有经验的用户会在我的鞋子里做什么。
解决方案
我认为您没有正确执行此操作。如果我是你,我会有一个main
分支(或者common
,也许),你有共享的项目文件....或者在项目的根目录下,或者在一个名为common
或类似的目录中。config
如果它是共享的东西,也是dir 。这是您继续处理公共资源的分支。
然后,从这个分支开始为每台机器进行自定义开发......所以,比如说......cnc
分支是从common
分支开始的。你在那里添加specialized.cnc
并提交。你回去common
,专用文件不见了。你从这里开始plc
分支。在这里添加specialized.plclib
。添加并提交。现在,如果你切换到cnc
你得到cnc的文件,你回到plp
,你得到plc的文件。生活是美好的...现在您可以在单独的分支上工作并挑选樱桃...当您在公共分支上工作时,您可以合并到特定于机器的分支中。
工作流程
现在,如果您认为您无法继续工作,common
因为该项目需要其他分支的细节才能构建/测试,那么它就变成了工作流的问题。
假设您正在打开cnc
并更改几个常用文件和文件中的更改cnc-proper
。你如何移动这些变化?嗯,一个简单的方法是这样的:
git add the-specific-file-for-cnc
git commit -m "cnc: blah blah"
# at this point all the changes you have pending are for common files
# then you should be able to checkout common and commit there
git checkout common
git add the-common-files
git commit -m "common: blahblah"
好的,所以你在不同的分支中提交。您如何将所做的更改common
返回到cnc
您需要它们的地方?很简单:
git checkout cnc
git merge common -m "cnc: merging changes from common"
同样的事情plc
git checkout plc
git merge common -m "plc: merging changes from common"
这绝不是处理它的唯一方法,但至少这应该让您了解您可能实施的各种技巧。
推荐阅读
- amazon-web-services - 存储库“https://dl.bintray.com/sbt/debian InRelease”未在 aws 中登录
- python - 当我将物理学应用于两者时,为什么只有一个矩形起作用
- r - 对于命名向量和矩阵, [[ 是否曾经使用部分匹配而不传递exact=FALSE 参数?
- c# - 数据库操作预计会影响 1 行,但实际上会影响 0 行。自加载实体以来,数据可能已被修改或删除
- python - 我正在努力尝试将会计年度月份列转换为 Python/Pandas 中的日期时间
- angular - Angular & NgRx-Data 更新 & 订阅问题
- ubuntu - 端口 8089 上的 InfluxDB 连接被拒绝
- snowflake-cloud-data-platform - 服务器未能验证请求。(状态代码:401;错误代码:NoAuthenticationInformation)]
- python - 来自激活、损失函数和度量的字符串标识符和实际类名称的不同结果
- javascript - 基于 CSS 类的条件样式(Loop / Foreach)