如何开源其git存储库中历史上拥有受版权保护的媒体的项目?


15

我想以免费许可证发布音频指纹识别软件项目,但是存储库包含受版权保护的音频文件。测试用例当前还使用这些文件。如何在不违反版权的情况下以最高版本历史向公众发布代码?

细节:

  • 该代码在git下进行了版本控制。在发布之前,我们会将其全部折叠回一个分支。
  • 有400 MB的音频数据。有些文件是来自Jamendo的免费许可音乐,另一些是我们个人收藏中的MP3。
  • 无论采用哪种方法,我们都将始终保留原始存储库的不变副本,以免破坏项目历史。

主要问题:如何处理公开发布?

  1. 从git存储库中删除有问题文件的所有历史记录,并释放更改后的存储库。(v64 指出了执行此操作的方法。)
  2. 另外,也可以对代码的当前状态进行快照,甚至不必费心查看预发布代码的公开历史记录。

附带问题:鉴于项目的早期阶段有时需要私有代码或媒体,我们如何首先避免这种困境?

Answers:


13

GitHub上有一个页面,说明如何从所有历史记录中删除文件:删除敏感数据

用户有时会不小心将密码或密钥之类的数据提交到git存储库中。虽然可以git rm用来删除文件,但它仍将存在于存储库的历史记录中。幸运的是,git使从整个存储库历史记录中删除文件变得相当简单。

危险:一旦提交被推送,您应该考虑数据已被泄露。如果您输入了密码,请更改它!如果提交了密钥,请生成一个新密钥。

从存储库中清除文件

现在,密码已更改,您想要从历史记录中删除文件并将其添加到中,.gitignore以确保不会意外重新提交该文件。对于我们的示例,我们Rakefile将从GitHub gem存储库中删除...


看起来像适合该工作的工具。与从代码库的全新快照开始相比,我仍然不确定这对我而言是否最合理。
好好对待您的mods

@phyzome:取决于您认为历史的重要性。使用该filter-branch命令删除非常容易-只需确保在存储库的克隆上运行它即可,因为它具有破坏性且无法撤消。
Sharpie

8

附带问题:鉴于项目的早期阶段有时需要私有代码或媒体,我们如何首先避免这种困境?

如果要跟踪大型媒体文件(400MB音频),请将其放在单独的存储库中。

用一块石头杀死两只鸟:

  1. 主存储库小400MB。(人们不必每次克隆都下载400MB的内容。)
  2. 媒体可以是私有的,并且可以与所有其他东西分开存放。这样,无需做额外的工作即可发布公共存储库。

如果愿意,可以通过将媒体存储库设置为公共存储库(计划发布)的子模块,使使用起来更加方便。

这样,您只需保持指向它的指针,而不是(敏感的)内容本身(用于开发的早期阶段)即可。然后,当您要公开发布存储库时,只需删除子模块引用,这比重写您的历史记录来过滤掉400MB的东西要麻烦得多。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.