内容:ガイド
序文
Git はどのようにデータを保存しますか?
Git が保存するのは、ファイルの変更や差分ではなく、さまざまな時点での一連のスナップショットです。
コミット操作を実行するとき、Git はコミット オブジェクト (コミット オブジェクト) を保存します。コミット オブジェクトには、ファイルの
スナップショットへのポインタが含まれます。一時ストレージには、作成者の名前と電子メール アドレス、送信時に入力された情報、およびその親オブジェクトへのポインタが含まれます。
最初のコミットによって生成されるコミット オブジェクトには親オブジェクトがありません。通常のコミット操作によって生成されるコミット オブジェクトには 1 つの親オブジェクトがあり、複数のブランチをマージすることによって生成されるコミット オブジェクトには複数の親オブジェクトがあります。
実用的な例:
現在、ステージングおよび送信される 3 つのファイルを含む作業ディレクトリがあるとします。ステージング
操作では各ファイルのチェックサム (SHA-1 ハッシュ アルゴリズム) が計算され、
現在のバージョンは次のようになります。ファイルのスナップショットが保存されます。 Git ウェアハウスに送信します (Git は BLOB オブジェクトを使用して保存します)。
最後に、チェックサムが送信用のステージング領域に追加されます。
git add README test.rb LICENSE
git commit -m 'The initial commit of my project'
git commit 実行後の手順:
Git は最初に各サブディレクトリ (この場合はプロジェクトのルート ディレクトリのみ) のチェックサムを計算します。
次に、これらのチェックサムは Git ウェアハウスにツリー オブジェクトとして保存されます。コミット
送信オブジェクトにはツリー オブジェクト ポインタ、GIt が含まれます。必要に応じて保存されたスナップショットを再現できます。
Git リポジトリには 5 つのオブジェクトがあります
3 つの BLOB オブジェクト: ファイルのスナップショットを保存する
ツリー オブジェクト: ディレクトリ構造と BLOB オブジェクトのインデックスを記録する
コミット オブジェクト: ツリー オブジェクトへのポインターとすべてのコミット情報が含まれる
commit オブジェクトとそのツリー構造
いくつかの変更を加えた後、再度送信すると、今回生成される送信オブジェクトには、最後の送信オブジェクト (親オブジェクト) へのポインターが含まれます。
複数のコミットオブジェクトとその親
Git のブランチの本質:
これは送信オブジェクトを指す単なる変数ポインタです。Git
のデフォルトのブランチ名は master です。
各送信の後、master ブランチのポインタは最新の送信オブジェクトを指します。master
ブランチは自動的に送信されます。前進すること。
ブランチとそのコミット履歴
ブランチを作成します。
移動するための新しいポインタを作成するだけです。
テスト ブランチを作成します。
git branch testing
これにより、現在存在するコミット オブジェクトへのポインタが作成されます。
同じコミット履歴を指す 2 つのブランチ
Git はどのようにして現在どのブランチに存在するかを知るのでしょうか?
HEAD と呼ばれる特別なポインタがあります。Git
では、これは現在のローカル ブランチへのポインタです。git
ブランチ コマンドは新しいブランチを作成するだけで、新しい go in に自動的に切り替わらないため、ここではローカルが現在マスター ブランチです。ブランチ;
分岐を切り替える
ふたつのやり方:
git checkout <分支名>
git switch <分支名>
git checkout testing
このように HEAD はテストを指します
実際の例:
polo@B-J5D1MD6R-2312 watermarker % git checkout newtest2
M test.py
A test1..3.txt
A test1.txt
D test111.txt
A test3.txt
切换到分支 'newtest2'
polo@B-J5D1MD6R-2312 watermarker % git log
commit 6652c6d6c439cb23ef6aaff79eeccbf3213a9a0b (HEAD -> newtest2, tag: 1.2, origin, newtest3)
ブランチ切り替え後のコミット履歴を確認する
最新の送信オブジェクトを指す 3 つのブランチ (origin、newtest2、newtest3) があることがわかります。現在の HEAD が指すブランチは newtest2 です。これは、newtest2 に切り替えられたばかりであるためです。
HEAD は現在のブランチを指します
では、そのような実装はどのようなメリットをもたらすのでしょうか? 修正して再送信する
vim test.rb
git commit -a -m 'made a change'
testing ブランチは前に進みますが、master ブランチは前に進みません。 git commit が新しいコンテンツを送信するたびに、HEAD が指すブランチのみが自動的に前に進み、他のブランチは動きません。
HEAD ブランチは自動的にコミット操作を進めて、
master ブランチ
git checkout masterに戻ることを確認します。
HEAD が master ブランチを指す2 つのことを実行しました。
作業ディレクトリを master ブランチが指すスナップショット コンテンツ (古いコンテンツ) に戻すことは、
テスト ブランチによって加えられた変更を無視することと同じです。
重要: ブランチを切り替えると、作業ディレクトリのファイルが変更されます。ディレクトリ
チェックアウト時に HEAD が続きます
修正して再提出する
vim test.rb
git commit -a -m 'made other changes'
一部の新しいコンテンツがマスター ブランチに送信されるため、現在のプロジェクトにブランチ フォークがあり、新しい送信オブジェクトが生成されます。
異なるブランチについては、そのブランチ上で異なるコンテンツを操作し、後でマージすることができます。マージする必要があるコマンドは、ブランチ、チェックアウト、コミットのみです。
プロジェクトフォークの歴史
git log --oneline --decorate --graph --all
コミット履歴、各ブランチのポイント、プロジェクトのブランチが出力されます。
git log --oneline --decorate --graph --all
* c2b9e (HEAD, master) Made other changes
| * 87ab2 (testing) Made a change
|/
* f30ab Add feature #32 - ability to add new formats to the central interface
* 34ac2 Fix bug #1328 - stack overflow under certain conditions
* 98ca9 initial commit of my project
以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。 |
1. Pythonプログラミングの入門から習得まで
2.インターフェース自動化プロジェクトの実戦
3. Web自動化プロジェクトの実戦
4. アプリ自動化プロジェクトの実戦
5. 一流メーカーの再開
6. DevOps システムのテストと開発
7. 一般的に使用される自動テストツール
8、JMeterのパフォーマンステスト
9. まとめ(最後にちょっとしたサプライズ)
夢を胸に抱いていれば、果てしない頂を登ることができ、勇敢に前進すれば、自分だけの輝きを生み出すことができる。艱難や困難を恐れず、闘いの力が人生の隅々まで照らし出す、迷わず夢の光を追い求めよう!
たゆまぬ努力だけが輝きを生み、粘り強い闘いだけが夢を追いかけ、前に進む決意だけが奇跡を生みます。自分を信じてください、あなたはすべてを克服することができます!
絶えず努力することによってのみ、私たちは自分自身を超えることができ、粘り強く続けることによってのみ、輝かしい人生を迎えることができます。どんなに困難や挫折があっても、自分の可能性を信じて勇敢に突き進んでいけば、必ず成功と栄光が得られるでしょう!