2009-09-11 14 views
6

私はGitの初心者です。Mantain古いリリースで長生きのブランチを作成しない

私が読んでいる: "プロのGit:プロジェクトの保守"(書籍) と のGit:私のためのドキュメント/ HOWTO /維持-git.txt

タフ質問:どのようにすることなく、古いリリースをmantainするに独立した長寿命ブランチを作成します。 つまり、私はプロジェクトGitのブランチmaintを使って作業する方法に興味があります。

例(トピックブランチとのマージ、パッチの貢献者の統合は表示されません)、 "next"、 "pu"の他のブランチもここには表示されません)。

これらの画像はat hereでもご覧になれます。

  +--master 
      | 
      +--maint 
      | 
    (c1)->(c2) 
      | 
      +--tag : feature-release v1.0 

次の時間:

tag:feature-rel v1.0--+     +--master 
         |     | 
       (c1)->(c2)->(c)->(c)->(c)->(c) 
         | 
         +->(c)->(c)->(c) 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

次に、 "維持・git.txt" で説明したように、実行します。

$ git checkout master 
$ git merge maint 

結果:

tag:feature-rel v1.0--+       +--master 
         |       | 
       (c1)->(c2)->(c)->(c)->(c)->(c)->(c100) 
         |      /
         +->(c)->(c)->(c50)-----' 
            | 
            +--maint 
            | 
            +--tag:maint-rel v1.0.1 

次の時間を:

       +--master 
           | 
           +--tag:feature-rel v2.0 
           | 
    ...->(c)->(c100)->(c101)->(c102) 
      /
...->(c50)---' 
     | 
     +--maint 
     | 
     +--tag:maint-rel v1.0.1 

そして、この時点で私はいくつかの質問を持っている:

  1. ブランチ "のmaint" で何をしますか?私はポインタ "maint"は "マスター"と同じ位置に移動する必要があります理解していますか?どうやって ?
  2. その後、ブランチ "master"からブランチ "maint"のフォークを作成する方法はありますか?
  3. 古い「タグ:maint-rel v1.0.1」のパッチ(現在の機能リリースv10.0など、非常に長い時間が経過している)が表示された場合は、「maint」および「マスター」で?

ありがとうございます。

答えて

3
彼らはそのリリースに固有のバグを修正するのに役立つことから、独立した寿命の長い枝

保守枝は、多くの場合、リリースごとに行われ、かつ長寿命を作成せずに、古いリリースをmantainする方法

、すべてを現在の開発に統合する必要はありません。

1/"maint"ブランチとは何ですか?私はポインタ "maint"は "マスター"と同じ位置に移動する必要があります理解していますか?どうやって ?

ここでmaintを再利用する理由がわかりません。リベースは機能しません。「MAINT」はすでにマスターにマージされましたので

$ git checkout maint 
$ git reset --merge c102 

してもよいし、私はこのリセットがマスターに新しいファイルのいずれかを更新しないだろうと思います。

私はちょうどそれをテスト:

alt text http://img188.imageshack.us/img188/4425/resetmerge.png

それは、マスター内のすべてのファイルを触れることなく、 'MAINT' のヘッドを移動しません。

2 /その後、どのようにブランチ 'mastert'からブランチ 'maint'のフォークを作るのですか?

まあリセットは、現在開発中の「MAINT」のヘッドを移動しています:C102はv2のであれば、あなたが必要とするすべては「MAINT」をチェックアウトすることで、あなたはすぐにフォークます。

あなたを与えること:

alt text http://img36.imageshack.us/img36/91/resetmerge2.png

3 /古い「タグ用のパッチ(例えば、現在の機能リリースV10.0、非常に長い時間が経過する)表示された場合:maint-rel v1.0.1 "、" maint "と" master "にどのように統合するのですか?

$ git checkout -b maint-1.0 c50 
$ # work on patch 
$ git checkout maint 
$ git cherry-pick ... # only merge what you need in maint 
$ git checkout master 
$ git cherry-pick ... # only merge what you need in maint 

注:あなたがmaintの中で同じものをマージない場合があります(まだのmaintで行わ修正の一部を必要とすることがあります「という名前のメンテナンスブランチ」を作成する必要があり

-1.0)とマスター(パッチのほとんどが関連性を失うほど進化している可能性があります)

関連する問題