适用于组合操作系统和私有代码的Git工作流程?

Xeo*_*oss 11 git workflow project

我有一个基于我的开源框架的闭源项目.我想知道如何构建我的工作流程.以下是我使用带子模块的git的最佳猜测.

  1. 我在github上创建了一个公共框架repo,子模块是独立的git repos.
  2. 我在github上购买了一个"微型"账户(7美元),所以我可以拥有一个私人仓库.
  3. 我创建了一个私有仓库并克隆了公共框架仓库.

从这里我可以改变:

  1. 我的私人代码并推送到github上的私人仓库
  2. 公共框架代码并推送到我的私有github仓库,然后从公共框架发送拉取请求..?或者这将如何工作?

如何处理包含私有和公共代码和子模块的repo.现在看起来我只需要维护两个单独的代码库来实现这一目标.

我正在寻找最好的答案,可以帮助一些相当新的git简化处理半开源和半私有的代码库的过程.关于它的一个好处是每个文件夹都是私有或公共文件夹,所以不用担心私有文件和公共文件在某处 - 但有些私人文件夹可能在公共文件夹中!

我可以给出的另一个例子是使用zendframework来构建你的私人公司网站,同时仍然可以每天(也许是补丁推送)到zend repo.并且还在zendframework中拉动和推送您的私人网站.

例如,想象一下这样的目录结构:

/private_folder
/public
        /public_folder
        /public_folder2
        /private_folder
Run Code Online (Sandbox Code Playgroud)

也许我要求两个人在一个加入的repo目录中处理它们.也许没有简单的方法可以做到这一点,我应该将它们分开并在一个中完成所有公共补丁然后只需进入我的私人仓库.当然,这意味着如果我正在处理一些私有代码 - 我将不得不离开该repo并开放公共代码并使修补的代码更改,然后返回私有代码,合并,然后继续处理私有代码.

Sve*_*son 5

我建议不要使用git子模块,而是使用2个不在github上连接的不同存储库.

您可以在签出副本上使用符号链接构建它们之间的关系,这是基本和简单的.符号链接只需要为每个位置创建一次(生产,开发,同事).

优点是没有人需要额外的努力来学习和维护git子模块,并且避免了它带来的风险和复杂性.

可以通过在本地计算机上的某处保留操作系统的os和私有git repo的工作副本来完成:

/repos/myproject-os
/repos/myproject-priv
Run Code Online (Sandbox Code Playgroud)

然后你可以创建你的目录结构,其中项目实际上将存在并在这台机器上的其他地方工作(不在/ repos/tree中),并为你使用的子目录创建symblinks:

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
Run Code Online (Sandbox Code Playgroud)

这样,您可以始终清理存储库结构,并且可以按照您希望的方式混合和排列两个存储库中的目录,并且还有一个空间用于本地配置或不进入存储库的临时文件.

您可以执行git提交,并且/ repos/tree和项目中的所有内容都会运行,您可以编辑/ wrk/tree中的文件.请注意,/ wrk/tree中不能使用git数据所在的.git diretory ,因为您只链接到子目录(或者可能是根目录中的单个文件).

第2部分:您说您要确保不会意外地将私有代码推送到公共存储库.您可以在工作的操作系统存储库和github存储库之间设置一个额外的git存储库,假设您将它放入/ repos/gatekeeper,然后您的树看起来像这样:

/repos/gatekeeper/myproject-os
/repos/myproject-os
/repos/myproject-priv
Run Code Online (Sandbox Code Playgroud)

每次从/ repos/myproject-os推送它都会转到/ repos/gatekeeper/myproject-os.但是从/ repos/myproject-priv你直接推送到你的私人github仓库.

这样你在/ repos/myproject-os和/ repos/myproject-priv中都有相同的工作流程,你不需要太担心.有时你想要将更改推送到真正的操作系统代码库,你可以转到/ repos/gatekeeper/myproject-os并从那里推送到github.

您可以在此之前进行额外的代码审查,并查看差异,以便确定只有您真正想要的内容才会公开.

如果你想要额外的安全性,/ repos/gatekeeper/myproject-os也可以在不同的机器上,甚至在不同的位置.