SVN、ブランチを使用する方法?鬼ごっこ?トランク?


163

私は少しぐるぐる回っていましたが、「コマンドの使用方法」という意味ではなく、SVNへの適切な「初心者向け」ガイドを見つけることができませんでした。ソースコードをどのように制御しますか?

クリアしたいのは、次のトピックです。

  • どのくらいの頻度でコミットしますか?多くの場合、1を押すしまうほどのCtrl+をs
  • ブランチとタグ、およびそれらをどのように制御するか。
  • SVNには何が入りますか?ソースコードのみ、または他のファイルもここで共有しますか?(バージョン管理されたファイルとは見なされません..)

私はブランチとタグが何であるかわからないので、目的はわかりませんが、大雑把に言えば、トランクにアイテムをアップロードし、メジャービルドを実行するときに、ブランチに移動しますか?では、この場合のメジャービルドとは何ですか?


コミットの「頻度」を判断する良い方法は、マージの観点から考えることです。変更をトランクからにマージする必要があるブランチがある場合、わずかなリビジョンと1000のリビジョンを選択することで、すぐに賢明なアプローチが得られます。
Phil Cooper

回答:



86

ここにSubversionを実装するようになったときも、同じ質問をしました。4〜6のプロジェクトにまたがる約20人の開発者がいます。「答え」の良い情報源は見つかりませんでした。ここでは、過去3年間に私たちの回答がどのように発展したかをいくつか示します。

-必要なだけコミットしてください。私たちの経験則は、変更が失われた場合に再実行する必要があるという問題になるほど十分な作業を行った場合は必ずコミットすることです。15分ごとにコミットすることもあれば、数日かかることもあります(そうです、1行のコードを書くのに1日かかることがあります)

-以前の回答の1つとして提案されているように、さまざまな開発パスにブランチを使用します。現在、私たちのプログラムの1つには、3つのアクティブなブランチがあります。1つはメイン開発用、1つはプログラムを並列化する未完成の作業用、もう1つはXML入力および出力ファイルを使用するように改訂する作業用です。

-本番へのリリースを識別するためにタグを使用する必要があるとは思いますが、タグはほとんど使用しません。

単一の道に沿って進んでいる開発を考えてください。ある時点または開発の状態で、マーケティングが製品の最初のバージョンをリリースすることを決定したため、「1」(または「1.0」またはあなたが持っているもの)というラベルの付いたパスにフラグを設定します。別のときに、明るいきらめきがプログラムを並列化することを決定しますが、それには数週間かかり、その間人々は主な道を進み続けたいと決定します。したがって、パスにフォークを作成し、さまざまな人々がさまざまなフォークを歩き回ります。

道路の旗は「タグ」と呼ばれ、道路の分岐点は「分岐」が分かれています。時折、枝が一緒に戻ってくることもあります。

-実行可能ファイル(またはシステム)を構築するために必要なすべての資料をリポジトリに入れます。つまり、少なくともソースコードとメイクファイル(またはVisual Studioのプロジェクトファイル)です。しかし、アイコンや設定ファイル、その他すべてのものがある場合、それはリポジトリに入ります。いくつかのドキュメントはリポジトリへの道を見つけます。プログラムに不可欠なヘルプファイルなどのドキュメントは確かにあり、開発者向けドキュメントを置くのに便利です。

ソフトウェアを探している人々に単一の場所を提供するために、製品リリースのWindows実行可能ファイルをそこに置くことさえします-私たちのLinuxリリースはサーバーに行くので、保存する必要はありません。

-リポジトリが常にビルドして実行する最新バージョンを提供できる必要はありません。そのように機能するプロジェクトもあれば、機能しないプロジェクトもあります。決定はプロジェクトマネージャー次第であり、多くの要因に依存しますが、プログラムに大きな変更を加えると失敗するでしょう。


18
* How often do you commit? As often as one would press ctrl + s?

できるだけ頻繁に。ソース管理下にない限り、コードは存在しません:)

頻繁なコミット(その後の変更セットが小さい)により、変更を簡単に統合し、何かを壊さない可能性を高めることができます。

他の人々は、機能的なコードがある場合はコミットする必要があると述べましたが、少し頻繁にコミットする方が便利だと思います。ソース管理をすばやく元に戻す/やり直しのメカニズムとして使用していることに気づいたことはほとんどありません。

私が自分のブランチで作業するときは、可能な限りコミットすることを好みます(文字通り、ctrl + sを押すのと同じくらい頻繁に)。

* What is a Branch and what is a Tag and how do you control them?

SVNの本を読んでください-これは、SVNを学ぶときに始める必要がある場所です。

* What goes into the SVN?

ドキュメント、ビルドに必要な小さなバイナリ、およびその他の価値のあるものはソース管理に送られます。


11

コミット頻度、コミットメッセージ、プロジェクト構造、ソース管理下に置くもの、およびその他の一般的なガイドラインに関するいくつかのリソースを次に示します。

これらのスタックオーバーフローの質問には、興味深いかもしれないいくつかの有用な情報も含まれています。

分岐やタグ付けなどのSubversionの基本的な概念については、Subversionブックで非常によく説明されいると思います。

この主題についてもう少し読んだ後で気づくかもしれませんが、この分野でのベストプラクティスについての人々の意見は、多くの場合、さまざまで、時には矛盾しています。あなたにとって最良の選択肢は、他の人が何をしているかを読んで、あなたにとって最も理にかなっていると思うガイドラインと実践を選ぶことだと思います。

目的を理解していない場合や、その背後にある理論的根拠に同意しない場合は、実践を採用することは良い考えではないと思います。ですから、盲目的にアドバイスに従うのではなく、自分にとって最も効果的だと思うことを自分で決めてください。また、さまざまな方法で実験することは、自分がどのように仕事をしたいかを学び、見つけるための良い方法です。この良い例は、リポジトリの構造です。正しい方法や間違った方法はありません。実際に実際に試してみるまで、どちらの方法を選ぶかを判断するのは困難です。


8

コミットの頻度は、プロジェクト管理のスタイルによって異なります。多くの人は、ビルド(または機能)が壊れる場合はコミットを控えます。

ブランチは、通常、次の2つの方法のいずれかで使用できます。1)開発用の1つのアクティブブランチ(およびトランクは安定したまま)、または2)代替の開発パス用のブランチ。

タグは一般的にリリースを識別するために使用されるため、それらが混在して失われることはありません。「リリース」の定義はあなた次第です。


同意:ビルドを壊さない限りコミットしてください!
ブランドンモンゴメリー

7

主な問題は、ソース管理の精神的な画像が混乱していることだと思います。私たちは通常トランクとブランチを持っていますが、タグ/リリースまたはそれに影響する何かの無関係なアイデアを得ます。

あなたが木の概念をより完全に使うならば、それはより明確になります、少なくとも私にとってはそうです。

幹->枝->果物(タグ/リリース)を生成します。

トランクからプロジェクトを成長させ、トランクがブランチを保持するのに十分安定したらブランチを作成するという考えです。次に、枝が果物を作ったら、枝からそれを摘み取り、タグとしてリリースします。

タグは基本的に成果物です。幹と枝がそれらを生成するのに対して、


4

他の人が言ったように、SVN Bookは開始するのに最適な場所であり、海の足を手に入れたらすぐに参照できます。さて、あなたの質問に...

どのくらいの頻度でコミットしますか?Ctrl + Sキーを押す頻度はどれくらいですか?

多くの場合、Ctrl + Sキーを押すほどではありません。それは個人の好みやチームの方針の問題です。個人的には、機能的なコードを完成させたときにコミットと言いますが、どんなに小さくてもかまいません。

ブランチとタグ、およびそれらをどのように制御するか。

まず、トランクはあなたが積極的に開発を行う場所です。それはあなたのコードのメインラインです。分岐はメインラインからの逸脱です。これは、以前のリリースのように大きな逸脱である場合もあれば、試してみたい小さな変更である場合もあります。タグはコードのスナップショットです。これは、特定のリビジョンにラベルまたはブックマークを添付する方法です。

また、subversionでは、トランク、ブランチ、タグは慣例にすぎないことにも言及する価値があります。タグで作業したり、メインラインであるブランチを作成したり、タグブランチトランクスキームをすべて無視したりすることを妨げるものは何もありません。しかし、非常に正当な理由がない限り、慣習を守ることをお勧めします。

SVNには何が入りますか?ソースコードのみ、または他のファイルもここで共有しますか?

また、個人またはチームの選択。ビルドに関連するものはすべてリポジトリに保存することを好みます。これには、構成ファイル、ビルドスクリプト、関連メディアファイル、ドキュメントなどが含まれます。各開発者のマシンで異なる必要があるファイルをチェックインしないでください。また、コードの副産物をチェックインする必要もありません。主にビルド​​フォルダーやオブジェクトファイルなどを考えています。


多くの場合、Ctrl + Sキーを押すほどではありません。同意した。効果を確認するには、おそらく変更を保存する必要があります。私はおそらくそれを10回実行し、少しずつコードを作成してから、コミットできるものを作り、何をしたかについて有意義なコメントを付けます。別の言い方をすれば、コメントに「この機能を追加した」または「そのバグを修正した」と述べ、「数行であちこち見て、これがどのように機能するかわからない」とは言いません。ですから、私は1日に5ダースほどコミットします。
Nathan Long


4

別の回答セットを追加するだけです。

  • 作品を完成させるたびにコミットします。場合によっては、1行だけを変更し、実行に2分かかった小さなバグ修正である場合があります。また、2週間分の汗をかくこともあります。また、経験則として、ビルドを壊すものは一切コミットしません。したがって、何かをするのに長い時間がかかった場合は、コミットする前に最新バージョンを取得し、変更がビルドを壊すかどうかを確認してください。もちろん、コミットせずに長時間行くと、その仕事を失いたくないので不安になります。TFSでは、この素晴らしいものを「シェルフセット」として使用します。SVNでは別の方法で回避する必要があります。おそらく、独自のブランチを作成するか、これらのファイルを手動で別のマシンにバックアップしてください。
  • ブランチはプロジェクト全体のコピーです。それらの使用に最適なイラストは、おそらく製品のバージョン管理です。大規模なプロジェクト(たとえば、Linuxカーネル)で作業しているとします。何ヶ月も汗を流した後、ついにバージョン1.0に到達し、一般にリリースします。その後、製品のバージョン2.0の作業を開始します。しかし一方で、バージョン1.0を使用している人もたくさんいます。そして、これらの人々はあなたが修正しなければならないバグを見つけます。今、あなたは次の2.0バージョンのバグを修正してそれをクライアントに出荷することはできません-それは全く準備ができていません。代わりに、1.0ソースの古いコピーを引き出し、そこでバグを修正して、それを人々に出荷する必要があります。これがブランチの目的です。あなたがリリースしたとき1。0バージョンSVNでブランチを作成し、その時点でソースコードのコピーを作成しました。このブランチは「1.0」と名付けられました。その後、メインソースコピーの次のバージョンの作業を続けましたが、1.0のコピーはリリース時の状態のままでした。そして、そこでバグを修正し続けることができます。タグは、使いやすさのために特定のリビジョンに付けられた単なる名前です。「ソースコードのリビジョン2342」と言うこともできますが、「最初の安定版」と呼ぶ方が簡単です。:)
  • 私は通常、プログラミングに直接関係するすべてをソース管理に入れます。たとえば、私はウェブページを作成しているので、画像やCSSファイルもソース管理に配置します。構成ファイルなどは言うまでもありません。プロジェクトのドキュメントはそこにはありませんが、実際には好みの問題です。

3

他の人はそれはあなたのスタイルに依存すると述べています。

あなたにとっての大きな問題は、ソフトウェアを「統合」する頻度です。テスト駆動開発、アジャイルとスクラム(および他の多く)は、小さな変更と継続的な統合に依存しています。彼らは小さな変更が行われ、誰もが休憩を見つけて常に修正していると説得しています。

ただし、より大きなプロジェクト(政府、国防、100k + LOCなど)では、継続的インテグレーションは不可能であるため、使用できません。これらの状況では、分岐を使用して多くの小さなコミットを実行し、何が機能し、ビルドに統合する準備ができているかのみをトランクに戻す方がよい場合があります。

ただし、ブランチの注意点の1つは、それらが適切に管理されていない場合、誰もがトランクのさまざまな場所から開発しているため、トランクに作業を取り込むことはリポジトリで悪夢になる可能性があるということです(偶然にも最大の引数の1つです)。継続的インテグレーション)。

この質問に対する明確な答えはありません。最善の方法は、チームと協力して最高の妥協ソリューションを考案することです。



1

コミットには、次の戦略を使用します。

  • できるだけ頻繁にコミットします。

  • 各機能変更/バグ修正は、独自のコミットを取得する必要があります(一度に多くのファイルをコミットしないでください。これにより、そのファイルの履歴が不明確になります。たとえば、ログモジュールとGUIモジュールを個別に変更し、両方を一度にコミットした場合、両方の変更が両方のファイル履歴に表示されます。これにより、ファイル履歴の読み取りが難しくなります)、

  • コミット時にビルドを中断しないでください。リポジトリの任意のバージョンを取得してビルドできるはずです。

アプリのビルドと実行に必要なすべてのファイルは、SVNにある必要があります。単体テストの一部でない限り、テストファイルなどは使用しないでください。


ルール1と3は多少矛盾しています。ただし、主要な開発が機能ブランチで行われる場合、ルール#3はブランチが過剰になる小さな変更に対して「トランクを壊さない」である可能性があります。
Chris Charabaruk、2009年

1

ここにはたくさんの良いコメントがありますが、言及されていないのはコミットメッセージです。これらは必須で意味のあるものでなければなりません。特に分岐/マージで。これにより、どのバグ機能にどのような変更が関連しているかを追跡できます。

たとえば、svn commit . -m 'bug #201 fixed y2k bug in code'は、履歴を見た人にそのリビジョンの目的を伝えます。

一部のバグ追跡システム(例:trac)は、これらのメッセージのリポジトリを調べて、チケットに関連付けることができます。これにより、どの変更が各チケットに関連付けられているかを簡単に把握できます。


1

私たちの仕事のポリシーは次のようになります(オブジェクト指向フレームワークに取り組んでいるマルチ開発者チーム):

  • SVNから毎日更新して前日の変更を取得する

  • 毎日コミットするので、あなたが病気または翌日欠席した場合、誰かがあなたが中断したところから簡単に引き継ぐことができます。

  • 他の開発者に影響を与えるので、何かを壊すコードをコミットしないでください。

  • 小さなチャンクで作業し、意味のあるコメントで毎日コミットしてください!

  • チームとして:開発ブランチを保持してから、プレリリースコード(QA用)を本番ブランチに移動します。このブランチには、完全に機能するコードのみが含まれている必要があります。



0

コミット頻度には2つの方法があると思います。

  1. 実装された各メソッド、コードの一部などについて、非常に頻繁にコミットします。
  2. モジュールなど、コードの完成した部分のみをコミットします。

ソース管理システムを使用することは、プロジェクトや会社だけでなく、開発者にとっても第一に役立つので、私は最初のものを好みます。私にとって最良の機能は、割り当てられた最良のタスク実装を検索しながらすべてのコードをロールバックすることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.