适合组合操作系统和专用代码的Git工作流?
我有一个基于开源框架的封闭源代码项目。我想知道我应该如何组织我的工作流程。下面是我使用git和子模块的最佳猜测适合组合操作系统和专用代码的Git工作流?,git,workflow,project,Git,Workflow,Project,我有一个基于开源框架的封闭源代码项目。我想知道我应该如何组织我的工作流程。下面是我使用git和子模块的最佳猜测 我创建了一个公共回购框架 github的子模块是 单独的吉特回购 我买了一个 github上的“微”账户(7美元),所以我 可以进行私人回购 我创建了一个私有回购协议并克隆了公共框架回购协议 从这里,我可以对以下内容进行更改: 我的私有代码并推送到github上的私有回购 公共框架代码并推送到我的私有github repo,然后从公共框架发送拉取请求。。?或者这将如何工作 如何处理包含
/private_folder
/public
/public_folder
/public_folder2
/private_folder
/repos/gatekeeper/myproject-os
/repos/myproject-os
/repos/myproject-priv
也许我要求在一个联合回购目录中处理它们。也许没有简单的方法可以做到这一点,我应该把它们分开,把所有的公共补丁放在一个补丁里,然后把它们放到我的私人回购协议中。当然,这意味着,如果我正在处理一些私有代码——我将不得不离开该回购并打开公开的代码并使补丁代码更改,然后返回私有代码,合并,然后继续处理私有代码。 您可以在本地存储库中有一个“公共”和“私有”分支。推送时,每个分支都会被推送到一个单独的远程存储库(请查找“gitpush”语法)。然后,您可以自由地从公共合并到私有
我相信也有一种方法可以将选定的更改从私有合并到公共,尽管我必须查找它。将公共回购作为私有回购中的子模块。推的时候,记住你必须同时推两个。还记得在私有repo中检入子模块本身,以便它跟踪正在使用的子模块的修订。
git submodules
允许您定义一个配置(请参阅),即引用另一个组件(在另一个repo中)的一个提交
您可以在同一个repo中开发这两个代码(您的和子模块),但当您谈论公共代码中的多个私有目录时,需要一个。它将允许您将目录(私有和公共目录)视为一个自然工作树。
为了更好地管理全球回购部分向私人回购的推拉,我建议采用。总结一下,我建议采用以下工作流程:
- 当你构建(或提取)一个框架时,吃自己的狗粮是有帮助的。您是否希望您的框架用户在使用您的框架时也设置git子模块?我猜不是
- 有可能会意外地将私有源代码发布到开源框架中
- Git子模块在过去一年左右的时间里有了很大的改进,但它们仍然没有得到很好的理解。即使是有能力的Gitter也可能与子模块发生冲突李>
- 使用子模块并将两个项目都放在一棵树中有一定的吸引力。这可能会加快您的文本编辑速度,但在提交和推送时可能会减慢您的速度(或导致比平时更多的错误)
- 将项目分开有一定的吸引力。上下文切换(从一个文本编辑器窗口切换到另一个)可能有助于提醒您OSS项目是供公众使用的。例如,它可能有助于约束您不要破坏向后兼容性,并保持良好的变更日志。相对于子模块备选方案,提交和推送将很容易
一旦你决定了你的工作副本,你就会想弄清楚你的日常工作流程。当然,这取决于你的语言。(例如,在Ruby中,您可以将OSS框架打包为一个gem,构建它,然后让您的私有代码依赖它。)无论您选择什么,都可以设置一些脚本(或者编辑器快捷方式),以帮助您快速构建库(或包),甚至在文件更改时自动构建,因此,您可以轻松地在框架和项目之间切换。我建议不要使用git子模块,而是使用两个不同的存储库,它们没有连接到github上 您可以使用签出副本上的符号链接来建立它们之间的关系,这是基本而简单的。每个位置(生产、开发、同事)只需创建一次符号链接 这样做的好处是,没有人需要付出额外的努力来学习和维护git子模块,您可以避免风险
ln -s /repos/myproject-os/dir1 /wrk/myproject/base/dir1
ln -s /repos/myproject-os/dir2 /wrk/myproject/base/dir2
ln -s /repos/myproject-priv/dir1 /wrk/myproject/base/dir3
ln -s /repos/myproject-priv/dir2 /wrk/myproject/base/someother/dir4
mkdir /wrk/myproject/base/config
mkdir /wrk/myproject/base/tmp
/repos/gatekeeper/myproject-os
/repos/myproject-os
/repos/myproject-priv