2

我正在使用 ExpressJS 编写一个自定义博客站点,我想在 github 上开源博客系统。但是,我在项目的文件夹中有个人内容content,我希望能够将其作为子模块保存在它自己的私有仓库(在 bitbucket 上)中。我还将创建一个虚拟内容文件夹,它应该是主项目 repo 的一部分。

当我克隆或拉取项目存储库时,我希望工作副本包含我的内容存储库作为子模块。当其他人分叉或克隆项目 repo 时,我希望他们将虚拟内容作为项目 repo 的一部分,而不是分成子模块。

最简单的方法是什么?我还没有创建虚拟内容,对项目结构进行大的更改还为时不晚。

4

2 回答 2

2

您描述的确切场景是不可能的,除非您为私有代码版本和代码的公共版本使用不同的存储库,这不是您想要的。我将描述两种选择,一种是在解决您的问题之前对解决方案进行某种程度的锤击,另一种是对我来说似乎更理智的一种,它是我们在 Web 开发项目中使用的一种。

  1. 但是,您可以使用您建议的目录结构非常接近,但有一些(重大)限制:

    首先,contents按照您的建议,将内容移动到单独的存储库中。使用 rewrite 从 git 历史记录中清除内容(在 github 帮助或 SO 中搜索,有几种方法可以做到这一点。您甚至可以将历史记录导出到新的内容存储库中)。

    然后在代码存储库的目录中创建虚拟内容,contents并通过提交将它们添加到历史记录中。这是您现在推送到 github 的版本。

    在这一点上,我建议通过单独的克隆来拆分开发存储库和您的网站存储库。

    对于网站,您可以克隆存储库、git rm内容contents并安装另一个存储库的子模块。您将子模块提交到该存储库。请注意,包含虚拟内容更改的合并可能会变得很痛苦。不要推动这些变化。事实上,你永远不会从这个存储库推送。你只会拉。所有全局更改(即代码库)都在开发存储库中完成,您可以使用远程(github)存储库同步代码。

  2. 如果您准备好更改目录结构,我只是建议将内容保留在代码存储库之外。无论如何,这是一个不错的选择,因为您通常不会将代码和内容保存在一个存储库中(您知道原因,还有其他原因)。特别是在 Web 开发中,将(服务器端)代码和(客户端)内容分开是明智的,甚至不让用户靠近代码(而不是将其保存在文档根目录中)。

    在这种情况下,情况变得微不足道,您可以将虚拟内容作为 github 上的单独存储库提供,可能在自述文件或类似文件中提及。

于 2013-02-18T18:52:31.930 回答
0

将内容文件夹添加到您的 .gitignore。这将使 git 在提交时忽略此文件夹。如果您希望提交结构而不是文件,则可以将文件添加到 .gitignore 中。

以下是一些示例:http ://www.kernel.org/pub/software/scm/git/docs/gitignore.html

于 2013-02-18T18:47:22.503 回答