2012-02-10 51 views
2

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

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

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

回答

2

如果确实“隐藏”了这些提交,那么您将有效创建新的回购。提交的SHA1取决于其所有内容,并取决于其父母,因此更改单个提交会改变以后的所有内容。

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

关键的事情可能对你有用:

  • --index-filter会让你删除或重命名一组给定文件或目录的 - 它只是让你修改索引,而不检查出文件,所以它很快;

  • --env-filter会让你很快地重写作者/提交者信息;和

  • --tree-filter,不得已而为之,实际上在每一步检查出整个树,让你就地修改文件(例如搜索和替换删除密码)

过滤分支完全重写您指定的任何参考文献的所有历史记录,并将原始参考文献留在参考文献/原件中,以备需要时使用。出于各种各样的原因,最重要的是安全性,最好在新的克隆中使用它。

0

没有办法隐藏存储库中另一个用户的提交。

另一方面,您可以在本地存储库中做所有您想要的事情,包括重写历史来压缩或省略这些提交。

然后,为安全起见采取另一个私人回购的克隆,删除它,创建一个新的,并从修改后的版本推送到新的存储库。

这需要一个事实,即一个Git仓库的任何克隆是整个事情的优势...

0

您可以到壁球提交在一起或当前代码导出到一个新的存储库,但是,真的打败了开源项目的目的。如果有人发现了一个bug,想跟踪它如何进入代码并且不能,因为它是在你被压扁的一个提交中引入的?