私が使用する方法を理解するいくつかの困難が午前タグを対支店でのギット。
現在のバージョンのコードを CVS に ギット、そして今、私は特定の機能のためにそのコードのサブセットに取り組んでいます。他にも数人の開発者がこれに取り組んでいますが、私たちのグループのすべての開発者がこの機能を気にするわけではありません。ブランチまたはタグを作成する必要がありますか?どちらを使用すればよいですか?
私が使用する方法を理解するいくつかの困難が午前タグを対支店でのギット。
現在のバージョンのコードを CVS に ギット、そして今、私は特定の機能のためにそのコードのサブセットに取り組んでいます。他にも数人の開発者がこれに取り組んでいますが、私たちのグループのすべての開発者がこの機能を気にするわけではありません。ブランチまたはタグを作成する必要がありますか?どちらを使用すればよいですか?
回答:
タグは、時間内に現時点では特定のブランチのバージョンを表します。分岐は、同じコードベース上の他の開発作業と並行して実行することができる開発の別のスレッドを表します。ブランチへの変更は、最終的にそれらを統合するために別のブランチにマージされます。
通常、特定のバージョンにタグを付けて、再作成できるようにします。たとえば、これはXYZ Corpに出荷したバージョンです。ブランチコードの開発を継続しながら、コードの特定のバージョンに継続的な更新を提供するための戦略です。提供されたバージョンのブランチを作成し、メインラインで開発を継続しますが、提供されたバージョンを表すブランチにバグ修正を行います。最終的には、これらのバグ修正をメインラインにマージします。多くの場合、ブランチとタグ付けの両方を一緒に使用します。メインラインとそのブランチの両方に適用される可能性のあるさまざまなタグがあり、特定のバージョン(たとえば、顧客に配信されたもの)をマークして、配信、バグ診断などのために再作成する可能性のある各ブランチに沿って配置します。
これは実際にはこれよりも複雑です-または、作成したいほど複雑です-これらの例は、違いを理解するのに役立ちます。
git checkout 88c9f229f
ようにgit checkout your_tag
して、タグによってエイリアスされたコミットをチェックアウトします。
理論的な観点から:
技術的な観点から:
refs/tags/
名前空間に存在し、タグオブジェクト(注釈付きおよびオプションでGPG署名付きタグ)をポイントするか、オブジェクトを直接コミットする(ローカル名にはあまり使用されない軽量タグ)、または非常にまれなケースでツリーオブジェクトまたはblobオブジェクトを指すこともできます(例:GPG署名ます)。refs/heads/
名前空間に常駐し、コミットオブジェクトのみを指すことができます。のHEAD
ポインタは、分岐(シンボリック参照)または直接コミット(一戸建てHEADまたは無名ブランチ)を参照しなければなりません。refs/remotes/<remote>/
名前空間に存在し、リモートリポジトリの通常のブランチに従います<remote>
。gitglossaryのマンページも参照してください。
ブランチ
「ブランチ」は活発な開発ラインです。ブランチでの最新のコミットは、そのブランチの先端と呼ばれます。ブランチの先端はブランチヘッドによって参照され、ブランチで追加の開発が行われると前方に移動します。単一のgitリポジトリは任意の数のブランチを追跡できますが、作業ツリーはそのうちの1つ(「現在の」または「チェックアウトされた」ブランチ)に関連付けられており、HEADはそのブランチを指します。
鬼ごっこ
タグまたはコミットオブジェクトを指す参照。ヘッドとは異なり、タグはコミットによって変更されません。タグ(タグオブジェクトではない)はに保存され
$GIT_DIR/refs/tags/
ます。[...]。タグは、最も一般的には、コミットの祖先チェーンの特定のポイントをマークするために使用されます。タグオブジェクト
別のオブジェクトを指す参照を含むオブジェクト。コミットオブジェクトと同様にメッセージを含めることができます。また、(PGP)署名を含めることもできます。その場合、「署名済みタグオブジェクト」と呼ばれます。
git checkout <tag>
"は匿名の無名ブランチ(いわゆる「切り離されたヘッド」)を生成し、タグの状態を選択します。新しいコミットを作成すると、この名前のないブランチで実行され、タグの指す場所は変更されません。
リポジトリを、プロジェクトの進捗を記録する本だと考えるなら...
ブランチは、これらのスティッキーブックマークの 1つと考えることができます。
新しいリポジトリにはそのうちの1つ(と呼ばれるmaster
)のみがあり、作成した最新のページ(commitと考える)に自動的に移動します。ただし、本の他の興味のある箇所にマークを付けるために、より多くのブックマークを自由に作成して使用できるため、すばやくブックマークに戻ることができます。
また、特定のブックマークをブックの他のページにいつでも移動できます( git-reset
たとえば)。関心のあるポイントは通常、時間とともに変化します。
タグは章の見出しと考えることができます。
タイトルが含まれている場合があります(注釈付きのタグと考えてください)。タグは、本の歴史的関心のあるポイントを示すという点でブランチと似ていますが異なります。その歴史的側面を維持するために、タグを共有した(つまり、共有リモコンにプッシュした)場合、そのタグを本の他の場所に移動することは想定されていません。
CVSから来ることを理解する必要があるのは、ブランチを設定するときにディレクトリを作成しなくなったことです。
「1つのファイルにのみ適用できる」「スティッキータグ」や「ブランチタグ」はもうありません。
ブランチとタグはGitの2つの異なるオブジェクトであり、常にすべてのリポジトリに適用されます。
(今回はSVNを使用して)リポジトリを明示的に構造化する必要はもうありません。
branches
myFirstBranch
myProject
mySubDirs
mySecondBranch
...
tags
myFirstTag
myProject
mySubDirs
mySecondTag
...
この構造は、CVSがリビジョンシステムであり、バージョンシステムではないという事実に由来しています(「ソース管理とリビジョン管理?」を参照)。
つまり、ブランチはCVSのタグ、SVNのディレクトリコピーを通じてエミュレートされます。
あなたがタグをチェックアウトし、タグで作業を開始することに慣れている場合、あなたの質問は理にかなっています。
すべきでないこと;)
タグは不変を表すことになっていますコンテンツことになっており、毎回同じコンテンツを取得するという保証付きでアクセスするためにのみ使用されます。
Gitでは、リビジョンの履歴は一連のコミットであり、グラフを形成します。
ブランチはそのグラフの1つのパスです
x--x--x--x--x # one branch
\
--y----y # another branch
1.1
^
|
# a tag pointing to a commit
すべての専門性についてはJakubNarębskiの回答を参照してください。しかし、率直に言って、現時点では、(まだ)すべての詳細は必要ありません;)
主なポイントは次のとおりです。タグはコミットへの単純なポインタであるため、その内容を変更することはできません。ブランチが必要です。
あなたの場合、各開発者は特定の機能に取り組んでいます:
同僚のブランチを直接追跡するのではなく、この特定の機能に関する全員の作業を統合して共有するために、全員が自分の作業をプッシュする1つの「公式」中央リポジトリのブランチのみを追跡できます。
説明する最良の方法は、タグが読み取り専用ブランチとして機能することです。ブランチをタグとして使用できますが、新しいコミットで誤ってブランチを更新する可能性があります。タグは、存在する限り同じコミットを指すことが保証されています。
git tag -f
ます。
Gitのたとえ話は、典型的なDVCSが作成されると、なぜそのクリエイターは、彼らが何をしたかしなかった方法を説明します。また、Git for Computer Scientistもご覧ください。ブランチやタグなど、Gitの各タイプのオブジェクトの機能について説明しています。