0

我使用 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 

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

4

2 回答 2

2

您可以执行以下操作:

  1. 创建存储库的本地副本
  2. 删除所有子存储库中的 .git 文件夹并 repo itsetlf。
  3. git init在副本仓库中执行。
  4. 将 .gitignore 文件添加到复制文件夹并指定要被 git 省略的文件。
  5. git add .复制仓库中的所有文件
  6. 将副本仓库推送到github

您可以在此处找到默认的 git ignores并根据您的要求进行修改。

您也可以尝试将 .gitignore 文件添加到您现有的存储库并提交更改,但我不确定您的脚本在旧提交中是否无法访问。

于 2013-05-23T12:19:16.770 回答
0

当您从一开始就计划这种事情时,您可以保留“公共”分支以推送到 GitHub 和“私有”分支,以便从公共分支合并以进行内部开发。

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

您的问题是希望做相反的事情,创建一个从私有分支派生的公共分支。我想只要采摘足够多的樱桃,您就可以创建这样的分支,但我并不羡慕您的努力。

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


更新:子模块确实需要目录边界。因此,如果这适合您的需要,您可以使用它们将程序 A 与程序 B 划分为更大项目的子模块。如果您可以安排您的目录,使公共信息是私有内容的子模块(子目录),那么这可能最适合您。

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

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

私人分支机构将包含公共和私人信息。在公共部门完成的工作,我可以合并到私人分支机构,但不能反过来。私有分支将仅推送到私有存储库,其中来自私有分支和合并到公共分支中的数据将可见。

如果您认为某个功能可能从 Private 开始并最终变为 Public,那么您应该将新的 Private Feature 分支仅基于 Public 工作,然后将其合并到 Private 分支中。这样,当您将其合并到私有分支时,它的父提交都不包含私有信息。出于这个原因,您可能希望基于公共分支在其自己的分支中建立每个私有功能,这样当/如果您将它们设为公共时,您需要对存储库进行更少的手术以使该分支中的代码公共.

于 2013-05-23T18:50:55.890 回答