この記事では、Git の紹介と、git の基礎知識、git をベースにしたさまざまなワークフローについて紹介します。
#この記事を通じて次のことを学ぶことができます: つまり、何かを区別する限り、バージョンという概念が含まれますが、ここで言うバージョンは、後で説明することも含めて、すべて意味のあるバージョンである必要があります。シャオミン 1 月 1 日 2 月 1 日から 1 月 31 日まで、計画書は毎日改訂されました。2 月 1 日、シャオミンの A 党は以前のバージョンの方が良かったと言いました。このとき、シャオミンにとって、以前のバージョンは何でしたか?おそらくそれがシャオ・ミンが党 A に送った最後の計画だったかもしれないし、あるいは党 A が大丈夫と言ったのが最後の計画だったかもしれないが、シャオ・ミンは計画が党 A に修正された具体的な日付を覚えていないかもしれない。
2005 年までに、BitKeeper を開発した営利企業と Linux カーネル オープン ソース コミュニティとのパートナーシップは終了し、BitKeeper を無料で使用する Linux カーネル コミュニティの権利を取り戻しました。このため、Linux オープン ソース コミュニティ (特に Linux 作成者 Linus Torvalds) は、BitKeeper の使用から学んだ教訓に基づいて独自のバージョン システムを開発する必要がありました。彼らは新しいシステムに対していくつかの目標を設定しました:スピード
- シンプルな設計
- 非線形開発モデルの強力なサポート (並列開発の数千のブランチを可能にする)
- 完全分散
- Linux カーネルと同様の超大規模プロジェクトを効率的に管理する機能 (速度とデータ量) 2005 年に誕生して以来、Git は成長を続け、初期に設定された目標を維持しながら非常に使いやすくなりました。高速で大規模なプロジェクトの管理に最適で、驚くべき非線形ブランチ管理システムを備えています (Git ブランチを参照)。
# 创建并进入 testGitFlow 目录 # 此时 testGitFlow 就是我们的工作区(Workspace),也就是工作目录 $ mkdir testGitFlow && cd testGitFlow # 初始化 git 仓库 # 此时目录中增加了 .git 目录,.git 目录就是 git 仓库,不属于工作区 $ git init # 新增两个文件 $ echo 111 > a.txt $ echo 222 > b.txt # 添加两个文件到暂存区/索引(Index) $ git add . # 把索引中的两个文件添加到版本库(Repository) $ git commit -m 'init'
ワークスペース
:簡単に理解すると、プロジェクト DirectoryIndex
: 簡単に理解すると、送信するコンテンツが保存される領域ですRepository
: バージョン リポジトリコミット、ツリー、BLOB オブジェクト
# 通过 git log 查看版本 $ git log > commit 2b304a56998989dbcfd77f370f4b43fcad9e5872 (HEAD -> master) Author: huihuipan <huihuipan163@163.com> Date: Mon Feb 27 17:56:53 2023 +0800 init # 通过 git cat-file 查看 commit 信息 # 查看 commit 类型 $ git cat-file -t 2b304a > commit # 查看 commit 内容 $ git cat-file -p 10d717 > tree 4caaa1a9ae0b274fba9e3675f9ef071616e5b209 author huihuipan <huihuipan163@163.com> 1677491813 +0800 committer huihuipan <huihuipan163@163.com> 1677491813 +0800 init # 可以发现有 tree, author, committer 等信息 # 继续查看 tree 内容 $ git cat-file -t 4caaa1 > tree $ git cat-file -p 4caaa1 > 100644 blob 58c9bdf9d017fcd178dc8c073cbfcbb7ff240d6c a.txt 100644 blob c200906efd24ec5e783bee7f23b5d7c941b0c12c b.txt # 可以发现有 blob 信息 # 继续查看 blob 内容 $ git cat-file -t 58c9bd > blob $ git cat-file -p 58c9bd > 111 # 可以看到里面存储的是 a.txt 的内容
commit
: コミットは送信されたバージョンを記録します tree
: ツリーは送信されたバージョンを記録します異なるバージョンでのディレクトリ構造とファイル名blob
: BLOB レコード ファイルの内容##現時点での git プロジェクトの構造は次のとおりです##blob
Branch: は、ポインタを指します新しいコミットが送信されるたびに、現在のブランチは最新のコミットを指します;
HEAD: ブランチへのポインタ。チェックアウトが非-branch を実行すると、It is in thedetached head pointer state というプロンプトが表示され、いくつかの実験的なアクションを実行できます。;
Tag:コミットへのポインタ。ラベルとして使用され、通常は修正バージョンを記録するために使用され、指定されたコミットのエイリアスとしても理解できます。
上記のことから、バージョン管理の粒度が次のとおりであることがわかります。 git のデータがファイルレベルに到達し、blob を比較することで diff が得られるため、開発思考にもつながります プログラムを設計する際の基礎が比較的細かい粒度であると、その後の開発や拡張がより柔軟になりますコミットの操作も非常に柔軟なので、気をつけないと事故が起きる可能性があります。チェックアウト、マージ、リベース、フェッチ、プル
チェックアウト チェックアウト: 指定されたブランチまたはコミットに HEAD をチェックアウトする、または指定されたバージョンの指定されたファイルの内容をチェックアウトします。チェックアウトは git であまりにも多くの機能を実行するため、すべてのスイッチング ブランチには排他的なコマンド switch があります。
#マージ マージ #:
##リベース リベース
:リベースするとバージョン履歴が変更されます。リベース前の内容とリベース後の内容が一致していても、バージョンは同じバージョンではなくなります
fetch: リモート ライブラリなどの別のリポジトリからオブジェクトと参照をダウンロードします。#pull: git pull = fetch merge
Git のいくつかのワークフローに基づくGit Flow
はじめに## のVincent Driessen より#2010 で書かれた記事
「成功した Git ブランチング モデル」主なブランチは 2 つあります
# # ブランチはバージョンのライフサイクル全体を通じて実行されます。つまり、長期ブランチ:
develop ブランチ: 開発に使用されます masterブランチとdevelopブランチの関係は上記の通りですが、点線は直接関係はなくrelease/hotfixブランチ
supportブランチ
を介して関係のある2つのブランチを示しています。hotfix ブランチは、実稼働環境で緊急に修正する必要があるバグを修正するために使用されます。本番環境でバグが発生した場合 その時は、master ブランチから hotfix ブランチを取り出し、修復後にリリース用に master ブランチにマージし直し、develop ブランチにマージしてから削除します。
最後に完全な gitflow を確認します
2020年 Vincent Driessen追加反省ノート、大まかに言うとGit Flowこのモデルは継続的配信ソフトウェアの下では複雑に見えますが、 Github Flowの使用を検討できます。 Git Flow をプロジェクトに押し込むのではなく。
フォロー中Git FlowAdam Ruka forGit Flow の技術的な詳細が最適化されており、 # # と比較して One Flow
Github Flow # が提案されています#Git Flow、Github Flow トランク ブランチは 1 つだけあり、PR プロセスは Github プラットフォームを通じて追加されます。 ある機能を開発する際には、master ブランチからフィーチャーブランチを引き出し、機能完成後に PR を提出し、関係者にレビューしてもらい、レビュー期間内であれば、機能ブランチが存在しないことが確認されるまで提出することができます。リリース用ブランチGitLab Flow
GitLab Flow # を使用します。 ##master ブランチを開発ブランチとして、 master ブランチに基づいて、ブランチ production# をリリースします##GitLab Flow
次のブランチ定義を追加します: Environment ブランチ
: を使用します。 release ブランチ## 異なる環境で異なるバージョンをリリースする必要がある場合 #: プロジェクトが異なるバージョンをリリースする必要がある場合に使用されます。リリース ブランチを宣言した後、このブランチは重大なバグ修正アップデートのみをマージします。
継続的リリース
バージョン リリース
Aone Flow
バージョン管理の選び方
gitflow から始まるいくつかのフローが上で紹介されていますが、gitflow を使用すると、自由度の高い git をガイド付きで使用できます。 flow は、gitflow の複雑さに応じて、最小限のバージョンの flow を提案します。gitlab-flow は、gitflow と github-flow の過度に複雑または単純なメソッドに対する独自の妥協ソリューションも提案し、2 つの配信方法 (継続的配信) も提供します。 、バージョン配信) ソリューション;
最後に、より自由な操作粒度を備えたソリューションである AoneFlow も紹介されます。 実際には、万能のソリューションはありません。チームやプロジェクトごとに特殊な状況があり、状況に応じてフローも変化し、適切なソリューションが最適です。
最後に
引用ヴィンセント・ドリエセン: 「最後に、特効薬はないということを常に覚えておいてください。自分の背景を考えてください。嫌いにならないでください。自分で決めてください。」
詳細については、プログラミング関連の知識については、プログラミング ビデオ をご覧ください。 !
以上がGit のさまざまなワークフローを深く理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。