如何在git存储库中分离内容和结构?

时间:2013-02-18 18:41:33

标签: git

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

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

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

2 个答案:

答案 0 :(得分:2)

您描述的确切方案是不可能的,除非您为私有代码版本和代码的公共版使用不同的存储库,这不是您的意思想。我将描述两个选项,一个是对解决方案有点苛刻,直到它适合您的问题,另一个是对我来说似乎更理智的一个选项,这是我们在Web开发项目中使用的选项。

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

    首先,按照您的建议将contents内容移动到单独的存储库中。使用重写清除git历史记录中的内容(在github help或SO上搜索它,有几种方法可以执行此操作。您甚至可以将历史记录导出到新的内容存储库中。)

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

    此时,我建议通过使用单独的克隆来拆分开发存储库和您的网站存储库。

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

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

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

答案 1 :(得分:0)

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

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