プライベート リポジトリとパブリック リポジトリがあるとします。私は自分のプライベート リポジトリを使用して開発を行い、重要なステップですべてのソースとバイナリを保存するコミットを行います。バイナリを保存する理由は、すべてのバイナリを再構築することなく、以前にコミットされたバージョンを回復できるようにするためです。機能の開発が完了したら、それをパブリック リポジトリにプッシュします。このリポジトリには、インテグレータがアクセスし、私のコントリビュートと他の開発者のコントリビュートも取得して、それらすべてを統合します。提供されたものをすべてプルした後、インテグレーターは常にバイナリを再構築します。したがって、私がプライベート リポジトリからパブリック リポジトリにバイナリをプッシュし、彼がそれらをプルする必要はありません。このワークフローでバイナリのプッシュとプルを回避する方法は git にありますか?
5 に答える
1 つのアプローチは、ソース リポジトリとバイナリ リポジトリの 2 つのリポジトリを持つことです。特定のソース リビジョンをバイナリに関連付けることができるように、ソース リポジトリをバイナリ リポジトリのサブモジュールとして複製します。
Fedora プロジェクトが行うことは、バイナリがチェックインされ、チェックサムによって識別されるルックアサイド キャッシュを持つことです。バイナリが必要ない場合は、チェックサムと対応するファイル名をリストするファイルを単に無視してください。
要するに、次のバイナリでディレクトリに名前を付けます。
.gitignore
あなたが正確に望んでいることは不可能だと思います。2 つのリモート リポジトリが必要ですが、バイナリを一方にプッシュし、もう一方にはプッシュしません。レポがバイナリをプッシュするための特別なコマンド(コミット時に .gitignore ファイルを無視するオプション付き)を使用しないと、それが可能になるとは思いません。
.gitignore 機能を見て、コミット (したがってプッシュ) からファイルを無視します。しかし、これはすべてのバイナリのプッシュを停止するため、まさにあなたが望むものではありません.
すべてのチェックアウトがバイナリのタイムスタンプを更新するため、バイナリを git にチェックインすることに注意してください (プロジェクト内の他のファイルよりも新しい可能性があるため、多くのツールがファイルのタイムスタンプを使用して何を再構築するかを判断するため、インクリメンタル ビルドでは再構築されません)。 .
問題は、何かをプッシュするにはコミットする必要があることです。ただし、両方のリポジトリは、共有および配布するブランチのすべてのコミットを確認できます。
したがって、唯一の回避策は、ローカルの作業コピー (およびプライベート リポジトリ) に新しいブランチを作成することであり、このブランチにはバイナリのコミットのみが含まれます。しかし、これを整理して実装するには、多くの作業と頭痛の種があります。
つまり、ブランチをこのバイナリのみのブランチに切り替えるワークフローをセットアップし、すべてのバイナリを検索し、コミットを生成し (おそらく .gitignore または編集を無視)、プライベート リポジトリにプッシュし、リポジトリに加えられた変更を元に戻す (recover古い .gitgnore を編集した場合)、ソース コードのみを含む元のブランチに戻ります。
私のアドバイスは、バイナリをプッシュする必要がある理由を再考することです。プロジェクトの再構築に何分/何時間もかかりますか?
別のディレクトリにバイナリをビルドしてみることができます。次に、それを別のローカル リポジトリとして扱い、ソース リポジトリをバイナリからクリーンに保つことができます。それらをローカル リポジトリに置き、特定のファイルをリモート リポジトリにプッシュしないようにすると、DVCS の目的が無効になります。