2016-10-06 7 views
1

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 

答えて

2

一つの方法です。あなたが内部のレポでリリースを行うたび

git remote add internal ssh://[email protected]/path.git 

は、外部のレポで、次の操作を行います:

git fetch internal 
git merge --squash internal/master 
git commit 
git push origin master 

この意志を

は、外部リポジトリーにリモートとして内部のリポジトリを追加します。最後のマージ後に internal/masterからの変更を含む外部レポの1つのコミットを作成します。 git mergeのmanページから

--squash

が本当のマージ(マージ情報を除く)が起こったかのように作業ツリーとインデックスの状態を作り出すが、実際にコミットしないでくださいHEADを移動するか、$GIT_DIR/MERGE_HEADを記録して(次のgit commitコマンドでマージコミットを作成させます)。これにより、別のブランチをマージするのと同じ効果を持つ現在のブランチの上に単一のコミットを作成することができます(タコの場合はそれ以上)。

--squashフラグがないと、internalの履歴は外部レポに含まれます。

Git> = 2.9のバージョンを使用している場合は、git mergeコマンドに--allow-unrelated-historiesフラグを追加する必要があります。これは、関連しない履歴をデフォルトでマージすることを拒否するためです。 Git refusing to merge unrelated historiesを参照してください。

+1

ありがとう@Scott Weldon。私は1つのレポにスカッシュを使用しましたが、2つのレポの間に決して使用しませんでした。これは素晴らしいアプローチです。これをサーバー上のコミット後のフックとして設定することについてのあなたの考えは何ですか?基本的に私は、内部のチームの開発者が、修正されていないコード(中間の履歴を介して)をクライアントに送信する可能性を最小限に抑えたいと考えています。 –

+1

@Juanそれは実行可能でなければなりません。あなたのサーバが裸のレポを使用している場合は、サーバー上のどこかで完全なチェックアウトを行う必要がありますが、問題にはならないシェルアクセスがある限りです。内部リポジトリの 'post-receive'フックは、外部リポジトリを更新し、必要に応じてマージすることができます。 –

関連する問題