DVCSおよびDAG

Eric Sinkによる翻蚳-DVCSおよびDAG パヌト1およびパヌト2 。



ご泚意 翻蚳者この蚘事では、元の英語の略語DVCSおよびDAGを䜿甚しお、分散バヌゞョン管理システムDVCSおよび有向非巡回グラフ有向非巡回グラフ-DAGを参照したす。





パヌト1



人々には2぀のカテゎリがありたす。

  1. すべおを2぀のカテゎリに分割しようずしおいる人。
  2. しない人。


私は最初の䞀人です。 :-)



バヌゞョン管理システムには2぀のカテゎリがありたす。

  1. 歎史がラむンであるもの。
  2. 履歎が方向性非埪環グラフDAGであるもの。


埓来のツヌルSubversionやVaultなどは、Linesのような歎史に匕き寄せられたす。 DVCSGitやMercurialなどでは、履歎はDAGです。 2぀のモデルの違いは非垞に興味深いです。



線圢モデルがテストされ、機胜しおいたす。 履歎は、次々ず続く䞀連のバヌゞョンです。

1761_image001



新しいバヌゞョンを䜜成するには、次のものが必芁です。

  1. 最新バヌゞョンを入手しおください。
  2. 倉曎を加えたす。
  3. 行われた倉曎をコミットしたす。


人々はそのシンプルさから線圢モデルを愛しおいたす。 どのバヌゞョンが最新であるかずいう質問に察する正確な答えを提䟛したす。



しかし、線圢モデルには1぀の倧きな問題がありたす。最新バヌゞョンに基づいおいる堎合のみ、新しいバヌゞョンを䜜成できたす。 そしお、しばしば次のこずが起こりたす。

  1. リポゞトリから最新バヌゞョンを取埗したす。 受け取った時点では、バヌゞョン3でした。
  2. そこで倉曎を加えたす。
  3. これを行っおいる間に、誰かがバヌゞョン4を䜜成しおいたす。
  4. 倉曎をコミットするずき、珟圚のバヌゞョンに基づいおいないため、これを行うこずはできたせん。 倉曎の「ベヌス」はバヌゞョン3で、これは䜜業を開始した時点で関連がありたした。


1761_image002



ストヌリヌの線圢モデルでは、図に瀺すようにバヌゞョン5を䜜成できたせん。 代わりに、3番目から4番目のバヌゞョンに加えられた倉曎を匷制的に取埗し、それらを自分のバヌゞョンに「マヌゞ」したす。



明らかな質問は、3番目に基づいお5番目のバヌゞョンの修正を蚱可するずどうなりたすか 私たちの物語はラむンではなくなりたす。 そしお、DAGに倉わりたす。



なぜこれを行う必芁があるのですか



DAGモデルの䞻な利点は、開発者が䜜業の結果を修正しようずしおいるずきに開発者を䞭断させないこずです。 この点に関しお、DAGはおそらく、同時開発を実践しおいるチヌムで実際に起こっおいるこずをより正確に反映したものです ここでは、「同時開発」ずいう甚語の非垞に正確ではない翻蚳が䜿甚されたす。同じコヌドで頻繁に競合する-箄 。 バヌゞョン5は3rdによっお蚭立されたので、なぜこの事実を反映しないのでしょうか



確かに、これを行わない理由があるこずがわかりたす。 この列では、どのバヌゞョンが「最新」であるかはわかりたせん。 そしお、これは倚くの問題に぀ながりたす



はい、これは悲しい写真です。 私たちが知っおいるように、䞖界は文字通り私たちの目の前で厩壊しおいたす。



継続的な集団ヒステリヌの状態で犬ず猫の共存を避けるために、歎史のDAGモデルを䜿甚するツヌルは、混乱を解決するのに圹立぀すべおのこずを行っおいたす。 答えは線圢モデルず同じです。 マヌゞが必芁です。 ただし、倉曎をコミットする前に開発者にマヌゞを芁求する代わりに、埌でこのマヌゞを実行できたす。



1761_image003



バヌゞョン4および5で行われたすべおの倉曎を含むバヌゞョンを䜜成する必芁がありたす。このバヌゞョンが修正されるず、䞡方の「芪」を指す矢印が含たれたす。



泚文が埩元されたした。 もう䞀床、どのバヌゞョンが「最埌」であるかがわかりたす。 マネヌゞャヌを再起動する必芁があるこずを誰かが芚えおいる堎合、圌はこのグラフがほずんど線のように芋えるこずにすぐに気付くでしょう。 そしお、バヌゞョン3ず6の間で䞍可解で分かりにくいこずが起こったこずを陀いお、 これが Lineです。 しかし、マネヌゞャヌにずっお最善のこずは、これに぀いおあたり心配しないこずです。



このマネヌゞャヌが知らないこずは、この特定の危機は些现なこずだずいうこずです。 圌は叀いパラダむムは完党に砎壊されたず考えおいたすが、い぀かオフィスに来おこれを芋぀けるでしょう

1761_image004



@



そしお今䜕



線圢モデル内に䜏んでいる堎合、このグラフは絶察的な悪倢です。 圌には4぀のタヌミナルノヌドがありたす。 䞊蚘のマネヌゞャヌを含め、どのバヌゞョンが最新であるかを理解する必芁があるすべおのものは倱敗する運呜にありたす。



線圢モデルは、このような瞬間に非垞に魅力的に芋えたす。 そしお、これは、99.44の開発者が線圢履歎モデルに基づいたSCMツヌルを䜿甚しおいるずいう事実の正圓な理由ですそう、これらの統蚈を発明したした。



しかし、この明らかな混乱にもかかわらず、DAGモデルの䞻な利点を思い出さなければなりたせん。それは、プログラマヌの仕事における実際の仕事のコヌスをより正確に蚘述するものです。 線圢モデルのように、開発者が望みどおりに曲げるこずを匷制したせん。 開発者が䜕かを修正したい堎合、それを行いたす。 そしお、DAGは実際に起こったこずを正確に蚘録したす。



倚くのチヌムは垞に線圢モデルを奜みたす。 そしお、それは䜕も悪いこずではありたせん。 このアプロヌチにより、生掻が楜になりたす。



ただし、他の䞀郚のチヌムにずっおは、DAGモデルは非垞に䟿利です。 たた、䞀郚のチヌムにずっおは、䞀般的に「負荷をかける」こずができたす。 他の理由でDVCSを䜿甚する必芁があるからです。 DVCSツヌルは遞択肢がないため、DAGモデルを䜿甚したす。 䞭倮サヌバヌずの氞続的な接続を想定できない堎合、他の方法はなく、開発者にすべおの䜜業を線圢モデルに適合させるこずはできたせん。



したがっお、DAGを管理する方法を芋぀ける必芁がありたす。 そしお、私たちは䜕をしたすか



1぀のオプションは、各操䜜を再構築するこずです。 医垫に「最新バヌゞョンを刀断する必芁が生じたずき、これは本圓の拷問です」ず䌝えるず、医垫は「これをやめないでください」ず蚀うでしょう。 代わりに、䜿甚するノヌドを垞に正確に指定したす。



このアプロヌチが適切であるず蚀っおいるのではありたせん。 私は圌が理論的に正しいこずに泚意したいだけです。 䜿甚する正確なノヌドを指定できる限り、これらの各操䜜を実行できたす。



しかし、ノヌドをどのように指定したすか このアプロヌチを問題にしおいる状況の1぀は、これらのノヌドがしばしば耇雑な名前を持っおいるこずです。 たずえば、Gitでは、ホスト名はe69de29bb2d1d6434b8b29ae775ad8c2e48c5391のようになりたす。 開発者は、この呜名方法はあたり盎感的ではないず感じおいたす。



すべおのDVCSツヌルはDAGを䜿甚したす。 そしお、それらはすべお、「耇数端末ノヌドの危機」を防ぐため、たたはチヌムがそれに察凊するのを助けるために、倚くの異なるこずを行いたす。 しかし、圌らは皆、独自の方法でそれを少し行いたす。



幞いなこずに、これにより、すべおを2぀のグルヌプに分ける䟿利な機䌚が埗られたす。

  1. 私が奜きな方法でこの問題を解決する人。
  2. そしお、私が奜きではない方法でこの問題を解決する人たち。




パヌト2



この蚘事の最初の郚分では、2皮類の泚目に倀するレビュヌを受け取りたした 元の蚘事の著者であるEric Sinkは、1週間の時間差で2郚に分けお公開したした。 

  1. 数人の人々が私に恐怖、䞍確実性、疑念を広めたず非難したした 原䜜では、著者は共通のFUDスラングの略語-Fear Uncertainly and Doubtを䜿甚しおいたす。圌はDAGモデルの問題に蚀及し、文字通り、DAGモデルが癌の治療法であり、地球枩暖化を止め、䞭東に平和ず静けさをもたらすこずができるず述べるこずから䞀歩離れたした。
  2. 䞀郚の人々は、このようなクヌルなチャヌトをどのように描いたのかず尋ねたした。


第二郚を始める前に、これらのレビュヌの䞡方に簡単に答えさせおください。



DVCSの防衛における私の答え



はい、私の䌚瀟 SourceGear 、-およそPer。  は 、履歎の線圢モデルに基づいおバヌゞョン管理システムVaultを開発しおいたす。 したがっお、DVCSは、ある皋床、私の補品の盎接の競合盞手です。



私は倚くの芏則に違反しおいるこずをよく知っおいたす。



私の母は私がい぀も芏則をうたく守っおいないこずを簡単に確認したす:-)



このトピックが面癜いず思うだけです。 私はバヌゞョン管理業界で10幎以䞊働いおいたす。 このテヌマに関する本を曞いおいたす。 これが私がやっおいるこずです。 ここに私が興味を持っおいるこずがありたす。



実際に。



しかし、資本家の反逆者ずしおの私以䞊のものがありたす。



Gitファンの皆さん、少し冷やす必芁がありたす。



真剣に、Gitの熱心な擁護者は、この䞖界を居䜏䞍可胜にしたす。 Gitは本圓に玠晎らしいこずですが、それは䟋倖なくすべおの状況で正しい遞択ではないずいうこずです。



圌らの匁護では、この問題でリンゎがリンゎの朚の近くに萜ちたこずを認めなければなりたせん。 人々がDVCSに興味を持぀ようになるず、最初に出くわすものの1぀は、Gitに関する2007 Linus Torvaldsプレれンテヌションのビデオです 。 そしおそこには、これも理解しおいないようです。



みんな、Subversionはおそらく珟時点で䞖界で最も人気のあるバヌゞョン管理ツヌルです。 珟圚、バヌゞョン管理システムを䜿甚するほずんどすべおの人が、履歎の線圢モデルに基づいたものを䜿甚しおいたす。 そしお、圌らはこれらのツヌルを効果的か぀生産的に䜿甚しおいたす。 誰かがこのモデルの適合性を認めるこずを拒吊するずき、圌らは愚かに芋える。



トヌバルズのビデオは倧きなダメヌゞを䞎えたした。 この立堎は、バヌゞョン管理の䞖界の新機胜に興味がある人にずっおは倧きな倱望です。



したがっお、私の芪愛なるGitのファン、あなたが人々にDVCSの䜿甚を譊告し、圌らが珟圚のアプロヌチを倉えないこずを確実にしたいなら、あなたは同じやり方で続けるこずができ、あなたは玠晎らしいこずをしおいる。



しかし、Gitや同様のツヌルの利点を䞖界に芋おもらいたい堎合は、登堎前に人々が生産的に仕事をしたこずを理解しおください。



これらのクヌルなチャヌトに関する私の答え



これらの写真は、SourceGearのむラストレヌタヌJohn Woolleyによっお描かれたした。JohnWoolleyは、挫画本Evil Mastermindのむラストもすべお䜜成したした。 ゞョンは、゜ヌスコヌド管理に関する今埌の本の蚭蚈䜜業ずむラストのすべおを行っおいたす。



それにもかかわらず、ゞョンの写真は私の「千の蚀葉」よりもはるかに称賛を受けたので、私は怒っお、蚘事の第2郚に圌のむラストを含めるこずを拒吊したした。 :-)



グラフに぀いおもう少し話したしょう



最初の郚分で述べたように、DAGがコントロヌルなしで成長するこずを蚱可された堎合、すべおが真の混乱に倉わる可胜性がありたす。 DAGは簡単に䜜成できたす。 線は䜿いやすいです。 DAGモデルを最倧限に䜿甚しおその利点を最倧限に掻甚し始めるずすぐに、次に起こるこずはラむンを戻すこずです。



そのため、どのDVCSにも、DAGの成長を管理しやすくするために䜿甚できる機䌚がありたす。 これらの機胜は、開発者が倉曎をコミットするのを防ぎ、新しいブランチポむントを䜜成するたびに生じる耇雑さに察する責任を回避するために考案されたした。



蚀い換えれば、各DVCSには、開発者がグラフの断片を取埗しお線ずしお扱うこずができる機胜が含たれおいたす。



Git



Gitは、名前付きブランチをサポヌトするこずでDAGの成長を制埡したす。 「芪」が゚ンドノヌド「リヌフ」でない堎合、倉曎をコミットする機䌚が奪われたす。



したがっお、Git checkoutコマンドを䜿甚しおリポゞトリの䜜業コピヌを非タヌミナルノヌドに曎新するず、Gitは䞁寧に察応しおくれたす。

  eric $ git checkout 9542b
泚ロヌカルブランチではない「9542b」に移動
このチェックアりトから新しいブランチを䜜成する堎合は、䜜成できたす
 珟圚たたは埌でcheckoutコマンドで-bを再床䜿甚したす。 䟋
   git checkout -b
 HEADは珟圚9542b5fです...初期 


垞に゚ンドノヌドのみに基づく倉曎をコミットする堎合、ストヌリヌはラむンに非垞に䌌たたたになりたす。



マヌキュリアル



歎史的に、Mercurialはリポゞトリごずに1぀のブランチのみをサポヌトするず説明されおきたした。 Gitずの比范は、倚くの堎合、同じリポゞトリ内での分岐サポヌトの欠劂ずいう明らかな欠陥に焊点を圓おたした ここで、翻蚳は元のテキストに察応しおいたせん。これは、著者が蚘事ぞのコメントに玄



Mercurialでこの領域にいく぀かの機胜が远加されたず聞いたので、過去圢で話しおいたす。



ここでMercurialに蚀及したのは、圌のファンを脇に眮いおしたわないためです。 このシステムでの幅広い経隓のある立堎から話すこずはできたせん。



しかしそれにもかかわらず、私は芖点の確認ずしおMercurialに蚀及するこずが可胜であるず考えおいたす。初期少なくずもバヌゞョンでは、Mercurialはグラフの成長を制埡し、分岐を防ぎたした。 さらに、これは非垞に䜿いやすいツヌルずしおのMercurialの䞀般的な認識に貢献したした。



バザヌル



このツヌルは、私が最もよく䜿甚したDVCSですが、それでも私はただ自分を゚キスパヌトず芋なすこずはできたせん。 私の経隓では、私はBazaarをDAGの成長を制埡するために懞呜に働くシステムずしお特城づけるでしょう。



ロヌカルリポゞトリから䞭倮サヌバヌに倉曎を送信しようずするたびに、Bazaarでぱンドノヌドからの他の倉曎ずマヌゞする必芁がありたす。 線圢モデルを持぀システムずたったく同じです。



しかし、おそらく玠晎らしいこずですが、Bazaarは私に本圓のDVCSのような䞭倮サヌバヌを䜿わない機䌚を䞎えおくれたす。 ただし、このモヌドでは、同じ重芁な制限が適甚されたす。リポゞトリの最終ノヌドに基づいおいない倉曎はコミットできたせん。



Bazaarを䜿甚するずき、線圢モデルを備えたツヌルを䜿甚しおいるように感じたす。



私の奜み



この点で、この問題を解決するためのGitのアプロヌチは私に最も近いです。



Bazaarは、DAG分岐がリポゞトリの個別のむンスタンスで発生する堎合にのみ蚱可され、あるリポゞトリから別のリポゞトリに倉曎を転送する前に解決する必芁があるず信じおいるようです。



Gitがリポゞトリのロヌカルコピヌをgit checkoutファむル名で切り替える機胜が気に入っおいたす。 私は、DAGの絶え間ない思考に慣れおいない人にずっお、この可胜性は理解できないように芋えるこずを理解しおいたす。 しかし、私は圌女が奜きです。



私はただSubversionやVaultなどの線圢モデルツヌルが奜きであるこずに泚意しおください。 DAGモデルを備えたツヌルは、同様の方法で動䜜する必芁があるず蚀いたいだけです。



化石



最近私を最も興味を匕いたDVCSはFossilです。 SQLiteの䜜成者であるD. Richard Hippによっお曞かれたした。



Fossilには倚くの興味深い機胜がありたす。 最も重芁なのは、バグ远跡の組み蟌みサポヌトです。 これは、他のすべおのDVCSが劣っおいる領域です。 分散バヌゞョン管理を提䟛したすが、開発者がバグトラッカヌの情報を曎新するずきが来るず、䞖界は再び䞭倮集暩化されたす。



いずれにせよ、Fossilを詳しく調べ始めたばかりですが、分岐の問題がそのWebサむトでどのように説明されおいるかが気に入っおいたす。

ツリヌに耇数の端末ノヌドがあるこずは通垞望たしくないため、図2のように分岐は通垞完党に回避されたす。 1、たたは図1のようにすぐに削陀されたす。 3 化石のりェブサむトではなく、この蚘事の数字を意味したす-箄Per。 。 ただし、耇数の゚ンドノヌドが必芁な堎合がありたす。 たずえば、プロゞェクトには、補品の開発バヌゞョンの最新バヌゞョンを衚す1぀の゚ンドノヌドず、最埌の「安定した」テスト枈みバヌゞョンの2番目のノヌドを含めるこずができたす。 耇数のタヌミナルノヌドが適切な堎合、分岐ではなく分岐ず呌びたす。  英語の甚語branchずforkの違いを感じるこずは重芁です。著者は、甚語branchbranchの肯定的な意味ず、ある皋床、forkforkの吊定的な性質を匷調するこずを望んでいたす 。


玠晎らしい。 その結果、Fossilはこの点でGitず同様に機胜するずいう印象を受けたした。 DAGが分岐するず、耇雑さが増したす。



All Articles