ThreeFlowの分岐戊略

゜フトりェア開発のさたざたな偎面に関する同僚ずの私の䌚話の䞭で、1぀のトピックが他のトピックよりも頻繁にポップアップしたす。 よくあるのは、ハッキングされたレコヌドのように䜕床も繰り返されるものです。これらは、GitFlowがなぜ悪いのか、なぜ避けるべきなのかずいうトピックに関する䌚話です。



埌に「GitFlow」ず呌ばれるメ゜ッドを説明する蚘事「A Successful Branching Model for Git 」は、プロゞェクトでGitを䜿甚する方法の事実䞊の暙準になりたした。 Googleで「 git branching strategy 」のようなものを怜玢する堎合、この方法は最初のリンクで説明されたすほずんどの堎合、次のリンクで説明されたす。



個人的には、GitFlowが嫌いです。過去数幎にわたっお、倚くの開発チヌムにGitFlowの䜿甚をやめるよう説埗しおきたした。 GitFlowを䜿甚するず、チヌムはコヌド倉曎管理を組織化できたすが、実装するこずはできたせん。 しかし、これは少なくずも怜玢゚ンゞンの結果ではこのような䞀般的な方法であるため、十分な経隓のないチヌムが「䜕か、少なくずも䜕らかの圢で機胜する」を探しおいるチヌムは、クむック怜玢でそれを芋぀け、さらに「成功」​​ずいう単語を芋぀けたす蚘事のタむトルにその説明が蚘茉されおいたす-たあ、圌らはそれを考えずに䜿い始めたす。 この蚘事では、倚くのチヌムで実装したGitブランチを䜿甚するための、よりシンプルで劣らず成功した戊略を説明するこずで、この動䜜パタヌンを少なくずもわずかに倉曎したいず思いたす。 倚くの堎合、これらのチヌムはGitFlowを䜿甚しようずしたしたが、ThreeFlowぞの移行ずずもに消える問題を経隓したした。



厳密に3぀のブランチがあるため、この戊略をThreeFlowず呌びたす。 4぀ではありたせん。 2぀ではありたせん。 䞉。



たあ、ただの譊告特効薬はなく、ThreeFlowも䞇胜薬ではありたせん。 垞に適切ずは限りたせん。 組み蟌み開発やオヌプン゜ヌスプロゞェクトではうたく機胜しないず思いたす。 しかし、プロゞェクトチヌム党䜓が1぀の䌚瀟で働いおおり、倖郚開発者からのプヌル芁求がない状況では非垞に成功したす。 すなわち チヌムの党員がコヌドに完党にアクセスでき、リポゞトリに曞き蟌むために必芁なすべおの暩限を持っおいたす。



それでは、GitFlowの䜕が問題になっおいたすか



芁するに、GitFlowの䜕が問題なのかは、開発䞭の機胜ごずにブランチを䜜成するずいう圌のアむデアです。 機胜のブランチは悪の根源です。 これらのブランチが提䟛するものはすべお、問題、問題、そしお再び問題です。 この蚘事から有甚なものがたったく埗られない堎合、たたはここで読むのをやめる堎合は、機胜ブランチがひどいずいう考えを芚えおおいおください。



画像



公平を期すために、元の蚘事では機胜のブランチに぀いお説明しおいるこずに泚意しおください。これらは「通垞、個々の開発者のマシンにのみ存圚し、メむンリポゞトリオリゞンには存圚したせん」。 しかし、同じ蚘事で、GitFlowを説明する図はそれを異なっお瀺しおいたす。 機胜ブランチには「起源」がありたす。 さらに、倚くの開発チヌムがGitFlowを䜿甚しおいるこずを確認したしたが、別々の開発マシンでのみブランチを䜿甚するずいう著者の掚奚に泚意を払っおいたせんでした。 私が芋たすべおの人は、起源に存圚する長期的なツヌルずしお機胜ブランチを䜿甚したした。



䞀般的に、マシンの機胜のブランチを䜜成しおも問題はありたせん。 これは、プロゞェクトで耇数のタスクを同時に凊理する必芁がある堎合にタスクを切り替えるのに適した方法です。 これは、すべおの䜜業をリモヌトリポゞトリず同期させるこずなく小さな修正を行う必芁がある堎合に、マスタヌブランチをクリヌンに保぀ための良い方法です。 しかし、元のGitFlowの掚奚を超えお、元の機胜ブランチの䜜成を厳しく犁止したす。



個々の機胜に長く存圚するブランチを䜿甚する堎合、それらの統合の地獄はあなたの絶え間ない珟実になりたす 。 2人の゚ンゞニアがそれぞれ独自の機胜で、それぞれ独自のブランチで正垞に䜜業を行っおいたすが、トラブルを匕き起こすものは䜕もありたせん。 しかし、どちらか䞀方が他方の䜜業を芋るこずはありたせん。 ブランチをメむンの開発ブランチず定期的に同期しおいる堎合でも、既に完了しお染色された機胜のコミットのみが衚瀺され、互いの珟圚の䜜業は衚瀺されたせん。 そしお、開発者Aは自分の機胜の開発を終了し、メむンブランチにコヌドを泚入したす。 開発者Bはこれらの倉曎をピックアップし、「最埌に競合する人は誰でもかたわない」ずいう叀兞的な問題を取埗したす。 圌はほんの1分間遅れおいたかもしれたせんが、ここで圌はここで開発者Aが曞いたものず、それをすべお遅くする方法を理解しようずしお䜕時間も費やしたす。 そしお、この「分離された」開発が別々の機胜ブランチで実行される時間が長くなればなるほど、マヌゞに䌎う痛みず苊しみは倧きくなりたす。



機胜の既存のブランチは、䜜業を単玔化するものではありたせん。 埌で問題を先送りするだけです。 開発者間のコミュニケヌションの䞻な圢匏は、゜ヌスコヌドです。 定期的な立ち䞊げ、䌚議の蚈画、回顧などで奜きなだけ自分を慰めるこずができたすが、これは重芁ではありたせん。 オヌケストラのリハヌサルを想像しおみおください。ミュヌゞシャンは長い間、どのように曲を挔奏するかを話し合いたすが、その埌、指揮者は郚屋に分散しおそれぞれのパヌトをリハヌサルするよう䟝頌したす。 そのようなリハヌサルには意味がありたすか したがっお、゜フトりェア開発に䌎いたす。機胜ブランチでの䜜業は、本質的に開発者間のコミュニケヌションにおける臎呜的な沈黙に類䌌しおいたす。 機胜のブランチはひどいです。



さらに、機胜ブランチは非垞にスケヌラブルです。 自分の快適さのために機胜ブランチを䜜成する開発者は問題ではありたせん。 しかし、あなたのチヌムは成長しおおり、各開発者は掻発に開発しおいる機胜ごずにブランチを持っおいたす。 おめでずうございたす、あなたは今、ブランチの各ペアに問題を抱えおいたす。 プログラマヌを8人だけにしお、それぞれがブランチの1぀の機胜だけで動䜜するようにしたす。 そしお今、あなたは28ペアの数の壊れた通信回線を持っおいたす。 開発者をもう1人、ブランチを1぀远加したした。珟圚、36の「厖」がありたす。



フラグを䜿甚しお機胜を有効にする



ブランチを䜿甚しお機胜を開発する代わりに、 フラグを䜿甚しお機胜をオンたたはオフにしおみおください。 簡単です。 ブヌルフラグを宣蚀するこずにより、新しい機胜の開発を開始したす。それに応じお、それが含たれたす。 デフォルトでfalseに蚭定したす。この堎合、新しい機胜のコヌドなしで叀いコヌドを呌び出したす。



if(newCodeEnabled) { //   } else { //   }
      
      





画像 フラグ自䜓は、コヌドにハヌドコヌディングするか、倖郚構成に転送するこずができたすおそらくConsulやZookeeperのようなものを䜿甚したす。これにより、テストや実皌働でも新しい機胜を有効たたは無効にできたす。 プロゞェクトマネヌゞャヌず顧客は、開発者を匕き付けたり、プロゞェクトを組み立お盎したりする必芁なく、自分自身でオンたたはオフにできる機胜のリストを備えた補品コントロヌルパネルを芋るこずを非垞に奜みたす。



2人の開発者が異なる異なる機胜で同じメむンブランチで䜜業する堎合、それぞれのフラグを䜜成したす。 そしお、圌らは定期的にコヌドをコミットするだけです。 この堎合の競合の可胜性は最小限です。 誰でも適切ず刀断したコヌドをコミットできたす。 誰もが自分のロヌカルリポゞトリをメむンリポゞトリず同期できたす-非同期は最小限に抑えられたす確かに1営業日以内。 競合はたったくないか、最小限に抑えられたす。 GitFlowが提䟛するように、数日たたは数週間でグロヌバルな倉曎を行うよりも、過去1時間でこの10行で同僚が䜕を倉曎したかを理解する方がはるかに簡単です。



そしお、はい、もしあなたがコヌドのテストを曞いたらそしお、あなたが曞いたのですか、フラグを無効にしたコヌドブランチずフラグがオンになっおいるブランチの䞡方をテストする必芁がありたす。 盞互に䟝存する2぀の機胜が開発されおいる堎合、開発時には、すべおの組み合わせに察しお4぀のテストが必芁になりたす。 これは、開発を耇雑にしお速床を萜ずす脅嚁のように聞こえたすが、新機胜の開発埌に「叀い」コヌドブロックおよびそれらのテストが削陀されるこずを忘れないでください。そうすれば、幟䜕孊的な耇雑さが増したせん。



新機胜のフラグをより動的に䜿甚できたす。 ベヌタテストたたはA / Bテストのために、それらを特定のナヌザヌグルヌプにリンクできたす。



機胜の開発が完了し、本番環境でデフォルトで有効になったら、叀いコヌドずフラグ自䜓を削陀するために、優先床の䜎い小さなタスクをスケゞュヌルできたす。 たたは、䜕らかの理由で機胜を無効にしたい堎合新しいコヌドの安定性の問題、バック゚ンドの負荷調敎、これを行うこずはできたせん。 いずれにせよ、フラグず叀いコヌドを削陀たたは残すこずを意識的に決定するこずが重芁です-それを忘れるず、コヌドはやがお開発者の気を散らすだけで実際の利益をもたらさない叀い未䜿甚の機胜のコケに成長したす



新しい機胜を組み蟌むためのフラグアプロヌチの䟡倀は、過小評䟡されおいたす。 機胜のブランチではなく機胜のフラグを䜿甚し始めるずすぐに、戻りたくないこずを保蚌したす。 私の蚘憶では、ほずんどの堎合、遅かれ早かれ独立した長寿呜ブランチでの倧きな新機胜の開発は、䜕人かのプログラマヌの泚意ずGitの深い知識を必芁ずする問題に぀ながりたした。 同時に、同じブランチで䜜業し、新しい機胜のフラグを立おるずいうアプロヌチでは、1人で数分で解決できなかった競合は発生したせんでした。



だからThreeFlow



そこで、機胜のブランチが悪い理由ず、それらを眮き換えるこずができるものを芋぀けたした。 これからThreeFlow分岐モデル自䜓に぀いお説明できたす。



画像



このアプロヌチでは、すべおの開発者が1぀のマスタヌブランチで䜜業したす。 機胜が簡単な堎合、1回のコミットで実装および远加されるだけです。 機胜の開発に時間がかかる堎合は、最初にフラグデフォルトでは無効が远加されおアクティブになりたす。 開発者はこのフラグをロヌカルで有効にしお新しい機胜を開発およびテストしたすが、メむンリポゞトリのコヌドは䟝然ずしお「叀い」コヌドブランチを䜿甚したす。 コミットをマスタヌに远加するには、リベヌスが䜿甚されたす。 ロヌカルブランチを䜿甚しお機胜を操䜜する堎合、マスタヌに移動する必芁がありたす。そのため、元々このブランチの痕跡はありたせん。



以䞊です。 そしお、開発プロセス党䜓が行われたす。 1぀のブランチ、マスタヌ。 その䞭のすべおのコヌド。 必芁なものはすべおフラグでオンたたはオフになりたす。 すべおの開発者は同じコヌドを持ち、倚くの堎合互いに同期しおいたす。 ThreeFlowの他のすべおは、開発ではなくリリヌス戊略に関するものです。



リリヌス



リリヌス時刻が来るずスケゞュヌルどおり、たたはマニュアルに蚘茉されおいる堎合、マスタヌブランチの「スラむス」がリリヌス候補ブランチになりたす。 同じブランチがすべおのリリヌス候補に䜿甚されたす。



このブランチの目的は、リグレッションおよびその他のテストを実行するためにQAチヌムが受け取るビルドを提䟛するこずです。 理論的には、このリリヌス候補の新機胜は、開発ず組み蟌みの過皋ですでにQAによっおテストされおいたすが、おそらくQAはリリヌス候補でそれらを再確認したいず思うでしょう。



リリヌス候補を䜜成するには、次のようにしたす。



 $ git checkout candidate # ,  candidate   origin/candidate $ git pull # ,       $ git merge --no-ff origin/master $ git tag candidate-3.2.645 $ git push --follow-tags
      
      





ここで--no-ffフラグを䜿甚する理由は、マヌゞコミット2぀の芪を持぀新しいコミットを䜜成するためです。 圌の䞡芪の1人はリリヌス候補ブランチの前のHEADであり、2番目はマスタヌブランチのHEADです。 これにより、誰がい぀リリヌス候補を䜜成したか、䜕が正確に䜕になったのかmasterブランチのコミットの履歎を簡単に远跡できたす。



たた、リリヌス候補のタグを䜜成したこずにお気づきかもしれたせん。 これに぀いおもう少し。



リリヌス候補のテスト䞭にバグが怜出された堎合、それらはリリヌス候補ブランチで修正され、そこで新しいリリヌス候補がマヌクされ、修正された倉曎がマスタヌにストヌルされたす。 たた、ブランチ間でどのコヌドが移動されたかを正確に衚瀺するため、これらの倉曎は「--no-ff」パラメヌタヌで適甚する必芁がありたす。



リリヌス候補がテストおよび承認されるず、そのHEADがHEADリリヌス候補ブランチを指すようにリリヌスブランチを曎新したす。 リリヌス候補ごずにタグがあるため、リリヌスブランチにプッシュするだけです。



 $ git push --force origin candidate-3.2.647:release
      
      





ここでの「--force」パラメヌタヌは、リリヌスブランチのすべおの倉曎を無芖し、HEADを同じコミットに匷制するこずを意味したす。これは、リリヌス候補の最埌に䜜成されたタグを瀺したす䞊蚘の䟋ではcandidate-3.2.647。 これはマヌゞではありたせんが、それはここでは必芁ないためです。 Gitの話を耇雑にしたくはありたせん。䞀般に、リリヌスブランチを䜜成する唯䞀の理由は、実皌働環境で芋぀かった重倧な問題に察する緊急修正の理論的な必芁性です。 はい、この「--force」はリリヌスブランチのすべおのホットフィックスを消去したす。 ただし、新しい機胜を備えた補品の次のバヌゞョンを同時にリリヌスし、チヌムの別のメンバヌが本番環境のバグを修正するず、プロゞェクト管理ずコミュニケヌションに重倧な問題が生じたす。 これらは、ブランチやリリヌスを䞭心ずしたこれらすべおのダンスの開始前であっおも解決する必芁がありたす。 リリヌスブランチでの修正は非垞にたれであり、圓然、リリヌス候補ずマスタヌブランチで停止する必芁がありたす。



マヌゞの代わりに--forceを䜿甚する理由は、HEADリリヌス候補ブランチのマヌゞコミットずHEADリリヌスブランチのコミットが異なるsha-1を持぀可胜性があるためです。これは必芁なものではありたせん。 リリヌスで新しいコミットを䜜成するのではなく、リリヌス候補者によっお遞択された正確なコミットをリリヌスず呌びたす。これは、QAチヌムによっおテストされ、この責任者によっおリリヌスが承認されたした。 これがたさに「--force」の機胜です。



画像



これらの掚奚事項に埓えば、gitリポゞトリのストヌリヌは䞊の図ず非垞によく䌌たものになり、ブランチ間で移動したコミットを正確に瀺したす。



リリヌスノヌト



新しいリリヌスの「リリヌスノヌト」を簡単に生成できたす。 必芁なのは、最埌のリリヌスタグず珟圚のリリヌス候補タグの違いを取埗するこずだけです。 リリヌスブランチには、か぀おリリヌス候補だったものがありたすので、どれを芋぀けるこずができたす



 $ git describe --tags release candidate-3.1.248
      
      





リリヌス候補に候補-3.2.259があるこずがわかったので、次の2぀のタグの違いを取埗できたす。



 $ git log --oneline candidate-3.1.248..candidate-3.2.259
      
      





さお、たたはタグがなくおも、リリヌスのHEADず候補ブランチを比范するだけです



 $ git log --oneline release..candidate
      
      





該圓する操䜜



ThreeFlowで䜜業するずきに䞀般的に䜿甚される操䜜を次に瀺したす。 すべおの䟋は、ロヌカルブランチがリモヌトブランチに正しく関連付けられおおり、珟圚の倉曎が含たれおいるこずを前提ずしおいたす。 これに぀いおよくわからない堎合は、もう䞀床git fetchを実行し、masterだけでなくorigin / masterなどの名前を䜿甚するこずをお勧めしたす



masterブランチからリリヌス候補を䜜成するにはどうすればよいですか



 $ git checkout candidate $ git pull $ git merge --no-ff master $ git tag candidate-3.2.645 #optionally tag the candidate $ git push --follow-tags
      
      





リリヌス候補からリリヌスするにはどうすればよいですか



 $ git push --force origin <tag for the candidate>:release
      
      





䜕らかの理由でリリヌス候補にタグを付けないこずにした堎合、次のこずを行う必芁がありたす。



 $ git push --force origin candidate:release
      
      





特定のコミットを持぀ブランチを芋぀けるにはどうすればよいですか

特定の倉曎がリリヌス候補たたはリリヌスに含たれるこずを確認したい堎合がありたす。 確認方法は次のずおりです。



 $ git branch -r -contains <sha of commit>
      
      





ブランチでHEADが指すタグを芋぀けるにはどうすればよいですか



 $ git describe --tags <branch>
      
      





新しいリリヌスに含たれるコミットを知るにはどうすればよいですか



 $ git log --oneline release..<tag of release candidate>
      
      





たたは



 $ git log --oneline release..origin/candidate
      
      





リリヌス候補ずリリヌスブランチを蚭定するにはどうすればよいですか

すべおのプロゞェクトは、最初のコミットから始たりたす。 これは通垞、readmeファむルを远加するような単玔なものです。 このコミットからリリヌス候補ずリリヌスブランチを䜜成するこずをお勧めしたす。 取埗する必芁があるのは、2぀の芪ずの最初のマヌゞコミットです。 これにより、正しいストヌリヌが埗られたす。 そのため、䞀般に、masterブランチのコミットが適切です。 最初のものを取りたせんか



 $ git branch candidate `git log --format=%H --reverse | head -1` $ git checkout candidate $ git push
      
      





リリヌス甚のブランチを䜜成するには



 $ git branch release $ git branch release --set-upstream-to=origin/release
      
      





ご質問



しかし、これは「サボテンモデル」ではありたせんか

この蚘事で説明されおいる分岐戊略は、Jussi Judinによっお説明された「GactFlowの代替ずしお、たたすべおの䜜業にmasterブランチを䜿甚する」「 サボテンモデル 」に非垞に䌌おいるず思われるかもしれたせん。 はい、倧郚分はそうです。 䞻な違いは、Judinがコミットをmasterブランチからreleaseブランチに遞択的に移動するこずを提案しおいるこずです「チェリヌピック」。 私はこれに断固ずしお反察しおいたす。 コミットの遞択的な移動は、マスタヌのいく぀かの絶察に壊滅的な状態ず緊急リリヌスの倧きな必芁性で最埌に䜿甚されるべき極端な手段です。 マヌゞよりもリベヌスを䜿甚するこずを奜みたす。 そしお、遞択性を避けたす。



もう1぀の違いは、ThreeFlowにリリヌス候補のブランチが存圚するこずです。これは、必芁最小限の悪ずしお受け入れおいたす。 個人的に、私の目暙は、各コミットで指を突いおすぐに運甚に移せるような状態にmasterブランチを維持するこずです。 しかし、倚くのチヌムにずっお、このモヌドで䜜業するのは難しく、䞍快であるこずに気付きたした。 人々はQAチヌムの圢でバッファを甚意し、開発者に承認されたビルド「悪いものではなく、これを取埗する」を䞎え、その品質に぀いおフィヌドバックをもらう必芁がありたす。 たた、ThreeFlowモデルはその機䌚を提䟛したす。 補品の品質に慎重に適したチヌムでは、リリヌス候補ずリリヌスブランチの違いは最小限になりたす。



しかし、GitFlowは機胜の分岐なしで説明されおいるだけではありたせんか

実際、以前に同様の方法でGitFlowを䜿甚しおいた人々にこの戊略を説明したした。「機胜にブランチを䜿甚せず、すべおの開発は開発ブランチで行われ、これをマスタヌず呌び、マスタヌず呌ばれるものをブランチず呌びたす。リリヌス。」 ThreeFlowの䞻なアむデアは、耇雑さを最小限に抑えるこずでした。 GitFlowは、䜕らかの理由機胜、リリヌス、ホットフィックスで新しい゚ンティティブランチの䜜成を掚奚したす。 プロゞェクトが倧きく、時間が長くなればなるほど、その歎史はひどく芋えたす。 ThreeFlowは、ブランチの数を最小限に抑えるよう努めおいたす。機胜たたはホットフィックスのブランチはありたせん。 機胜はりィザヌドで蚘述され、修​​正プログラムはリリヌス候補、たたはリリヌスにも適甚されたす。 たた、倚数のリリヌスブランチの代わりに、珟圚のリリヌス候補および珟圚のリリヌスず呌ばれるものが垞にありたす。 3぀のブランチのみ。 垞に。



たた、ブランチネヌミングシステムを䜜成する必芁はありたせんそのうち3぀しかなく、名前は䞀定ですマスタヌ、候補、リリヌス。



「私のコヌドをどこに眮くか」ずいう質問には垞に答えがありたす。 これが生産䞊の問題のホットフィックスである堎合-リリヌス。 これがリリヌス候補のバグ修正である堎合、候補にありたす。 これが通垞の日垞業務の堎合-マスタヌ。



コヌドレビュヌはどうですか

メむンの開発ブランチに到達する前にすべおのコヌドをレビュヌするルヌルがある堎合は、別のブランチを远加するのが論理的です開発ず呌びたしょう-はい、この名前をGitFlowから盗んでください。 そのため、すべおの開発がその䞭に入り、レビュアヌは承認されたコミットをそこからマスタヌに転送したすたあ、たたはファむナラむズを䟝頌したす。 もちろん、転送されたものず転送されなかったものを䜕らかの方法で远跡する必芁があり、これは困難を匕き起こす可胜性がありたす。 ThreeFlowを䜿甚する堎合、メむンブランチにコミットする前にコヌドレビュヌの抂念を厳守するこずはチヌムにずっおうたくいかないか、このアプロヌチのさらなる適応が必芁になるこずを認めなければなりたせん。 Gerritのようなツヌルを同様の目的で䜿甚しおいる人がいるず聞きたしたが、私自身は䜿甚したこずがありたせん。



耇数のアヌティファクトを保存するコヌドベヌスはどうですか

倚くの堎合、コヌドは実際には1぀のコヌドベヌスに栌玍され、そこから耇数のプロゞェクトを組み立おるこずができたす。 これらの個々のアセンブリ成果物には、QA郚門による別個の怜蚌サむクルが必芁であり、リリヌス候補の別個のバヌゞョンがありたす。 この堎合、ThreeFlowはどのように機胜したすか



うたくいきたす。 ごく最近、私はか぀お同様のプロゞェクトで働いおいたした。 いく぀かの異なるアヌティファクトが収集およびデプロむされたGitリポゞトリが1぀ありたした。 解決策は明らかです。各アヌティファクトはリポゞトリに2぀のブランチを远加したす。 マスタヌですべおのコヌドを蚘述し、無効化されたフラグを䜿甚しお機胜を操䜜したす。 これを行うために、リポゞトリから収集されるアヌティファクトの数ず数を知る必芁はありたせん。 しかし、ここではリリヌスになり、各アヌティファクトには、リリヌス候補ずリリヌスのための独自のブランチが必芁ですfoo_candidate、foo_release、bar_candidate、bar_release。 以䞊です。



それはあなたが思っおいるよりも優れおいたす。 私の最近のプロゞェクトの1぀では、1぀の倧きなコヌドベヌスから4぀の異なるアヌティファクトが収集されたした。 いく぀かの䞀般的なコヌド、サブプロゞェクトごずに個別のもの-わかりたした。 䞀方で-リリヌス候補ずリリヌス甚の8぀のブランチず、1぀のマスタヌ。 しかし、䞀方で、各アヌティファクトには独自の個別のチヌムがあり、各アヌティファクトには3぀のブランチのみが関連しおいたため、それらの総数はほずんど関係ありたせんでした。



Gitコマンドぞの远加の匕数セットをどうにかしお回避できたすか

提案されたアプロヌチの特城の1぀は、䜿甚されるほがすべおのチヌムが远加の匕数を持っおいるこずです。 マヌゞを行うたびに、「-no-ff」を忘れずに远加しおください。 リリヌスを䜜成しおタグを付けるずきは、タグを元の堎所に保存するためにプッシュするずきに「--follow-tags」を䜿甚するこずをお勧めしたす。 デフォルトでこれらのタグを適甚できたす



 $ git config --global merge.ff no
      
      





これで、「-no-ff」パラメヌタヌなしでmergeコマンドを䜿甚できたす暗黙的に远加されたす



同様に、プッシュ時のタグの堎合



 $ git config --global push.followTags true
      
      





プル時に自動リベヌスを構成するこずもできたす。



 $ git config --global branch.master.rebase true
      
      





ロヌカルブランチを䜿甚しお個々の機胜を操䜜する堎合、プルするずきにすべおの新しいブランチを自動的にリベヌスするこずもできたす



 $ git config --global branch.autosetuprebase always
      
      





これらのルヌルを珟圚のリポゞトリのみに適甚し、党員には適甚しない堎合は、䞊蚘のコマンドから「--global」キヌを削陀するこずもできたす。



リリヌスブランチにマヌゞを䜿甚できたすか

たあ、たず第䞀に、あなたは自由な人であり、あなたは䜕でもしたいこずができたす。 私ず他の䞀郚の人にずっおうたく機胜する戊略を説明しおいたす。 私には、GitFlowよりも優れおいるようです単玔なため。



第二に、はい、-forceキヌを抌しお履歎情報の䞀郚を倱うずいう考えが気に入らない堎合は、-no-ffキヌずマヌゞできたす。 ここでのプラスは、ブランチ間でコミットを転送するさたざたな方法を芚えおおく必芁がないこずです。 自分自身をマヌゞするだけです--no-ffは垞に、それだけです。



実際、ThreeFlowの最初のバヌゞョンでは、リリヌスの--no-ffパラメヌタヌずマヌゞしお、たさにそのような動䜜を説明したした。 それはうたくいきたした、物語はよく読たれたした。 私が気に入らなかった唯䞀のこずは、リリヌスブランチからのビルドアヌティファクトが、以前はリリヌス候補ず芋なされ、QAずリリヌス承認を経た正匏なコミットではなかったこずです。 あるこずをテストしおから、別のこずをしお、この別のこずをリリヌスしたこずがわかりたした。 残念だ。 もちろん、合䜵を高速転送に眮き換えるこずもできたすが、これは情報の損倱に぀ながり、成功するこずが保蚌されおいるずいう事実でさえありたせん。



私の意芋では、push + forceは、リリヌスの内容が実際には継承されたコミットのチェヌンの甚語の分岐ではなく、そのように解釈されるべきではないこずをより明確にしたす。 これは、珟圚実皌働で動䜜しおいる実際のコヌドぞの単なるポむンタヌです。 たた、リリヌスブランチ自䜓は、か぀お本番環境でレむアりトされおいた䞀連のタグを指しおいるだけです。 さお、これは珟圚のコヌドのブランチであるため、い぀でもすぐに本番甚のホットフィックスを䜜成できたす。



たずめるず



䞀貫した分岐戊略なしでGitを䜿甚するこずは危険なビゞネスです。 だから、これを取る





画像



以䞊です。 ThreeFlow Git, .



? ? , "--force" , ? !



All Articles