2011-07-20 11 views
1

この壁の最後に質問があります。それはちょうどいくらかのセットアップが必要です。私はあなたとあなたとの関係に感謝します。支店の変更を理解する

私は、他の2人の開発者と一緒に私がリードしているプロジェクトを持っています。初期段階ではあるが、実際には開発の現在の段階の始めではなく、私たちはgitに興味を持ってきました。

SVN作業ディレクトリをgitにインポートしました。私たち3人は、順番に配備される機能(「プロモーション」、「マップ」、「調査」)に取り組んでいました。だから、当時はそれほど良く分かっていなかったので、私は「マスター」から「マップ」を分岐させ、「マップ」からは「調査」を分岐させました。私は今は違ったやり方をしていますが、数ヶ月前に、私はそれをやったのです。

"最初の"プロジェクト "promo"に取り組んでいる開発者はSVNで作業を続けていましたが、手動でマスターブランチを変更と同期させて定期的にフィーチャーブランチをマージしました。それはこのように見えた:

* ------- master (in sync with svn and containing work for "promo") 
\*------- dev/map 
    \*------ dev/survey 

だから、先週「プロモ」「マップ」のライブ行き、この全体のことは、いくつかのクリーンアップのために熟したライブや昨日行ってきました。

プロダクションプッシュ方法は、git diff --stat master..dev/mapを使用して、変更されたファイルをすべて見つけ、プロダクションサーバーに手動でFTPで転送しました。

ことがテストされ、承認された後は、私が行ってきました:

git checkout master 
git merge dev/map 
git branch -d dev/map 

だから今、マスターはステージングと開発サーバーの両方に何があるかを表します。その後:

git checkout -b production 
git checkout -b development 
git checkout -b hotfix 

は、だから今は、生産上の統合のための1、および生産への必然的なクイックフィックスのための一つだ何のための枝を持っています。私はdev/surveyを "開発"の枝として考えることができます。

私はgit remoteコマンドを実行して、これらの変更をすべて中央の(ギトライト)レポに反映させました。 :masterはクローンに混乱を招くので、私はそれをプッシュしません - そして私はそれを取得しますが、私はそれを私に先に進めるように設定するでしょう。

私は「調査」の仕事をしている人にこれらの変更をすべてプルダウンして、git diff --statを使って、変更されたファイルを見つけてステージングサーバーに置くように求めました。彼がそれをしたとき、彼は彼の変更に無関係だったファイルの長いリストを得ました。彼はこれらの新しいブランチをすべて手に入れましたが、何とか実際にコミットや何かを実際には得ていませんでした。

私は彼にレポのきれいなクローンを手に入れました。彼は私が意図したすべての変更を行い、テストのためにステージングサーバーで作業を完了できました。

質問は次のとおりです。これらのすべての支店変更に直面したとき、彼のレポには何が起こったのですか?私はブランチがHEADと一緒に動くタグの特別なケースであると考えました。それはちょうどすべての適切な商品を手に入れたはずですか?

答えて

0

どういうわけか、gitoliteリポジトリのマスターは、開発者のgit repoのマスターとは異なる履歴を持っています。
それでは、 "彼のレポでどうなるの?"それは、 "(押している間に)ギトライト(中央)レポに何が起こるか"であるからです。

+0

新鮮なクローンが良品を手に入れました。それが私を困惑させるものです。 –

+0

@ダン:新鮮なクローンを使用して、マスターブランチのローカル履歴をリモートgitoliteのローカル履歴にリセットします。差分は、「異なる」マスタから作成されたローカルブランチと、異なるマスタから開始されたリモートブランチとの間の差分とは対照的に、一貫性のある履歴を持つレポに進みます。共通の祖先を見ることで、Gitはそのような場合にはいつでも元に戻ることができました。 – VonC