近年、Gitをめぐる誇大宣伝が大幅に高まりました。誰もがGitについて知っていますが、代替案については誰も知りません。
Mercurialのような他のものは見過ごされているようです。どちらも2005年にリリースされ、同様の機能を提供します。さらに、Mercurialは一般的に使いやすく、直感的で、長い間UIが優れていたと考えられています。したがって、これは、特に分散バージョン管理の初心者にとっては、一般的な代替手段になると想定できます。しかし、かなり成功したGitとは異なり、ほとんどの人にとっては不明なようです。
この投稿の目的は、この現象をよりよく理解しようとすることです。
Gitがケーキのすべての部分を取得するのはなぜですか?彼らはどういうわけかより良いマーケティングを使用しましたか?それは、そのコミュニティがより多くの... ahem ... "verbose"であるためですか? 「ライナス」の名前のせいですか?オタクっぽいイメージのせい?
あなたの意見は何ですか?
私はこれに対する多くの答えが、どちらか一方のSCMについて聞いたときに著者が持っていた感情に依存していると思います。他の人はそれがすべて運が良かったと言います。運は歴史にさかのぼることができると思います。
歴史についてお話します。
GitとMercurialは、同じ問題を解決するために同時に作成されました。当時、LinuxカーネルはBitKeeperの使用を強制的に停止されていました。これは、3年間使用していた独自の分散SCMです。その理由は、BitKeeperの背後にある会社であるBitMoverのCEOであるLarry McVoyが、Linuxコミュニティ内の誰かがリバースエンジニアリングを行ったため、無料でLinux開発者にソフトウェアを提供することをやめたからです。
Linus Torvaldsは、すでに存在しているものに不満を抱いていたため、まもなくGitと呼ばれる新しいSCMに取り組み始めました。その後すぐに、Matt Mackallは同様の理由でMercurialプロジェクトを開始しました。
これらのプロジェクトを個別に開発してしばらく経った後、Matt MackallはSCMの高度なバージョンを発表し、Git(それ自体はほんの数週間前のバージョン)と比較して、一定の方法でベンチマークしました。 Linusはカーネル開発のためにGitの代わりにそれを使用することを検討しましたが、 Mercurialが変更セットをログに記録するためにチェンジセットを使用していた であることに気付いたとき、その考えを捨てました彼は、それがBitKeeperの動作に近すぎることを恐れており、誰かに「BitKeeperクローンを作成した」と言わせるようなことは望んでいませんでした。
したがって、GercurはMercurialではなくカーネル開発に使用されましたが、どちらも技術的に適切でした。最終的には、Gitは実際に使用されるように設計された場所で使用されることから始まりましたが、Mercurialは最初の大きなFOSSの使用を見つけるのにそれほど速くありませんでした。非常に優れたデザインに恵まれており、マットマッカルの忍耐のおかげで、最終的には有名になり、実際の大規模なプロジェクトに使用されるようになりました。
今日、彼らは両方とも有名です。どれが最も有名かは言えません。 Google Codeは最近、Gitのみを統合しましたが、Mercurialは長い間ありました。多くの本当に大きくて有名なプロジェクトがどちらかを使用しています。
あなたがプロジェクトを始めたまさにその理由が消えるとき、私が意味することは私が意味することを推測することは人気を得るのがより困難ですが、それでもまだ可能です。
Bazaarは、GNU=世界で非常に有名ですが、それ以外ではそれほど多くありません。 GNUコミュニティを満足させることを意図して構築されています。ソフトウェアは多くの場合、作成者が行きたいところに行き、それ以上は行きません。
一方、分散SCMは明らかに勝者です。広く使われている非分散型SCMはあまり見かけません。
Linus Torvalds
LinusはGitの大きな擁護者であり、何年もの間それをコアLinuxグループに大きく宣伝し、そこから成長しています。それはあえて、* nixコミュニティに対するLinusの影響によるものです。
個人的にはまだSubversionを使用していますが、それは実用性というよりは好みによるものです。
バージョン管理システムの通常の問題は、ブランチのマージです。
あなたはそれがしないときそれがどれほど苦痛であり得るか、そしてそれが機能することの重要性を理解するために機能しないときにそれを試す必要がありますブランチを自由に使っています。
Linus Torvaldsがこれを正しく行うためにgitを書いたこと、そしてある状況で彼がgitを使用してtwelveブランチを一度にマージしたことを知って、これはaですgitが興味深いものであるという非常に説得力のある議論。
私は約1年前にhgとgitのどちらかを選択しなければならない状況にあり、上記のマージはgitを選択する際の1つの重要な要素でした。 2つ目は、Eclipse組織がgitに切り替わったことで、EclipseツールはJavaプロジェクトに適していると期待されていました。Eclipse3.7のリリースでこれが起こりました。おそらく6〜9か月でした。この早い段階で。
さまざまなニーズに対して、hgも同様に役立ちます。 Sunはveryの慎重な調査に基づいてVCSにそれを選択しました。ホワイトペーパーを見つけて、その理由を確認することをお勧めします。
編集:注、私はMercurialができないことを言っているのではなく、Javaが私たちの主な焦点です-Windowsでも現在、市場勢力はgitに対して最も強力です、私たちは他の人の足ではなく肩に立つ必要があります。
なぜgitまたはMercurialの方が優れているのか、その唯一の理由が人気であるのではなく、コミュニティに焦点を当てます。
以前 強調表示したように 、Gitコミュニティは非常に騒々しく傲慢です。ほとんどの人は彼らの貴重なプログラムを精力的に守ります。私が見たGit対Mercurial戦争のほとんどは、地球上の誰もが聖なるgitを使用していないのかと疑問に思っているgitの人々によって開始されました。 whygitisbetterthanx.com のようなサイトは、序文にこの傲慢さを示しています。
誰もがそうであると言っているわけではありませんが、Gitの人々、Pro-GitのWebサイト、Pro-Gitのブログに出会ったときは、ほとんどの場合、Gitは実行可能なDVCSとして提供されるのではなく、喉に押し付けられているように感じましたシステム。
対照的に、他のDVCSコミュニティはそれほど騒々しくありません。 Mercurialが存在することを「最高のDVCSとは何か」を見るまで知りませんでした。 SOに関する質問。 Gitはどこにでも表示されますが、他のDVCSは見つけるのに時間がかかります。
Mercurialは特に目立たないと思います。 KilnはHgに基づいて構築されており、EclipseやNetbeansなどのIDEでしばらくサポートされています。
私が話すほとんどの開発者は、Windowsのサポートが優れているため、Hgを好むようです。私たちがLinux開発者であれば、それは別の話かもしれません。
また、本当の「忘れられたDVCS」である「Bazaar」もありません。
確かに、Linusは非常にカリスマ的な男であり、アルファオタクはほとんど同等ではないので、多くの人々がGitに引き寄せられることには同意します。また、Gitの「作成の神話」は、Ginを作成するために6日間労力を費やし、7日目に休む-またはそのようなもので、非常に説得力があります。製品に印象に残るストーリーがあると、注目を集めやすくなります。
控えめな意見ですが、2つのパラメーターがあるため、Gitはこれらすべての誇大広告を得る可能性があります。
さらに、gitにはgithubのようなキラーアプリがいくつかあり、非常に人気のあるいくつかのプロジェクトがそれを使用することにしました。
それは主に自己強化型の誇大広告です。 Gitは最も人気があるため、最も知名度が高くなり、Gitの人気が高まります。
Git、Hg、およびBzrはすべて完全に優れたDVCSシステムですが、恐ろしい数の人々がDVCSをGitと同等と見なしており、DVCSのすべての美しい機能はGitに固有のものであると考えています。そして、彼らはGitを使用し、Gitを推奨し、「タコのマージを実行できるため、Gitの方が良い」(Bazaarもできる)、または「Gitは分散されているので、より良い」(=anyDVCS、したがって名前)、または「Gitの方が分岐とマージが簡単になるので良い」(これもすべてのDVCSに当てはまります)。
悲しいことに、私は代替案も提供するものはたくさんあると感じており、単にDVCS == Gitだと思っているからというよりも、その独特の強みのために人々がGitを選択したいのです。
誰かが1つの特定のDVCSをポイントすることでDVCSがどれほど賢いかを発見したとき、彼らは多くの場合、「DVCSは素晴らしいです。使用する必要があります」ではなく、「DVCS[〜#〜] i [〜#〜]DVCSについて学んだことは素晴らしく、使用する必要があります。 ".
ここには、「ベータオタクメディア」、「今が正しい」、「リーダーに従う」の3つの要素があります。
「マニアックなアクティビティ」について話し合うチャンネルはたくさんあります。それらは確かに新しいバージョン管理システムの外観をカバーしますが、gitをさらにカバーします。どうして? Linus Torvaldsが最初にそれを書いたので、それについて公に議論し、それを彼のよく知られたビットキーパーに関する問題の解決策として使用しました。事実上、lkmlに炎上戦争が発生するたびに、ベータオタクメディアはそれに関する記事を書きます。 Gitのディスカッションはlkmlで始まったため、他の選択肢よりも多くの報道を得ました。そして、スラッシュドットをVarietyのように読むベータオタクはそれを食べました。その最終的な結果は、gitにはMercurialの10倍の数の記事があるということです。
多数の寄稿者がいる大きなオープンソースプロジェクトでは、一元的なソース管理に問題があります。オープンソースが成長し、プロジェクトに多くの貢献者がいる可能性が高くなるにつれて、問題はさらに悪化します。 Linuxはおそらくこれに苦しんでいる最もよく知られているプロジェクトですが、他にもたくさんあります。多くのプロジェクトがこの時点に達しているため、ある種の高度なVCSが必要でした。 Git、Mercurial、Bazaarがここで大きな勝者となりました。 ArchとMonotoneは少し早すぎたため、誇大広告の波を逃しました。
大きなプロジェクトには、たとえ貢献しなくても、定期的にコードをチェックアウトしてビルドするフォロワーがいます。フォロワーは、自分がフォローしているプロジェクトを取得するために必要なツールに慣れるので、それらのツールをさらに活用できます。大きな3つのDVCSの「ビッグドロー」プロジェクトを見てみましょう。
Gitにはそれを使用する「大作戦」プロジェクトが多く、したがって、より多くの人々がgitに精通しており、より多くのgitチュートリアルが書かれています。
Github。 Githubはソーシャルコーディングのパイオニアです。これはバージョン管理をソーシャルプラットフォームに変え、多くの注目を集めました。明らかにGitのみをサポートしています。ソーシャルメディア=採用の拡大。 Bitbucketは多くの新機能を得ながらSteamを獲得しており、ライバルになりそうです:)
まあ実際には、誇大広告はすべてのDSVCを一緒にすることだと思います。
しかし、Gitの支持者は声が多く、正直に言って、どこでもそれについて話したいというコメントのほうが積極的です。
Mercurialは広く使われていると思いますが、確かにgitと同じくらい頻繁に(おそらくMicrosoftや他の大企業が使用しています)、Mercurialを使用している人々は、ほとんどの場合、すぐに把握できるDSVCを望んでおり、宗教の基礎となるものではありません。そのため、一部のgitユーザーのように積極的であるよりも、発言が少なく、議論においてより反応的です。
Bazaarは、確かに多くのことについて話されていません。なぜなら、それを使用する既知の大きなプロジェクトはほとんどなく、Canonical以外の大企業がそれを使用することが知られているためです。たとえば、Google(git、Mercurial、svn)や大規模なオープンソースプロジェクトと比較すると、なぜそれが実際に話題にされていないのかがわかります。 Fossilはニッチな開発者にとって興味深いものの1つなので、提供する機能(埋め込みWiki、問題追跡、フォーラムなど)を検索する人だけが聞くのは普通で問題ないと思います。
そうは言っても、私たちは hype cycle を徐々に下げていると思います。いくつかの異なるソリューションを使用した多くの開発者は、自分のニーズに合ったソリューションを見つけることができます。
また、Google Code HostingとSourceForgeはgitとMercurialの両方を許可するようになったため、GitHubの機能により、以前よりもgitを選択したときに、プロジェクト固有の選択肢になっています。
実際の戦争はなく、興味深いさまざまなツールがあります。
この質問にはすでにたくさんの答えがあることは知っていますが、もう少し視点を追加できると思いました。
バザールは色々なもののために作られているので、ずっと使っていました。私がそれを使用した最大のものは、AllTrayプロジェクトで、私は(現在)唯一の開発者および保守者です。バザールはいいです。動作するだけで、邪魔にならず、-helpページやmanページを確認する必要がほとんどありません。そうは言っても、それにはいくつかの欠点があります:
私は最近AllTray開発をgitに切り替えましたが、プロジェクトをgitにallに移行することを非常に迅速に検討しています。ロープを知るために費やされる先行時間はもう少しありますが、それだけの価値があるようです。私が気づいたいくつかのこと:
git clone
は比較的高速な操作であり、クローンしたリポジトリに存在するすべてのブランチに関する情報を提供します。gitosis
システムも非常に優れています。それをBazaarのプラグインとして以外にどのように実装するのかさえわからないので、効率的に近いところにあるとは思えません。簡単に言えば、私は非常に長い間bzrを使用してきましたが、gitはその素晴らしさをすぐに証明してくれます。
Gitを使用すると、開発時には常に同じローカルディレクトリにとどまり、git checkout branchname
ブランチ間を切り替える(私は常に「軽量」機能ブランチを使用しているため、これは私にとって非常に重要な機能です)。
Mercurialのドキュメントとチュートリアルを見ると、開発のさまざまな分岐に対処するための好ましい方法は、クローンを作成して新しいリポジトリを作成することです。 このチュートリアル は例です。
Mercurialでもgitと同じことができると思いますが、何らかの理由でMercurialのドキュメント(私が読んだもの)では、リポジトリクローンを作成することでほとんどの場合分岐が示されます。
(私は毎日gitを使用しています。Mercurialの経験はほとんどありません。私はそれを試して、いくつかのチュートリアルを実行しました)
過去数週間にそのような怒りがいくつ見られたかはわかりませんが、MercurialやBazaarがGitよりも客観的に優れているという事実を、彼ら全員が考えているようです。使いやすさは共通のテーマのようです。はい、CVSとSubversionを使用した後、Gitを学ぶのは驚くほど困難でしたが、現時点では、別のパラダイムシフトを構成しない限り、他のVCSと交換したくありません。機能の表を参照しても、柔軟性、拡張性、安全性、または簡単な機能についてはほとんどわかりません。たとえば、デフォルトではgit-diff
は色とポケットベルを使用します。もちろん、diff ... | colordiff | less -R
か何かですが、なぜ一方が他方より優れているかは明らかです。
公平を期すために、Git対Mercurialの支持者は、Git対中央集権者に比べて数が少なく、はるかに少ないと思います。ただし、その理由は簡単に要約できます。
Gitはプログラマのためのバージョン管理です。 Mercurialは企業向けのバージョン管理です。集中化は、バージョン管理を発明するための最初の十分な試みでした。特に、それがパーソナルコンピュータ革命の前に設計されたことを考えると。
プログラマーのバージョン管理とは、一般にプログラマーは学習しやすさよりも柔軟性を優先するということです。結局のところ、コンピュータを訓練されていないことができないようにする柔軟性を持たせるために、私たちは何年も難解な言語を学ぶことをいとわないのです。 Gitは、プログラマーが自由に使用できる柔軟性を提供しますが、その柔軟性を安全に使用する方法を学ぶのに時間がかかります。ポリシーを適用するために制限を設けることはできますが、そのままでは効果がありません。メモseではなくlearningの方が簡単だと言いました。一度習得すれば、gitは他のVCSと同じように簡単にseになり、速度と機能が向上するため、多くの場合より簡単になります。
一部のプログラマーは、自分のやりたいことを実行するために十分に学習し、それを行うための新しい方法の学習に抵抗します。企業はこれらの人々の多くを雇い採用しているため、ある程度の親しみを持たせるために、使用するツールに変更を加えたいと考えています。企業はまた、プログラマーが仕事をするのに十分な柔軟性を持っていることを望んでいますが、トレーニングや初期の移行を困難にするほどではありません。これがMercurialが適している場所です。Gitのほとんどの機能を備えていますが、移行パスはやや簡単です。
誇大宣伝やLinusの支持により、Gitが人気があるだけだと言っても不思議ではありません。それはおそらく多くの人々を説明します試してみるそれですが、純粋でシンプルなので、彼らのためにうまく機能するので、彼らはそれに固執してそれを宣伝します。
NetBSD開発はCVSを使用しており、それだけが重要です。
それは、しゃれに向いている、より素朴でより簡潔な名前を持っています。
私は最近、個人的なプロジェクトのバージョン管理システムを探していたので、たくさん試してみました。コマンドラインではほとんど読み書きができません。GUIは利用できますが、Gitはコマンドラインから使用することを意図していたため、少し迷っていました。正直なところ、とんでもないほど簡単に拾うことができ、本当に楽しんでいます。ドキュメンテーションは新しいテクノロジーの採用における大きな要因であり、Gitには、明確で利用可能な途方もなく単純なドキュメンテーションがたくさんあります。 SVNやBazaarなどの他の代替手段は素晴らしく、Gitほど簡単ではありませんでした。 Githubも大きな要因です。現在、Githubはオープンソース運動の中心になっているからです。 (皮肉なことに)コードやプロジェクトを交換するための集中管理された場所を持つことは、それ自体がゲームチェンジャーです。
ちょうど私の2¢-gitを選択したのは、それがradtool言語や過度に学術的な高水準言語ではなくCで記述されているためです。利点は、高速で効率的であり、説明できないバグや動作が発生した場合に実際にRTFSを実行できることです。また、巨大なインタープリター/ランタイムを含まない小さなセルフホスト開発環境での使用も可能になります。つまり、最新のソースを他の場所にフェッチしてrsyncを実行する必要がなく、Gitリポジトリから直接プルしてそのようなシステムでコンパイルできます。
GNOMEデスクトッププロジェクト が数年前にsvnから移行することを決めたときに、hgとbzrではなくgitを選択した理由をお読みください。もちろん、多くの白熱した宗教的議論がありましたが、 GNOME Wikiページ は、特定のコミュニティに適用された長所と短所をうまくまとめています。
言うまでもありませんAppleは今それをObjective Cコミュニティにプッシュすることに関与しています。最近Xcode 4で新しいアプリケーションを作成した場合、それが自動的に尋ねられることに気づくでしょう。 Gitリポジトリを作成したいと考えています。
確かにXcode 4はほんの数か月前から存在し、Gitsの以前の成功には影響しませんが、Appleが短時間で物を作ることができることは誰もが知っています。