web-dev-qa-db-ja.com

コードの一部のみをgitと共有する

状況

XとYの機能を持つコードがあります。

ボブは、機能Xをさらに開発するために、コードにアクセスする必要があります。

通常、ボブにコードの複製を許可しますが、問題は機能Yが機密であるため、これは不可能です。ボブは、機能Xをさらに開発するために、機能Yのコードを表示できる必要はありません。

ボブと共有する新しいブランチを作成し、コードから機能Yを削除しても、コミット履歴に引き続き表示されます。

だから私は唯一のオプションは次のとおりだと思います:

  1. 新しいブランチを作成し、フィーチャYを削除します。
  2. ボブと共有する完全に新しいリポジトリを作成します
  3. (新しいY-lessブランチがチェックアウトされている間に)ファイルを新しいリポジトリにコピーします。
  4. ボブにその新しいリポジトリへのアクセスを許可します。
  5. ボブが機能Xをさらに開発した後、関連する行とファイルをチェリーピックして、マスターに入れます。 (痛い)

質問

これについて行くより良い方法はありますか?

4
Gerhard

努力は少なくありませんが、より永続的な修正は、機能XとYをそれぞれ独自のリポジトリに分割することです。次に、マスターは他のリポジトリをライブラリとして参照するだけです(このためのベストプラクティスはサブモジュールを使用することです)。

このように、独自のリポジトリから直接使用しているため、新しい開発を機能Xに手動で追加する必要はありません。

7

Tristanが言ったように、可能であれば、機能を独自のリポジトリに分割することがベストプラクティスです。ただし、コードがあまりにも絡み合っている場合は、別の方法があります。

1つは、 [〜#〜] moe [〜#〜] を使用することです。これは、オープンソースバージョンとクローズドソースバージョンの間のリポジトリの変換を基本的に自動化するプログラムです。

もう1つのオプションは、Bobブランチを作成してから、彼に送信するパーツをコピーすることです。彼が変更を送信したら、そのブランチをチェックアウトして、すべてのファイルをコピーして戻します。その後、メインブランチにマージして戻すだけです。変更が別のVCSにあったときに、この方法を使用しました。

3
Karl Bielefeldt