Git 3の新機能:閉鎖

Gitは人気のあるバージョン管理システムです。 その中で、1つ以上のファイルのアトミックな変更はコミットと呼ばれ、いくつかの連続したコミットがブランチに結合されます。 ブランチは、新しいアイデア(機能)を実装するために使用されます。





















アイデアが行き止まりであることが判明し、開発者が間違った方向に曲がり、元のバージョンにロールバックする必要があります。これには、新しいブランチを忘れてメインのdevまたはmasterに切り替えて、何も起こらなかったように作業を続ける必要があります この場合、「シュート」は削除したいという欲求のように、永遠にハングアップします。 しかし、それがストーリーの一部である場合、どのように削除しますか? このプロセスは、無駄ではありますが、ワーカホリックプログラマーの努力を示しています。 失敗した結果も結果であるため、当局に報告する方が簡単です!







急いでください:バージョン3のGit開発者は、このような迷いているブランチを閉じるための新しいコマンドを導入します。 現在の現在のバージョンが2.21.0であることを思い出させてください。







このチームの使用方法、それは何を与え、IT企業は何を考えますか? この記事では、これらの質問やその他の質問に答えています。







説明



これで、以前のコミットのいずれかで失敗したブランチを閉じることができます。 以下の図では、障害アークは黄色で表示されています。















ここで、コミット4



は失敗した機能の最後です。 彼は1



から閉じられた後、マスターに戻り、コミット5



から逆に進みました。







コミットをそれ自体にロックして、 ループを作成することもできます















コミットにロックすることができます-スマートGitは違いを計算し、すべてを正しく結合します:















使い方は?



merge



コマンドにはクロージャー機能が含まれていません。最初の場合はブランチが高速で偽造され、2番目の場合は何も実行されないためです( git already up to date



)。







古い動作を変更しないために、開発者は閉じるコマンドを入力することにしました。







 git closure -s $source_commit -d $dest_commit -m $message
      
      





最初の引数-s $source_commit



は、ループを拡張するコミットのハッシュを指定し、2番目のオプションの-d $dest_commit



は、ループを閉じる必要があるコミットを指定します。 存在しない場合、現在のチェックアウトブランチでクローズが発生します。 -m $message



パラメーターは、 failed feature, revert to origin



などの閉鎖メッセージを設定し、 failed feature, revert to origin



ます。 ただし、 --allow-empty-message



オプションも使用でき、メッセージテキストなしでコミットできます。 デフォルトでは、Gitはコミットのペアに対して1つのクロージャーを許可します。 この制限を回避するには、オプション--allow-multiple-closures















コマンドが実行された後、git自体が変更を計算し、最終コミットで、double diffが表示されます(ベースブランチとトレーリングブランチから)。 一般的な場合、これはn次元の差分です。つまり、クロージャは何回でも実行できます。 closure-commitはmerge-commitと似ていますが、1つではなく複数のメッセージを保存するという違いがあります。







残念ながら、Gitを操作するための既存のGUIは、クロージャーをまだ完全にサポートしていません。 GitExtensionsのプレビューバージョンは、美しい弧の代わりにマージのような曲線を作成します。 新しいClosure message



Closure diff



フィールドに注意してください。













closure



チームが常に履歴を変更することに注意する価値があります(今でもGitは本格的なタイムマシンです!)。したがって、ブランチを--force



できるのは--force



オプションまたは安全な--force-with-lease



オプションのみです。







ループのあるブランチのリベースも使用できますが、その中でコミットを再カウントするためのロジックは複雑です。







また、 auto



オプションを使用すると、すべての古いブランチを自動的に閉じることができます。 この場合、クロージャーのコミットはブランチが行ったものです。 Git IDEのプラグインを使用して、クロージャーを定期的に実行できます。 GitExtensionsでは、同様の廃止されたブランチの削除プラグインが廃止されたブランチを削除します。







IT企業の意見



大規模IT企業:Google、Facebook、Apple、DeepMind、Positive Technologies、特にMicrosoftは閉鎖を楽しみにしています。これは、不連続なものを含むブランチのライフサイクルを形式化できるようになるためです。







Microsoftのトップマネージャーの1人であるMichael Richterは次のように書いています







gitの新機能は、オープンソース開発の世界の混乱を確実に軽減するだけでなく、間違いなく軽減します。 リポジトリには多くのぶら下げブランチがあります。 たとえば、 vscodeには200以上あり、 TypeScriptには300以上あります! そして、これはマイクロソフトの問題だけではありません。 クロージャーは、組織を改善するだけでなく、プログラマーの推論を追跡することもできます。同僚にとっても時には完全に理解できない場合があります:)クロージャーは、映画「Back to the Future」-キャラクターが過去と未来を旅した場所を思い出しました 私はこの映画が大好きで、何度か修正しました。 そして、私はこれのためにgitがもっと好きになると思います:)


ご注意



以前のコミットグラフが非循環有向グラフ (DAG)であった場合、クロージャはそれを一般化有向グラフに拡張します 。 Gitを使用すると、状態がコミットであり、アルファベットがすべてのメッセージのセットである正規表現を記述することができます。 しかし、これはハブの「異常なプログラミング」のスマックであり、したがって記事の範囲外です。 ただし、これに興味がある場合は、Gitに家系図を保存する方法を説明している記事をご覧ください。








All Articles