在开源项目时处理先前的提交

时间:2012-02-10 00:55:21

标签: git open-source github

有没有办法隐藏某些用户的提交?我想公开私人回购,但不希望别人看到我所有的旧提交。其中一些有密码和API密钥。其他人与我想提供的内容无关。

私人仓库目前托管在GitHub上。我想翻转开关并将其设置为Public和Open Source,但这会显示我不希望别人看到的旧提交。

我知道我可以采用的一种方法是创建一个全新的存储库,但我已达到帐户的回购限制。寻找解决问题的最快捷,最简单的方法。对任何方法都开放 - 包括创建一个新的回购,如果这恰好是最好的方式。

3 个答案:

答案 0 :(得分:2)

如果你确实"隐藏"那些提交,然后你有效地创建一个新的回购。提交的SHA1取决于它的所有内容,以及它的父级,因此更改单个提交会改变所有内容。

如果要隐藏的内容范围很大,最好不要导出任何历史记录。但希望事情相当孤立,你可以用git filter-branch来解决你的问题。该联机帮助页描述了它的功能,包括一些玩具示例(例如,如何从历史记录中删除文件),还有更多在线示例,包括此处。您可能最终会进行多次通过,例如一个删除某些文件,一个删除某些类型的提交。

可能对您有用的关键事项:

  • --index-filter将允许您删除或重命名一组给定的文件或目录 - 它只允许您修改索引,而无需检出文件,因此速度很快;

  • --env-filter可以让您快速重写作者/提交者信息;以及

  • --tree-filter,最后的手段,实际上会在每一步检查整个树,并允许您就地修改文件(例如搜索和替换以删除密码)

filter-branch完全重写您指定的任何引用的所有历史记录,并将原始引用保留在refs / originals中以备不时之需。出于各种原因,其中最重要的是安全性,最好在新的克隆中使用它。

答案 1 :(得分:0)

无法在存储库中为其他用户隐藏提交。

从好的方面来说,您可以在本地存储库中执行所需的所有操作,包括重写历史记录以压缩或省略这些提交。

然后,将私有仓库的另一个克隆用于安全,删除它,创建一个新的,并从该修改版本推送到新的存储库。

这利用了git存储库的任何克隆都是整个事实......

答案 2 :(得分:0)

您可以将提交压缩在一起或将当前代码导出到新的存储库中,但这实际上违背了开源项目的目的。如果有人检测到错误,想跟踪它是如何进入代码并且不能,那么,因为它是在你压缩的一个提交中引入的?