什么是" filter-fork"的最佳方法?

时间:2015-10-01 22:03:30

标签: git github

我过去曾经使用过filter-branch,但现在我正在寻找一个解决方案来公开私有存储库的文件夹,方法是让它和其他人一起创建拉取请求。

假设我有项目A而项目A有folderA,我需要从A创建一个只包含folderA的fork B.

这样做的好方法是什么?我无法找到一个简单的解决方案,而无需分配整个存储库,然后应用过滤器分支。

编辑:分叉将公开

谢谢:)

2 个答案:

答案 0 :(得分:2)

你有几种可能性。

  1. 没有历史记录的子模块 在这种情况下,您应该采用{em>当前状态folderA,即递归地将其复制到外部子目录。然后在该子目录中运行git init,像往常一样在github上发布新创建的存储库。然后,您需要从项目中删除folderA的内容(git rm -rf folderA),然后将其重新附加为git子模块(例如,请参阅this tutorial),然后将更改提交到主要项目。
  2. 在这种情况下,您的外部用户根本不知道folderA有一些先前的历史记录,但当然,从这个"第0天和第34天开始。 folderA将拥有自己的历史记录,您可以在shell项目中跟踪它。

    1. 具有完整先前历史记录的git子模块。在这种情况下,您需要过滤现有的存储库。过滤后,您只需选择folderA内容并仅选择相关的更改集,同时将folderA 目录条目替换为名为的特殊类型的条目,从而形成folderA的新历史记录gitlink(实际上gitlink只是一个任意的SHA-1,git submodule使用它来引用"外国存储库中的修订版。
    2. 我无法轻易地称这种方法,但它确实可行,如果你真的需要公开folderA之前的历史,那就是它的发展方向。

      1. git subtree merge虽然现在我并不是这种方法的忠实粉丝(git子模块似乎是一种更方便的通用解决方案),但仍然可以将folderA过滤成完全独立的序列在p.2中更改集,然后使用此类型的合并将shell项目与folderA中的更改合并。可能你不会发现这种方式很方便,但它有可能,但有时也很有用。

答案 1 :(得分:0)

我不认为有一个简单的解决方案"这个问题比你提出的问题更好(fork / filter-branch)。 Git不像SVN,它不支持"稀疏克隆" (存储库的部分克隆)。