Gitを使ってバージョン管理下でクライアントがソースコードを受け取る状況があります。クライアントは、毎週のスプリントの進捗状況を追跡し、差し引き、レポに管理したいと考えています。最終的には、クライアント担当者もそのレポをコミットします。2つのgitリポジトリ(内部と外部)を使用してクライアントにコードを渡すためのワークフロー
私のチーム(内部チームと呼ぶ)もGitとgit-flowワークフローを使用しています。だからののの内部レポは、クライアントレポに翻訳する必要があります。私たちは内部レポのすべてのコミットがクライアントレポに表示されることを望んでいません。
私の現在の考え方/解決策は、rsyncを使用して内部ディレクトリからクライアント(ローカルファイルシステム上)にコピーしてクライアントリポジトリにコミットするスクリプトを用意することです。これは、内部サーバまたは類似のもののポスト受信フックとして配置することができます。
解決策は私にとってはあまりにも厄介なようで、おそらく私が必要とするものを達成するためのよりよい方法があります。他の考えは何ですか?スコット・ウェルドンが受け入れられた応答に指摘したように、git-merge
が良いワークフローでこれを行うことができます
:受け入れソリューションが含まれるように
EDIT。しかし、それを動作させるためには、他のフラグが必要です。 1つはgitが2つのストーリーを効果的にマージすること、もう1つは衝突を解決するための適切な戦略を与えることです。
ので、内部レポはrelease/x.x.x.
ですから、私はマージてるの参照を想定し、フローがばらばら履歴を追加し、マージするのGitの機能を使用することですこれを行うには
git fetch internal
git merge --allow-unrelated-histories -s recursive -Xtheirs --squash internal/release/x.x.x
git commit
git push origin master
ありがとう@Scott Weldon。私は1つのレポにスカッシュを使用しましたが、2つのレポの間に決して使用しませんでした。これは素晴らしいアプローチです。これをサーバー上のコミット後のフックとして設定することについてのあなたの考えは何ですか?基本的に私は、内部のチームの開発者が、修正されていないコード(中間の履歴を介して)をクライアントに送信する可能性を最小限に抑えたいと考えています。 –
@Juanそれは実行可能でなければなりません。あなたのサーバが裸のレポを使用している場合は、サーバー上のどこかで完全なチェックアウトを行う必要がありますが、問題にはならないシェルアクセスがある限りです。内部リポジトリの 'post-receive'フックは、外部リポジトリを更新し、必要に応じてマージすることができます。 –