2

現在、プロジェクトに取り組んでいます。いくつかの特定のプライベート フォルダーを除外しながら、完全な情報 (作成者など) を含む日々のコミットをオープン ソース化したいと考えています。

ブランチ マスターで A/file1 と B/file2 をコミットするとします。B フォルダーをフィルター処理して GitHub にミラーリングしたいとします (このコミットには A/file1 のみが含まれます)。

私がこれを行うことを考えていた 1 つの方法は、次のようなリモート アップデート フックです。

  • newref によって追加されたすべての新しいコミットを一覧表示します (lastfoundcommit..newref としましょう)
  • これらのコミットを 1 つずつ修正して (lastfoundcommit から newref まで)、不要なファイルを削除します。
  • その過程で、ローカルの master-filtered ブランチが作成される場合があります (ローカルにあると便利な場合)。
  • このブランチを公開リポジトリにプッシュします
  • 次のプッシュで「lastfoundcommit」を簡単に計算できるように、プライベート コミットとパブリック コミットの間でコミット ID のマッピングを維持する

理想的には、両方の方向に進むことができます (つまり、github ブランチとプル リクエストをインポートし直して、プライベート リポジトリの上に自動的に、または簡単なプロセスで "リベース" できると便利です。おそらくそれほど難しくはありません)。おそらく単なるリベースです)。

これは、サブディレクトリを抽出するのではなく、代わりにさまざまなファイルをフィルタリングすることを除いて、git-subtree ができることと多少似ています。

それは実現可能だと思いますか?または他の提案はありますか?(多分 git filter-branch? または私を助けるかもしれない他の既存のツール/スクリプトに基づいていますか?)

注: サブモジュールは実行可能なオプションではありません。また、「プライベート」ファイルのリストは、時間の経過とともに拡張/変更される可能性があります。

4

2 に答える 2

0

私は同様の状況にありました:

git フィルター ブランチを使用しないでください

代わりにBFG レポクリーナーを使用してください。はるかに高速で使いやすいです。

プライベートフォルダー/ファイルについて言及しないように、レポ内のすべてのコミットを定期的に整理する必要があります。

リポジトリを分割する

完全なリポジトリOSS を用意します。スクリプトでファイルをあるファイルから別のファイルに転送し、OSS で特別なテストを行って、想定されていないものを見つけられないようにします。

両方のリポジトリはネットワーク内にある必要があり、できれば同じマシン上にある必要があります (セキュリティ)。OSS リポジトリからの許可され、チェックされ、クリーンなブランチのみがマシンを離れます (GitHub にプッシュするか、どこにでもプッシュします)。

サブモジュールを使用する

サブモジュール/サブツリーを使用して POC を実行し、スクリプトよりもうまく機能しないかどうかを確認します。さらに 2 時間を浪費し、確実にわかります。皆さんはプライベートフォルダーを持っているので、それらは実行可能なオプションかもしれないと思います...

プロジェクトの無視と .git/info/exclude を使用する

OSS リポジトリ内のプライベート ファイルとフォルダーを除外するために使用.git/info/excludeできます。これにより、Git の注意から意図的に回避されているという情報でさえ漏れません。

通常のリポジトリでは、これらのファイルを .gitignore に追加することができます。これは、最初のフィルターとして機能し、後で OSS リポジトリにフィードするために使用されます。

于 2016-04-18T18:56:01.823 に答える