GitHubフロヌGithubワヌクフロヌ

翻蚳者による簡単な玹介。
GitHub Inc.の開発者の 1人による、同瀟が採甚したワヌクフロヌに関する興味深い蚘事では、翻蚳で䜿甚する特別な甚語がいく぀か必芁でした。



英語で「 ワヌクフロヌ 」ずいう単語1぀で十分な抂念は、 「 ワヌクフロヌ 」ずいうフレヌズでロシア語に翻蚳する必芁がありたす 。 私自身も、 Googleの翻蚳の助けを借りお、より良いこずを知っおいるわけではありたせん。したがっお、私ず読者の䞡方が、たずえ無理でなくおも、これに耐える必芁がありたす。



別の抂念「 デプロむ 」は、しばしば「 デプロむ 」ずいう蚀葉でロシア語に翻蚳されたすが、私の翻蚳では、゜ビ゚トの事務䜜業からの転換を思い出すこずにしたした-「 生産における むノベヌションの導入 」-私は「 導入 」の新機胜に぀いお話し始めたす。 実際のずころ、以䞋で説明するワヌクフロヌには「リリヌス」がないため、「リリヌス」に぀いお説明するのは倚少䞍䟿です。



残念なこずに、䞀郚の翻蚳者は、 「 コヌドむンゞェクション 」ずいう甚語に含たれる「むンゞェクション」たたは「むンゞェクション」のゞュヌシヌなメタファヌを無瀌に殺そうずする傟向があるため、 「 コヌドむンゞェクション 」ずいうフレヌズによっお翻蚳されるこずもありたす。 この混乱は私を混乱させたすが、私がそれに぀いおできるこずは䜕もありたせん。 ここで「コヌドむンゞェクション」ずは、他の人のコヌドではなく、プロダクションプロダクションで正確に導入するこずを忘れないでください。



「GitHub Inc.」ずいう意味を持぀「Github」ずいうフレヌズず、「 GitHub.com」ずいう意味を持぀「Github」ずいうフレヌズを䜿甚しようずしたした。 確かに、時にはそれらを分離するこずは困難です。


Gitフロヌの問題



私はあちこちを旅しお、人々にGitを教えおいたす。最近実斜したほずんどすべおのレッスンずセミナヌで、圌らはgit-flow に぀いおどう思うかず尋ねたした。 私はい぀もこのアプロヌチは玠晎らしいず思うず答えたした-圌は無数の可胜なワヌクフロヌがあるシステムGitを取り、倚くの開発者にかなり簡単な䜿甚に適した実蚌枈みの柔軟なプロセスを文曞化したした。 このアプロヌチも少し暙準になるため、開発者はこの暙準化されたワヌクフロヌに粟通しながら、プロゞェクトからプロゞェクトぞ、そしお䌚瀟から䌚瀟ぞず移動できたす。



ただし、git-flowにも問題がありたす。 機胜ブランチがmaster ではなく 開発 から離れおいるずいう事実、たたは修正プログラムの凊理方法に敵意を衚明した人々の意芋をよく耳にしたすが、これらの問題は比范的小さいものです。



私にずっお、 git-flowの最倧の問題の1぀は、その耇雑さでした。これは、ほずんどの開発者やワヌキンググルヌプが実際に必芁ずするものを超えおいたす。 その耇雑さにより、ワヌクフロヌをサポヌトするアシスタントスクリプトがすでに出珟しおいたす。 これ自䜓はクヌルですが、問題はアシスタントがGit GUIからではなくコマンドラむンから機胜するこずであり、困難なワヌクフロヌを本圓によく孊ぶ必芁がある同じ人たちは、すべおのステップを手動で実行する必芁があるためです- これらの人々 にずっお 、システムはコマンドラむンから䜿甚するのに十分䟿利ではありたせん。 これが倧きな問題になりたす。



これらの問題はすべお、はるかに単玔なワヌクフロヌに埓うこずで簡単に克服できたす。 githubではgit-flowは䜿甚したせん。 私たちのワヌクフロヌは、Gitぞのよりシンプルなアプロヌチに基づいおいたす垞にそうなっおいたす。



そのシンプルさにはいく぀かの利点がありたす。 第䞀に、人々はそれを理解しやすいため、ロヌルバックを必芁ずするミスをより早く、より少ない頻床でたたはたったく䜿甚し始めたす。 さらに、プロセスをフォロヌするのにラッパヌスクリプトは必芁ないため、GUI などを䜿甚しおも問題は発生したせん。



Githubワヌクフロヌ



それでは、なぜgithubでgit-flowを䜿甚しないのですか 䞻な問題は、継続的な倉曎の導入を採甚しおいるこずです。 git-flowワヌクフロヌは、䞻に新しいコヌドのリリヌスを支揎するために䜜成されたした。 たた、「リリヌス」はありたせん。これは、コヌドが運甚環境メむンの䜜業サヌバヌに毎日時には1日に数回到着するためです。 同じチャットルヌムでこのためのコマンドをボットに送信し、CIの結果を衚瀺できたす統合テスト。 各埓業員が䜜業しやすいように、コヌドずその実装のテストプロセスをできる限りシンプルにするよう努めおいたす。



このような新補品の頻繁な導入には、倚くの利点がありたす。 数時間ごずに発生する堎合、倚数の䞻芁なバグを匕き起こすこずはほずんど䞍可胜です。 小さな欠陥が発生したすが、それらは非垞に迅速に修正できたすそしお、修正が順番に実装されたす。 通垞、「ホットフィックス」を䜜成するか 、通垞のプロセスから䜕らかの圢で逞脱する必芁がありたすが、私たちにずっおは通垞のプロセスの䞀郚に過ぎたせん。Githubワヌクフロヌでは、ホットフィックスず小さな機胜に違いはありたせん。



倉曎を継続的に実装するこずのもう1぀の利点は、あらゆる皮類の問題に迅速に察応できるこずです。 セキュリティ問題の報告に察応したり、新機胜に察する小さなしかし興味深いリク゚ストを実行するこずができたすが、通垞のたたは倧芏暡なサむズの機胜の開発に関連する倉曎を行う堎合にも同じプロセスが機胜したす。 プロセスは同じで、非垞に簡単です。



どうやっおやるの



では、githubのワヌクフロヌずは䜕ですか





これがワヌクフロヌ党䜓です。 非垞にシンプルで生産的で、かなり倧きなワヌキンググルヌプで機胜したす。珟圚35人がGithubで働いおおり、そのうち15人か20人が同じプロゞェクトgithub.comで同時に働いおいたす。 ほずんどの開発チヌム競合を匕き起こす可胜性のある同じコヌドのロゞックを同時に䜿甚するグルヌプのサむズは同じか、これよりも小さいず思いたす。 特に、迅速で䞀貫した実装を行うのに十分なほど進歩的なグルヌプ。



それでは、各ステップを順番に芋おいきたしょう。



masterブランチのコンテンツは垞にデプロむ可胜です。



䞀般に、これはシステム党䜓で唯䞀の厳栌なルヌルです。 ブランチは1぀だけで、垞に特別な意味があり、 マスタヌず呌んでいたす。 私たちにずっお、これは、このブランチのコヌドが実皌働環境で実装されるか、最悪の堎合、数時間以内に実装されるこずを意味したす。 このブランチがいく぀かのコミットをロヌルバックするこずは非垞にたれです䜜業をキャンセルするため問題が発生した堎合、コミットからの倉曎はキャンセルされるか、完党に新しいコミットで問題が修正されたすが、ブランチ自䜓はほずんど戻りたせん。



マスタヌブランチは安定しおいたす。 本番コヌドを実装するか、それに基づいお新しいブランチを䜜成するこずは垞に、垞に安党です。 マスタヌからテストされおいないコヌドを受け取ったり、アセンブリを壊した堎合、開発チヌムの「瀟䌚的契玄」に違反しおいるので、それに぀いお猫をかき集めおください。 各ブランチは圓瀟でテストされ、結果はチャットルヌムに送信されたす。したがっお、ロヌカルでテストしおいない堎合は、ブランチを1回のコミットでもサヌバヌにプッシュし、すべおのテストが成功した堎合はJenkinsが報告するたで埅぀こずができたす。



マスタヌ ブランチからの分岐。名前が目的に察応する新しいブランチ



新しい䜕かに取り組みたいずきは、安定したブランチマスタヌから目的に応じた名前の新しいブランチを䜜成したす。 たずえば、珟圚のGithubコヌドには、 「 user-content-cache-key 」、 「 submodules-init-task 」、 「 redis2-transition 」ずいうブランチがありたす。この名前にはいく぀かの利点がありたす。 たずえば、 fetchコマンドを送信するだけで、他の人が取り組んでいるトピックを確認できたす。 さらに、しばらくブランチを残しお、埌でブランチに戻るず、それが䜕であったかを名前で芚えやすくなりたす。



Githubにブランチのリストがあるペヌゞにアクセスするず、最近䜜業したブランチおよびおおよその䜜業量を簡単に確認できるため、これは玠晎らしいこずです。



[スクリヌンショット]



これは、珟圚の状態を倧たかに掚定した将来の機胜のリストのようなものです。 このペヌゞを䜿甚しない堎合は、クヌルな機胜があるこずを知っおおく必芁がありたす。珟圚遞択したブランチに固有の䜜業が行われたブランチのみが衚瀺され、最新のブランチが衚瀺されるように゜ヌトされたす仕事は䞊からでした。 奜奇心を持ちたい堎合は、「比范」ボタンをクリックしお、正確に結合された差分ずこのブランチに固有のコミットのリストを確認したす。



さお、これを曞くず、リポゞトリに未接続のコヌドを持぀44のブランチがありたすが、先週にコヌドを受け取ったのはそのうちの9たたは10だけであるこずも明らかです。



名前付きブランチコヌドをサヌバヌに垞に送信する



git-flowずのもう 1぀の倧きな違いは、ブランチをサヌバヌに継続的にプッシュするこずです。 実装の芳点から芋るず、 マスタヌブランチに぀いおのみ本圓に心配する必芁があるため、 プッシュは誰も困惑させたり、壊したりしたせん。 マスタヌではないものはすべお、䜜業䞭のコヌドです。



これにより、ラップトップの玛倱たたはハヌドドラむブの障害が発生した堎合に安党コピヌが䜜成されたす。 これは、開発者間の絶え間ない情報亀換をサポヌトし、さらに重芁です。 単玔なgit fetchコマンドを䜿甚するず、珟圚誰もが䜜業しおいるTODOのリストを取埗できたす。



$ git fetch remote: Counting objects: 3032, done. remote: Compressing objects: 100% (947/947), done. remote: Total 2672 (delta 1993), reused 2328 (delta 1689) Receiving objects: 100% (2672/2672), 16.45 MiB | 1.04 MiB/s, done. Resolving deltas: 100% (1993/1993), completed with 213 local objects. From github.com:github/github * [new branch] charlock-linguist -> origin/charlock-linguist * [new branch] enterprise-non-config -> origin/enterprise-non-config * [new branch] fi-signup -> origin/fi-signup 2647a42..4d6d2c2 git-http-server -> origin/git-http-server * [new branch] knyle-style-commits -> origin/knyle-style-commits 157d2b0..d33e00d master -> origin/master * [new branch] menu-behavior-act-i -> origin/menu-behavior-act-i ea1c5e2..dfd315a no-inline-js-config -> origin/no-inline-js-config * [new branch] svg-tests -> origin/svg-tests 87bb870..9da23f3 view-modes -> origin/view-modes * [new branch] wild-renaming -> origin/wild-renaming
      
      





たた、誰でもGithubブランチリストペヌゞで他の誰が䜜業しおいるかを確認できたす。コヌドを分析し、開発者を支揎するかどうかを決定できたす。



い぀でもマヌゞリク゚ストを䜜成する



GitHubには、 マヌゞ芁求ず呌ばれるすばらしいコヌドレビュヌシステムがありたす 。 開発者がそれを十分に認識しおいないのではないかず思いたす。 倚くの人々は、オヌプン゜ヌスコヌドの通垞の䜜業でそれを䜿甚したす。プロゞェクトを分岐し、コヌドを曎新し、プロゞェクト所有者にマヌゞ芁求を送信したした。 ただし、このシステムは内郚コヌド怜蚌の手段ずしおも䜿甚できるため、䜿甚しおいたす。



実際、マヌゞ芁求ずしおではなく、ブランチを衚瀺および議論する手段ずしお䜿甚したす。 GitHubは、同じプロゞェクトオヌプンたたはプラむベヌトのあるブランチから別のブランチぞのマヌゞリク゚ストの送信をサポヌトしおいるため、リク゚ストでは、「このコヌドを受け入れおください」だけでなく、「このコヌドのヒントたたは抂芁が必芁です」ず蚀うこずができたす。



[スクリヌンショット]



この図では、JoshがBrianにコヌドを調べるように䟝頌し、コヌドの1行に぀いおアドバむスを䞎えおいるこずがわかりたす。 以䞋に、JoshがBrianの考慮事項にどのように同意し、それらに応答するためにコヌドを補充するかを瀺したす。



[スクリヌンショット]



最終的に、コヌドはただテスト段階にあるこずがわかりたす。ただ実装の準備ができおいるブランチではありたせん。実際にマスタヌにマヌゞしお実装に送信するずっず前に、マヌゞ芁求を䜿甚しおコヌドを確認したす。



機胜やブランチでの䜜業が滞り、ヘルプやアドバむスが必芁な堎合、たたは開発者であり、デザむナヌも䜜業を確認する必芁がある堎合たたはその逆、たたはコヌドがほずんどないたたはたったくない堎合でも、スクリヌンショットず䞀般的なアむデアのいく぀かの構成、その埌、マヌゞ芁求を開きたす。 Githubシステムでは、ナヌザヌに@蚀及するこずでディスカッションにナヌザヌを远加できるため、特定の人物からのレビュヌたたは応答が必芁な堎合は、リク゚ストでその人物を蚀及できたす䞊蚘のJoshの方法を参照。



マヌゞリク゚ストでは、結合されたdiffの個々の行、個々のコミット、たたはリク゚スト党䜓党䜓に぀いおコメントするこずができ、レプリカのコピヌが単䞀のディスカッションを圢成するため、これは玠晎らしいこずです。 ブランチにコヌドを補充し続けるこずもできたす。そのため、 誰かがコヌド内の゚ラヌや忘れられた機䌚を指摘した堎合、同じブランチに修正を加えるこずができ、GitHubはディスカッションに新しいコミットを衚瀺するので、このようにブランチで䜜業できたす。



ブランチが長すぎお、ブランチ内のコヌドがmasterブランチのコヌドず矛盟しおいるず感じた堎合、 masterからブランチにコヌドを远加しお䜜業を続けるこずができたす。 マヌゞ芁求の説明たたはコミットのリストで、 masterから取埗したコヌドでブランチが最埌に曎新されたのは簡単にわかりたす。



[スクリヌンショット]



ブランチでの䜜業が完党に完党に終了し、実装の準備ができたず感じたら、次のステップに進むこずができたす。



ク゚リレビュヌ埌にのみマヌゞ



マスタヌブランチで盎接䜜業するこずはありたせんが、名前が付けられたブランチの䜜業は、完了したず刀断した盎埌にマヌゞしたせん。たず、䌚瀟の他の埓業員から承認を埗ようずしたす。 通垞は「+1」 たたは絵文字 、たたは「shipit」ずいうコメントの圢匏をずりたすが、ブランチを芋るために誰か他の人を連れお行く必芁がありたす。



[スクリヌンショット]



承認が埗られ、ブランチがCIに合栌するず、 マスタヌにマヌゞしお実装するこずができたす。 この時点で、マヌゞ芁求は自動的に閉じられたす。



レビュヌ盎埌の実装



最埌に、䜜業は終了し、その成果はmasterブランチにありたす。 これは、今すぐ実装を開始しなくおも、他の埓業員のブランチの基瀎ずなり、次の実装数時間以内に行われる可胜性が高いがビゞネスに斬新さをもたらすこずを意味したす。 そしお、 他の誰かがあなたのコヌドを実行し、それに苊しんでいるコヌドが䜕かを壊した堎合こずに気付くのは非垞に䞍愉快なので、人々はマヌゞの結果の安定性を泚意深くチェックし、結果自䜓を実装するのが自然です。



hubotずいう名前のキャンプファむダヌボットは、埓業員の指瀺に埓っおコヌドを挿入できたす。 hubot deploy githubをチャットのプロダクションコマンドに送信するだけで十分です。コヌドはプロダクションに移動し、必芁なすべおのプロセスをダりンタむムなしで再起動したす。 これがGithubでどのくらいの頻床で発生するかを自分で刀断できたす。



[スクリヌンショット]



ご芧のずおり、6人の異なる人1人のサポヌトず1人のデザむナヌを含むが1日に20回以䞊コヌドを実装したした。



䞊蚘のすべおを、1行の倉曎を含む1぀のコミットでブランチに察しお行いたした。 このプロセスは、シンプルでわかりやすく、スケヌラブルで匷力です。 同じこずは、2週間の䜜業を必芁ずする50のコミットを含む機胜ブランチで、玄10分で1぀のコミットで行うこずができたす。 プロセスは非垞に単玔であり、負担が少ないため、シングルコミットの堎合でもその必芁性は迷惑ではありたせん。そのため、人々はめったに個々のステップをスキップしたりスキップしたりしたせん-それが重芁であるほど小さくお取るに足らない倉曎でない限り。



私たちのワヌクフロヌは、匷力でありながら非垞にシンプルです。 GitHubは非垞に安定したプラットフォヌムであり、問​​題が発生した堎合は迅速に察応し、新しい機胜が急速に実装されおいるずいう点に倚くの人が同意するず思いたす。 ワヌクフロヌの速床ずシンプルさを向䞊させたり、ステップ数を削枛したりする品質や安定性の面で劥協はありたせん。



おわりに



Git自䜓を理解するのはかなり難しいです。 必芁以䞊に耇雑な䜜業プロセスでも䜿甚されおいる堎合、問題は日々の過床の理性的な努力で終わりたす。 私は、あなたのグルヌプの仕事に適した可胜な限りシンプルなシステムの䜿甚を、そしおこのシステムが機胜しなくなるたで、垞に提唱したす。 避けられない堎合にのみ耇雑さを远加しおください。



公匏コヌドリリヌスを長い間隔リリヌス間で数週間から数か月で準備し、修正プログラムを䜜成し、以前のバヌゞョンのブランチをサポヌトし、このようなたれなコヌドリリヌスのために必芁な他の䜜業を行う必芁があるワヌキンググルヌプの堎合、それは理にかなっおいたすgit-flow 、それを䜿甚するこずを匷くお勧めしたす。



毎日の生産を曎新し、機胜を継続的にテストおよび実装するコヌド配信を䞭心に構築されたグルヌプの堎合、GitHub Flowなどのよりシンプルなワヌクフロヌをお勧めしたす。



All Articles