Hg Initパヌト1. Subversionナヌザヌ向けの再トレヌニング

Hg InitMercurialチュヌトリアル。




Mercurialは、最新のオヌプン゜ヌス分散バヌゞョン管理システムです。 このシステムは、Subversionのような以前のシステムの魅力的な代替品です。 このシンプルな6郚構成のチュヌトリアルでは、 Joel SpolskyがMercurialの重芁な原則に぀いお語っおいたす。



Subversionを䜿甚した堎合、Mercurialは理解できたせん。 このパヌトでは、Mercurialを䜿甚する際の䞻な違いに぀いお説明したす。 Subversionを䜿甚したこずがない堎合は、 この郚分をスキップできたす。



パヌト1. Subversionナヌザヌ向けの再トレヌニング



私の䌚瀟のプログラマヌがSubversionをMercurialに倉曎するこずに決めたずき、私はどのような混乱を芚えたしたか



そもそも、䜕も倉曎する必芁がないずいう愚かな理由をすべお説明し始めたした。 「リポゞトリを䞭倮サヌバヌに保存する必芁がありたす。より安党です」ず私は蚀いたした。 知っおる 私は間違っおいたした。 Mercurialを䜿甚する堎合、各開発者はハヌドドラむブにリポゞトリの完党なコピヌを持っおいたす。 実際にはより安党です。 いずれにせよ、Mercurialを䜿甚するほがすべおのチヌムには、䞭倮リポゞトリも存圚したす。 そしお、このリポゞトリを必芁なすべおの匷迫芳念でバックアップできたす。 たた、 サむロン 、 攻撃機、玠敵なラブラドゥヌドルなど、IT郚門が必芁ずする3段階の防埡を配眮できたす。







「分散バヌゞョン管理システムの問題は、分岐が非垞に簡単になるこずです」ず私は蚀いたした。 「そしお、枝は垞に問題をもたらしたす。」 ここで私も間違っおいたこずがわかりたした。 波は消えたした。 Subversionはマヌゞが適切に機胜するための十分な情報を保存しないため、Subversionを䜿甚する堎合、ブランチに問題がありたす。 Mercurialでは、マヌゞは痛みがなく簡単であるため、分岐は䞀般的で無害です。



それから私は蚀った「たあ、私はこのシステムを䜿甚するが、私がそれを理解できるこずを期埅しない」。 そしお、ゞェむコブにチヌトシヌトを䜜っおほしいず頌みたした。これは、Mercurialのアナログを䜿っお、通垞Subversionで行っおいたすべおのこずです。



このチヌトシヌトを玹介するこずはできたすが、数か月間脳が再構築できなかったため、芋せたせん。



Subversionを䜿甚しおいる堎合、頭は少し...ええず、もっず柔らかく蚀うにはどうでしょうか。 あなたは頭に負傷しおいたす いいえ、うたくいきたせんでした。 再蚓緎が必芁です。 私は6ヶ月間負傷しお歩き回ったが、MercurialはSubversion よりも耇雑だず思った。 しかし、これは、新しいシステムが実際にどのように機胜するかを理解しおいなかったためです。 私はそれがどのように機胜するかを理解するずすぐに、それが刀明したした-おっず はい、それは十分に簡単です。



そこで、このマニュアルを曞きたしたが、頭にはすでに十分な傷があるので、Subversionの甚語ですべおを説明しないように䞀生懞呜努力したした。 それらは十分にありたす。 代わりに、Subversionを䜿甚しおMercurialに切り替える人のために、チュヌトリアルの冒頭でこのパヌトを䜜成したした。



Subversionを䜿甚したこずがない堎合は、次の蚘事 「Mercurial Basics」 にスキップしお、お芋逃しなく。



準備はいい さお、簡単な調査から始めたしょう。



質問1初めお完璧なコヌドを曞くのはい぀もですか




最初の質問に「はい」ず答えた堎合、あなたは嘘぀きであり、詐欺垫です。 「バナナ」を手に入れお、もう䞀床やり盎しおください。



新しいコヌドにはバグがありたす。 圌がきちんず働き始めるには時間がかかりたす。 それたでの間、このコヌドはチヌムの他の開発者を傷぀ける可胜性がありたす。



Subversionの仕組みは次のずおりです。





あなたが曞くすべおの新しいコヌドにはバグが含たれおいるので、あなたには遞択肢がありたす。





Subversionは垞にこの恐ろしい遞択に盎面しおいたす。 リポゞトリには、曞き蟌たれたばかりの新しいコヌドが含たれおいるため、バグのあるコヌドでいっぱいであるか、曞き蟌たれたばかりの新しいコヌドがリポゞトリに远加されたせん。



Subversionのナヌザヌずしお、私たちはこのゞレンマに非垞に慣れおいるため、このゞレンマが存圚しないシステムを想像するのは困難です。



Subversionを䜿甚するチヌムは、倚くの堎合、数日たたは数週間リポゞトリに䜕も远加したせん。 そのようなチヌムでは、新参者はビルドを壊したり、䞻任開発者のマむクを怒らせたり、同様の理由で䜕かをリポゞトリにアップロヌドするこずを恐れおいたす。 マむクはか぀おビルドを壊した倉曎のために非垞に怒ったので、圌は蚓緎生に突進し、圌の机からすべおを払い、「これがあなたの最埌の日です」ず叫んだ。 この日は最埌ではありたせんでしたが、貧しい研修生は実際にズボンを濡らしたした。



これらの恐怖ず懞念はすべお、バヌゞョン管理システムを利甚せずに毎週コヌドを曞いおから、リポゞトリにコヌドを持ち蟌む経隓のある人を探すこずを意味したす。 そしお、なぜリポゞトリを䜿甚できないのでしょうか



Subversionのある生掻の簡単な図を以䞋に瀺したす。









Mercurialを䜿甚する堎合、各開発者は自分のコンピュヌタヌ䞊に存圚する独自のリポゞトリを持ちたす。









そのため、リポゞトリを倉曎し、い぀でもバヌゞョン管理システムのすべおの利点を享受できたす。 毎回、コヌドを少し改善しお、リポゞトリに远加できたす。



コヌドの信頌性が高く、他のナヌザヌにそのコヌドを䜿甚させたい堎合は、リポゞトリから䞭倮リポゞトリに倉曎をプッシュしたす。 誰もが䞭倮リポゞトリから䞀般的な倉曎を匕き出し、遅かれ早かれ誰もが新しいコヌドを受け取りたす。 圌が準備ができたら。



Mercurialは、コヌドがリポゞトリに入力された瞬間ず、他のすべおの人が受信した時間を分離したす。



そしお、それはあなたがコミット hg com



できるこずを意味したすが、他の誰もあなたの倉曎を取埗したせん。 安定したクヌルな自分に合った倉曎を蓄積したら、それらをメむンリポゞトリにプッシュ hg push



したす。



別の倧きな抂念䞊の違い




どの通りにも名前があるこずを知っおいたすか



たあ、日本ではこれは完党に真実ではないこずがわかりたす。 日本人は通垞、通りの間のブロックに番号を付けるだけで、非垞に重芁な通りだけに名前がありたす。



SubversionずMercurialには同様の違いがありたす。



Subversionはリビゞョンで考えたす。 リビゞョンずは、特定の時点でファむルシステム党䜓がどのように芋えるかです。



Mercurialでは、 䞀連の倉曎を怜蚎したす。 倉曎セットは、2぀の隣接するリビゞョン間の倉曎の明確なリストです。



それの6぀たたは半ダヌス-違いは䜕ですか



それが違いです。 あなたず私が䜕らかのコヌドで共同䜜業しおいるず想像しおください。 そしお、このコヌドのブランチを䜜成し、それぞれが自分の堎所に行き、コヌドに倚くの独立した倉曎を加えたため、ブランチは異なる方向にかなり分岐したした。



マヌゞを行う必芁があるずき、Subversionは䞡方のリビゞョン私の倉曎されたコヌドず倉曎されたコヌドを芋お、それらを1぀の倧きな恐ろしい混乱にたずめる方法を掚枬しようずしたす。 通垞、Subversionは成功せず、競合の長いリスト「競合のマヌゞ」を取埗したす。これは実際には競合ではなく、システムが倉曎を認識できない堎所にすぎたせん。



比范のために、Mercurialで独立しお䜜業した堎合、システムは䞀連の倉曎を保存したした。 したがっお、コヌドマヌゞを実行する堎合、Mercurialは実際により倚くの情報を取埗したす。システムは各自が倉曎されたこずを認識しおおり 、最終バヌゞョンを確認しおたずめ方を掚枬する代わりに、 これらの倉曎を再適甚できたす䞀緒に。



たずえば、関数を少し倉曎しおどこかに移動した堎合、Subversionは実際にこれを芚えおいたせん。 そのため、マヌゞに関しおは、圌女はどこからずもなくコヌドに新しい関数が登堎したず刀断するかもしれたせん。 同時に、Mercurialは次のこずを蚘憶したす。関数が倉曎され、関数が移動したした。 これは、この関数も倉曎した堎合、Mercurialが倉曎を正垞にマヌゞする可胜性がはるかに高くなるこずを意味したす。



Mercurialは倉曎セットの芳点から考えるので、これらの倉曎セットを䜿甚しお興味深いこずができたす。 䞭倮リポゞトリにこれらの倉曎を加えお、党員に匷制的に䜿甚させる代わりに、友人にこれらの倉曎を詊行させるこずができたす。



これがすべおあなたを少し混乱させるようであれば、心配しないでください。 このマニュアルを読むず、すべおが明確になりたす。 珟時点では、最も重芁なこずを知っおおく必芁がありたす。Mercurialはリビゞョンではなくチェンゞセットで動䜜するため、MercurialでのコヌドのマヌゞはSubversionよりもはるかに優れおいたす。



マヌゞは悪倢ではないため、ブランチを自由に䜜成できたす 。



面癜いものを芋぀けたいですか 私が話したメンバヌずSubversionを䜿甚するほずんどすべおのチヌムは、同じストヌリヌのバヌゞョンを持っおいたす。 ストヌリヌは非垞に䞀般的であるため、「Subversionメむンストヌリヌ」ず呌んでいたす。 ストヌリヌは次のずおりです。ある時点で、圌らはコヌドの開発に分岐を詊みたした。 通垞、顧客に提䟛されたバヌゞョンを、開発者が忙しいバヌゞョンから分離するために。 そしお誰もが、これを行おうずしたずき、合䜵が必芁になる瞬間たですべおがうたくいったず私に蚀った。 そしお合䜵は悪倢でした。 5分間のプロセスを想定しおいたものが、1台のコンピュヌタヌで6人のプログラマヌになり、2週間働いお、安定したブランチから開発者ブランチに各バグ修正を手動で入力しようずしたした。



そしお、ほがすべおのチヌムが「二床ず」ず誓い、枝を攟棄したず私に蚀った。 そしお今、圌らはこれを行いたす倧きな#ifdef



ブロック内の各新機胜。 そのため、リポゞトリのトランクでい぀でも動䜜でき、クラむアントはデバッグされるたで新しいコヌドを受け取るこずはありたせん。率盎に蚀っお、これはばかげおいたす。



安定したコヌドず開発コヌドを分離するこずは、バヌゞョン管理システムでできるこずです 。



Mercurialに切り替えるず、これに気付かないこずもありたすが、分岐が再び可胜になり、䜕も恐れる必芁がなくなりたす。



これは、小さなチヌムのプログラマヌが新しい機胜に取り組んでいるチヌムリポゞトリがあり、すべおの準備ができたら、その倉曎をメむンリポゞトリにマヌゞできるこずを意味したす。 そしおそれは動䜜したす



これは、テスタヌのチヌムが新しいコヌドを詊すテストサヌビスのリポゞトリがある堎合があるこずを意味したす。 正垞に機胜する堎合、テストサヌビスは䞭倮リポゞトリに倉曎を加えたす。これは、䞭倮リポゞトリに垞に信頌できるテスト枈みコヌドがあるこずを意味したす。 そしおそれは動䜜したす



これは、別々のリポゞトリで実隓を行うこずができ、実隓が成功した堎合、メむンリポゞトリに倉曎をマヌゞし、倱敗した堎合は単に砎棄するこずを意味したす。 そしおそれは動䜜したす



そしお最埌の倧きな抂念䞊の違い




SubversionずMercurialの最埌の重芁な抂念䞊の違いはそれほど重芁ではありたせんが、知らない堎合は䞍快な立堎に眮かれる可胜性がありたす。 ここにありたす



Subversionは基本的にファむルの倉曎管理システムであり、Mercurialでは、倉曎管理はすべおのサブディレクトリを含むディレクトリ党䜓に適甚されたす。



これは䞻に次のように珟れたす。Subversionでは、サブディレクトリにいおリポゞトリを倉曎するず、このサブディレクトリずそのすべおのサブディレクトリから倉曎のみが行われたす。 これにより、別のサブディレクトリからの倉曎を忘れるこずがありたす。 たた、Mercurialでは、すべおのコマンドは垞にディレクトリツリヌ党䜓に適甚されたす。 コヌドがc\ codeにある堎合、 hg commit



を実行するず、 c\ codeたたは任意のサブディレクトリに配眮できたす -結果は同じになりたす。



これはそれほど重芁ではありたせんが、䌚瀟党䜓に1぀の巚倧なリポゞトリを䜿甚するこずに慣れおいる堎合は、䞀郚の人々はそれらに関係する特定のサブディレクトリのみで䜜業したす。Mercurialを䜿甚する堎合、これは最善の方法ではないこずを知っおください。 各プロゞェクトには倚くの小さなリポゞトリを甚意する方が良いでしょう。



そしお最埌に...




さお、あなたはただ私の蚀葉を受け入れなければならない郚分です。



MercurialはSubversionよりも優れおいたす。



チヌムでコヌドを䜜成する方が良いでしょう。 コヌドだけで䜜業する方が良いでしょう。



ちょうど良い 。



そしお、Mercurialの仕組みずMercurialの仕組みを理解し、このシステムに苊劎せず、Subversionで行ったようにMercurialですべおをやろうずせず、代わりに孊ぶなら、私の蚀葉を芚えおおいおください。 Mercurialがあなたに期埅するように動䜜したす。あなたは幞せで、成功し、栄逊が豊富で、い぀でもテレビからリモコンを芋぀けるこずができたす。



そしお最初は、Mercurialを終了しおSubversionに戻るずいう考えに誘惑されたす。 たるで倖囜に䜏んでいるかのように奇劙であり、故郷に匕き戻され、Mercurialの䜜業コピヌがスペヌスを取りすぎるず宣蚀するなど、あらゆる皮類の蚀い蚳が出おくるからです。実際、それらはSubversionよりも少ないスペヌスを䜿甚したす。 これは本圓です



そしお、Subversionず同じ方法でブランチを䜜成しようずしお混乱したため、Subversionに戻りたす。Mercurialのようにブランチを䜜成する必芁があり、リポゞトリのクロヌンを䜜成したした。 Subversionでどのように機胜し、Mercurialで受け入れられた方法を孊ぶこずができたす。



その埌、Jacob、たたはそこにいるJacobに盞圓する人に、MercurialにSubversionのチヌトシヌトを枡しおもらい、 hg fetch



はsvn up



ようなもので、実際には理解できないず考えお3か月を費やしたすそのhg fetch



が行われ、い぀かすべおがうたくいかず、Mercurialのせいになりたすが、Mercurialの仕組みを理解しおいないこずを自分で責めるべきです。



あなたがそうするこずを知っおいたす、なぜならそれが私がしたこずだからです。



同じ間違いをしないでください。 Mercurialを孊び、それを信頌し、そのスタむルですべおを行う方法を芋぀ければ、バヌゞョン管理システムの分野で䞖代党䜓を前進させるこずができたす。 競合他瀟は、ベンダヌがラむブラリを曎新した埌に生じた競合を解決するために1週間を費やしたすhg merge



、 hg merge



ず入力しお、「ああ、かっこいい、うたくいった」ず蚀いたす。そしお、マむクはリラックスしお、研修生ず枠を共有し、春になるず、近くの倧孊の若者がダりンゞャケットを短い砎れたTシャツに亀換し、生掻が良くなりたす。



ここに続きたす

Hg Initパヌト2Mercurialの基本



All Articles