web-dev-qa-db-ja.com

gitリポジトリが歴史的にメディアの著作権を所有しているプロジェクトをオープンソース化するにはどうすればよいですか?

オーディオフィンガープリントソフトウェアプロジェクトを無料のライセンスでリリースしたいのですが、リポジトリには著作権で保護されたオーディオファイルが含まれています。テストケースも現在これらのファイルを使用しています。最大のバージョン履歴で著作権を侵害せずにコードを公開するにはどうすればよいですか?

詳細:

  • コードはgitでバージョン管理されています。リリース前にすべてを1つのブランチに折りたたみます。
  • 400 MBのオーディオデータがあります。一部のファイルは、無料ライセンスの音楽です。 Jamendo、その他は個人コレクションのMP3です。
  • どのようなアプローチをとっても、プロジェクトの履歴を壊さないように、元のリポジトリの不変のコピーを常に保持します。

主な質問:公開リリースの処理方法

  1. 問題のファイルのすべての履歴をgitリポジトリから消去し、変更されたリポジトリを解放します。 (v64 指摘 これを行う方法。)
  2. または、コードの現在の状態のスナップショットを取得し、リリース前のコードの公開履歴を取得する必要さえありません。

副次的な質問:プロジェクトの初期段階でプライベートコードまたはメディアが必要になる場合があるので、最初にこのジレンマを回避するにはどうすればよいでしょうか。

15

GitHubには、すべての履歴からファイルを消去する方法を説明するページがあります: 機密データを削除

時々、ユーザーは誤ってパスワードやキーなどのデータをgitリポジトリにコミットします。 git rmを使用してファイルを削除することはできますが、ファイルはリポジトリの履歴に残ります。幸い、gitを使用すると、リポジトリ履歴全体からファイルを削除するのがかなり簡単になります。

危険:コミットがプッシュされたら、データが危険にさらされていると考える必要があります。パスワードをコミットした場合は、変更してください!キーをコミットした場合は、新しいキーを生成します。

リポジトリからファイルを削除する

パスワードが変更されたので、ファイルを履歴から削除して.gitignoreに追加し、誤って再コミットされないようにします。私たちの例では、 GitHub gem リポジトリからRakefileを削除します...

13
v64

副次的な質問:プロジェクトの初期段階でプライベートコードまたはメディアが必要になる場合があるので、最初にこのジレンマを回避するにはどうすればよいでしょうか。

大きなメディアファイル(400MBのオーディオ)を追跡する場合は、別のリポジトリに配置します。

それは一石二鳥を殺す:

  1. メインのリポジトリは400MB小さくなります。 (人々はクローンするたびに400MB相当のコンテンツをダウンロードする必要はありません。)
  2. メディアはプライベートにすることができ、他のすべてのものとは別に保管されます。そのため、公開リポジトリをリリースするために追加の作業を行う必要はありません。

必要に応じて、メディアリポジトリを(リリースする予定の)パブリックリポジトリの サブモジュール にすることで、作業をより便利にすることができます。

そうすれば、(開発の初期段階では)(機密性の高い)コンテンツ自体ではなく、ポインタだけを保持できます。次に、リポジトリを公開するときは、サブモジュール参照を削除するだけです。これは、履歴を書き換えて400MB相当のものを除外するよりもはるかに面倒です。

8
Alex Budovski