2009-06-02 2 views
12

[OK]をので、私たちはすべてのとにかくsvn tagsディレクトリをどう使いますか?

trunk\ 
branches\ 
tags\ 

の標準SVNセット・アップを知っていると私は、勧告はタグがそれにコミット「特別」を持つべきであるということであることを認識しています。私は本当にタグディレクトリを使用したことはありませんでしたが、私はなぜこれまでだろうかわかりません。

私は、タグ\には "Version1Release \、Version2Release \、ThatTimeWeUpgradedEverthing \"などが含まれています。しかし、ここには、もしタグが決して変化しないと思われるならば、ソースコントロールのコピーを作成するポイントはどうなるのでしょうか?ノートリビジョンを作るだけです712はバージョン1のリリースです。

私の混乱は、タグが決して変更されないと思われるバージョンのようだと思います。しかし、ソース管理はすべて、ファイルの変更の履歴を保持することです。私はこれが小さな組織的議論であることを知っていますが、私は人々が何を考えているのが不思議です。

+3

「ちょっとメモを書き直してください712がバージョン1のリリースです。」 69.59.196.211がstackoverflow.comであることを覚えておいてください。いいえ?何故なの?それは同じ概念です! – Powerlord

+2

それは確かに同じ概念です。 stackoverflowのIPは、そのタスクに専用のDNSサービスによって記憶されます。それは、自然ではない方法で別のシステムを選択しているわけではありません。ソース管理やリリースのドキュメント、またはzipファイルや100万種類の異なる方法で保存したテキストファイルに「メモを付ける」ことができます。変更追跡システムを使用しないで保存することは決してありません変更する。 –

+0

さて、それを保存してもスペースはとられません。また、リリース版にソースをダウンロードさせながら、トランクにアクセスできるようにする必要はありません。 – Joey

答えて

13

ただリビジョンを作成する712はバージョン1のリリースでした。

これは、チームの開発者のための十分に機能おそらく(あなたはこのようなノートを作成するドキュメントストアを持っていると仮定)が、「ただ覚えている」ためにリポジトリに精通していない人を尋ねることはかなり迅速にかなり無理を取得。

たとえば、あなたのリポジトリが 'ネット上で利用可能であるとします。ユーザーは、* nixの好みの、あいまいでない風味のコピーをチェックアウトしてビルドすることを選択し、好きではない機能を追加する前に、いくつかのバージョンのリリースを手に入れたいと思うかもしれません。タグはこの種のものを簡単にします。

タグは「トリガポイント」としても優れています。私自身のリポジトリでは、タグをコミットすると自動的にビルド、パッケージ化、およびWebサイトへの投稿を行うスクリプトが(コミット後のフックを介して)起動されます。

最後に、タグは安価なコピーです。スナップショットが変更されないことを表す方法でビルドを「スナップショット」する場合は、タグを付けます。それはあなたに多くの費用がかかるようではありません。 :-)

は編集:

"実装などの枝" のアイデアに対処するために - 彼らはありません。本当に。実際、Subversionはブランチングやタグ付けをまったく実装していません。それらは完全にユーザーが作成したアイデアです。どちらも同じコマンド(svn copy)を使用しています。しかし、でもはそのコマンドを使用してトランク内のファイルをコピーします。特別なことは何もない。また、ブランチやタグについても本質的に特別なものはありません。それらは、私たちが特別に扱うことを決めた(そしてフック経由で実行することさえできる)普通のディレクトリであり、プロジェクト管理を容易にします。

+2

正確には、SVNはコピーをデルタとして格納するので、タグを作成するためのオーバーヘッドはほとんどありません。タグは、基本的に、リビジョン番号と人間が読める名前(および関連するURL)の間の意味的な関連付けです。 –

+0

あなたの編集であなたの明確化が好きです。 – crashmstr

+0

技術的には、ファイルのタグコピーをチェックアウトしてコミットすることは可能ですか? 'svn'は何のエラーも投げられませんか?純粋にそれを扱う開発者は、それがどのようなものであるかを明確に定義していますか? – mtk

1

タグは、一連のファイルの不変の「アプリケーションのバージョン」を参照することになっています。
( "アプリケーションのバージョン"とは対照的に、SVNのリビジョン、GitのSHA-1、ClearCaseのIDなどと同じではありません)
照会および( - ユーザー受け入れテスト - テストやUATのために)別のワークスペースに展開される参照として機能するようにSVNの枝のようなタグを実装しているため

:ディレクトリとして、タグ内のファイルを変更するためのインセンティブが強くなることができますしかし、タグの目的を破るだろう。他のVCSは、いったん設定されるともう移動できないラベル(または "ベースライン")という概念を持っています。

George Mauerコメントへ:私が言っていたかのまあthatsの種類

。タグを決して変更しないでください。タグをブランチとして実装するのは非常に奇妙です。

"implements"?しかし彼らはタグの概念を「実装」しなかった。 SVNには「タグ」自体はありません。彼らはちょうど彼らの枝を再利用し、タグとしても使用できると言った。

SVN RedBookは明確に述べている:

しかし、瞬間を待つ:このタグの作成手順は、我々はブランチを作成するために使用したのと同じ手順ではないでしょうか?はい、実際はそうです。
Subversionでは、タグとブランチの間に違いはありません。どちらもコピーによって作成される普通のディレクトリです。
ブランチと同様に、コピーされたディレクトリが「タグ」である唯一の理由は、人間がそのように扱うことにしたからです。誰もディレクトリにコミットしない限り、永遠にスナップショットが残っています。人々がそれにコミットし始めると、ブランチになります。

+2

@VonC:あなたはこれを英語のコモンズが理解しているバージョンに翻訳することができます。 「適用版」とは何ですか?なぜ「承認」の代わりに「同化」するのですか? – AnthonyWJones

+0

私が言っていたことはまあまあです。タグを決して変更しないでください。タグをブランチとして実装するのは非常に奇妙です。 –

+2

@George - ここで取り組まれているのは、Subversion *がブランチやタグを実装していないことだと思います。ユーザは、/ branchesや/タグというディレクトリを作成して特別に扱うことに決めましたが、Subversionはそうしていません。タグは「ブランチとして実装されていません」。それらはコピーとして実装されています。ブランチは同じように実装されます。 –

1

私たちは、例えば、リリース面白かったのビルドではなく、具体的にタグを付けるためにそれを使用:「投資家デモ」など

1

タグが変更されることを意図していないあなたの場合、あなたはブランチを作る必要がありますそれをしたい。

タグからブランチを作成して、そのブランチの結果を別のバージョンに再タグ付けすることができます。

編集のためにタグをチェックアウトするべきではありません。

SVNで分岐(コピー)することで履歴を失うことはありません。それはすべて一緒にリンクされています。

0

開発サーバーから運用サーバーにプロジェクトを昇格するたびにタグを作成します。これは私に、コードがプロダクションにどのように昇進したかの履歴を与えます。問題がある場合は、すぐ前のバージョンにロールバックできます。

タグディレクトリの内容は、チェックアウト/変更/コミットしたくありません。特定の時点からコードのスナップショットを保持するだけの場所です。

2

ただリビジョンを作成する712はバージョン1のリリースでした。

しかし、その場合は、明示的にメモを付けて、みんなが見ることができる場所にそのメモを保存する必要があります。

「バージョン1のリリース」という名前のリビジョン712(つまり、r712からタグディレクトリへのコピー)からタグを作成するほうがはるかに簡単です。そして誰もがこれがリリースであることをすぐに知っています。最初にバージョン1のリリースがどのリビジョンであるかを調べる必要はありません。

+0

ああ、一般的に、あなたのリリースのドキュメント、またはソース管理に格納されているファイルで作成することができます。私の問題は、タグの目的が幹や枝の目的とまったく同じではないという事実によります。 –

+2

あなたは正しいです。タグはトランクやブランチと同じではありません。そのため、タグはまったく存在しません。彼らはトランクや支店とは異なる目的のためです。 –

6

ちょっとメモを修正する712はバージョン1のリリースでした。 712 revは、ノートを作るタグあるを作る私に

は、ちょうどによって、など、構築し、マイルストーン、リリースのすべてを見ることも非常に簡単であるバージョン1

ましたTagsフォルダを見てください。

ラベルがVSSでどのように機能するかを検討すると、タグははるかに高速で作業が簡単ですが、同じことを達成します。ブランチのようにコピーコマンドを使用して作成されたという事実を分析してはいけません。

編集:タグフォルダへの変更をコミットしている他の人に妄想がある場合は、ユーザーがそれを防ぐためにプリコミットフックを使用できます。

+0

しかし、SVNの実装はあなたがそれを変更できるようになっています。最高で奇妙なことに最悪の場合、それを得ない人からのトラブルを尋ねる –

+1

ソース管理を「取得」することは、それを正しく使用するための第一歩です。あなたがそれを手に入れなければ、タグはおそらくあなたの懸念事項の中で最小です。 – crashmstr

+0

それは本当にポイントの横にある。あなたが間違った使い方をするような仕組みで動作する仕組みを提供するのはなぜですか? –

0

私の経験では、タグはリリースマーカーに使用されています。

"release2-0"ブランチを作成してから変更を加える必要がある場合(たとえば、起動後に発見されたバグを修正するため)、バージョン2.0でリリースしたものを表すことはできません。

代わりに "release2-0"タグを作成して、そのバージョンにパッチを当てる必要がある場合は、新しいブランチを作成し、そこに修正を加え、 "release-2-0-1"とタグ付けすることができます。

この方法で、どのリリースにも簡単にアクセスできます。

2

subversionリポジトリは、ファイルとフォルダの単一のツリーで、履歴の任意のバージョンでそのツリーの任意の部分をいつでも取得できます。

タグ/ブランチ/トランクはすべてその上にある慣例であるため、サブバージョンではツリーの一部を他の場所に(ほとんど)自由にコピーすることができますが、コアにはそれがあります。

お使いのバージョンのメンテナンスブランチが必要です。このタグは、外部のどこかで送られた特定のバージョンのあなたの名前として機能し、タグを作成するときのコミットコメントは、どこに行ったのか説明する機会を与えます(「パブリックベータリリース」、「コメントの要求」など)。

タグに変更を加えないフックスクリプトがいくつかありますが、一部の人が完全に異なる方法でサブバージョンを使用しているため、デフォルトでは実装されません(設定ファイルのバックアップなど)。 Subversionは一般的なツールであり、一般的な状況のための強力な慣習にすぎず、それを使用する「正しい」方法はありません。

実際、collabnetは改訂管理がnon-developmentprojectsのためにどのように使用されているかを検討し始めています。タグトランクとブランチの全体的なアイデアは、これらの一部では無関係かもしれません。

マイ大会ソースコードリポジトリについて考えです:

  • トランク - グループAの仕事/バグの外部説明 -
  • タスクを生きるために解放されてもよいリビジョンの完全なリストリリースのトランクからリビジョンを収集するための場所
  • タグ - まだトランク
  • メンテナンスブランチのための準備ができていないリビジョンのセット - リビジョン
  • 開発ブランチのセット - メンテナンスブランチ

タグの名前のスナップショットはまた例えば、あなたの文書のために使用可能なURLを与えることができます:

それができる 「のリリースがhttp://svnserver/myproject/tags/1.0で提供されています」: 「のリリースが利用可能ですhttp://svnserver/myproject/[email protected] "

しかし、あなたがリポジトリをブラウズしているときは、@ 4483に出くわすことは決してありません。

+0

本当に私はこの議論を理解しています。タグは、コミットメッセージなどに置かれた特別なタグのような、別個のメカニズムが必要な不変のラベルとして使用されるため、 –

関連する問題