拆分Git存储库或保留同一文件夹的两个存储库

时间:2013-05-23 12:04:50

标签: git github repository

我使用Git跟踪包含项目管道所有脚本和插件的文件夹的更改。到现在为止还挺好。我想在GitHub上分享这些文件的子集。简而言之,因为完整的存储库还包含我无法公开共享的商业插件和其他代码。

脚本和插件混合在各种文件夹中。所以它并不总是像共享这个文件夹那样简单而不是那个文件夹。

我该怎么做呢?这有可能吗?

编辑:

基本上,我目前的结构是:

programmA  
  |-plugins (both commercial and public)
  |-scripts (both commercial and public)  
programmB  
  |-plugins (both commercial and public)  
  |-scripts (both commercial and public)  

此外,单个程序子文件夹是根据此程序指南构建的。我想通过一些清理工作,我可以做出类似的事情:

programmA  
  |-plugins commercial
  |-scripts commercial
  |-plugins public
  |-scripts public
programmB  
  |-plugins commercial
  |-scripts commercial
  |-plugins public
  |-scripts public 

然而,那仍然不允许我使用模块,不是吗?或者我是否需要为每个程序和子文件夹使用一个模块?

2 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

  1. 创建存储库的本地副本
  2. 删除所有子存储库中的.git文件夹并重新发送itsetlf。
  3. 在副本仓库中执行git init
  4. 将.gitignore文件添加到复制文件夹,并指定要由git省略的文件。
  5. git add . copy repo中的所有文件
  6. 将副本存储库推送到github
  7. 您可以找到默认git忽略here并根据您的要求进行修改。

    您也可以尝试将.gitignore文件添加到现有的repo并提交更改,但我不确定您的脚本在旧提交中是不会出现的。

答案 1 :(得分:0)

当你从一开始就计划这样的事情时,你可以保留'公共'分支机构以推送到GitHub& “私人”分支机构与公共分支机构合并,用于内部开发。

或者,您可以将“公共”内容设置为“商业”内容的子模块。

这里的问题是要反过来,创建一个派生自私有分支的公共分支。我想如果有足够的樱桃采摘你可以创建这样一个分支,但我不羡慕你的努力。

未经测试:使用Oleksandr的方法在新存储库中创建第一个“公共”分支提交,然后在私有资源中创建fetch。仔细合并可能会产生一个具有“公共”分支的单一存储库,其历史记录很少。一个具有更丰富历史的“商业”分支集合。

<小时/> 更新:子模块确实需要目录边界。因此,如果符合您的需要,您可以使用它们将程序A从程序B分区为较大项目的子模块。如果你可以安排你的目录,使公共信息是私人物品的子模块(子目录),那么这可能最适合你。

否则,您可以尝试使用公共/私人分支方法。

公共分支机构只有公共代码或其父母。公共分支机构将是您推送到公共存储库的唯一分支机构。

私人分支机构将同时包含Public&amp;私人信息。在公共场合完成的工作,我可以合并到私人分支机构,但从来没有相反。私有分支机构将仅被推送到私有存储库,其中来自私有分支机构的数据和公共分支机构中的数据将被显示。

如果您认为某个功能最初可能是私有&amp;最终成为公共,您应该仅将新的私有功能分支基于公共工作,然后将其合并到专用分支。这样,当您将其合并到专用分支时,它的父提交都不包含私有信息。出于这个原因,您可能希望基于Public分支将每个私有功能基于其自己的分支,因此当/如果您将它们设置为Public时,您需要在您的存储库上做更少的手术以使该分支中的代码公开