4

プロジェクト内の一部のサブディレクトリを「信頼できない」ユーザーからは秘密/隠し、他の「信頼できる」ユーザーには見えるようにする方法でgitを使用しようとしています。これは単なる書き込み保護ではないことに注意してください。信頼できないユーザーもシークレットファイルを読み取ることを許可できません。ユーザーエクスペリエンスは、サブモジュールのようなものではなく、単一のgitリポジトリであるかのようにしたいと思います。

それが議論や批判に拍車をかける場合に備えて、これまでのところ私の唯一の考えをお話しします。サーバーの舞台裏で2つの並列リポジトリを用意することを検討しています。信頼できるユーザーは、信頼できるリポジトリのクローンを作成/プル/プッシュします。信頼できないユーザーは、信頼できないリポジトリのクローンを作成/プル/プッシュします。信頼できるリポジトリにコミットが行われると、信頼されていないリポジトリに適用される前に、秘密のコンテンツを削除するようにフィルタリングされます。反対方向に進むと、信頼できないリポジトリへのコミットは、信頼できるリポジトリに適用される前にシークレットコンテンツを壊さないようにフィルタリングされます。

この目標をどのように達成する必要がありますか?私の提案した解決策はクレイジーですか?

4

4 に答える 4

4

はい、それは可能であり、定期的な要求です。

そのためには、リポジトリをいくつかの異なるリポジトリに分割git submoduleし、テーマを単一のリポジトリに結合するために使用する必要があります。次に、信頼できないユーザーに対してシークレット リポジトリの読み取り権限を閉じます。

たとえば、私のホーム構成は github のパブリック リポジトリです: https://github.com/perfectworks/homeprivateそこには、別のプライベート git リポジトリのサブモジュールであるディレクトリがあります。信頼されていないユーザーは、権限を与えない限り、このディレクトリの下では何も取得できません。

詳細については、http git submodule: //git-scm.com/book/ch6-6.htmlを参照してください。

于 2012-05-31T04:00:23.363 に答える
2

サブモジュールを使用したくないと言っているので、リポジトリのサブディレクトリを独自のリポジトリに分割し、コミットされた変更を元のリポジトリにマージできるgit-subtreeを確認することをお勧めします。その他のリポジトリ。次に、構造を使用できます。

full-repo
\
 .git
 public
 private

...そしてgit-subtree split、サブディレクトリの履歴を表すブランチを生成し、publicそのブランチを新しく作成されたリポジトリにフェッチするために使用します。次に、特権ユーザーに clone を許可しますfull-repoが、信頼できないユーザーは、サブディレクトリを表す新しいリポジトリのみを複製できますpublic。サブディレクトリを表すリポジトリに変更がコミットされたら、元のリポジトリにフェッチして を実行するpublicことで、その履歴を にマージできます。同様に、 で行われた変更は、影響を受ける部分をで分割ブランチに伝播し、そのブランチを分割リポジトリにプルすることができます。full-repogit-subtree mergefull-repopublicgit subtree split

これを行う場合、 を表すリポジトリに変更を伝播するときに、publicプライベートなオブジェクトをパブリック リポジトリにフェッチしないように注意する必要があります。たとえば、リポジトリ内のすべてを取得するのではなく、分割されたブランチのみを取得するようにしてください。この種の間違いを犯した場合に備えて、セキュリティが重要な状況ではこのアプローチを使用しません。

于 2012-05-31T05:02:41.600 に答える
1

リポジトリの一部へのアクセスを制限する方法はありません。

シークレットコンテンツを別のリポジトリに配置し、そのリポジトリをメインリポジトリのサブモジュールとして使用するのが最も簡単な方法です。フィルタリングされた2つのリポジトリの同期を維持することは実際には実現可能ではありません

于 2012-05-31T03:53:23.937 に答える
1

自分自身をハッキングするつもりなら、それはおそらく技術的に可能ですgit。いくつかの質問に答える必要があります。

  • サーバーへのプッシュ中に「秘密の」ファイルをどのように識別しますか?
  • サーバーに接続していることをどのように確認しますか? 適切にフィルタリングするサーバーは他にないため、間違ったサーバーにプッシュすると、秘密のコンテンツがすべて共有されます。

git をハックすれば、あらゆることが可能になります。

于 2012-05-31T03:57:51.087 に答える