インターネットの巨人がSVNではなくGitを使用するのはなぜですか?(Gitコアコマンドと原則の概要が含まれています)

前に書く

最近、多くの小規模パートナーは、いくつかの基本的なツールの使用にあまり慣れていないことがわかりました。たとえば、分散コード管理ウェアハウスであるGitは、多くの小規模パートナーにあまり馴染みがないか、あまり馴染みがありません。Gitについて聞いたことがない友達もいるので、SVNを使っているだけです。誰もが知っているように、今日の主要なインターネット大手と新興のインターネットダークホース会社は基本的にGitを使用し、基本的にはSVNの使用を放棄しました。どうして?一緒に見下ろしましょう。

GitとSVNの違い

さまざまな保管方法

Gitはコンテンツをk / vデータベースと同様のメタデータ形式で保存しますが、SVNはファイルベースです(SVNの新しいバージョンはメタデータストレージに変更されています)。

ここでは、Gitの簡単な使用例を示します。

cd .git/objects/df/
git cat-file -p df70460b4b4aece5915caf5c68d12f560a9de56e
echo 'version1' > text.txt
git hash-object -w text.txt

さまざまな使用方法

ファイルをローカルでリモートサービスにプッシュするには、SVNはcommintのみを必要とし、Gitは追加、圧縮、およびプッシュの3つのステップを必要とします。

たとえば、次の図を使用して、SVNの使用をシミュレートします。

ここに画像の説明を挿入

次の図を使用して、Gitの使用をシミュレートできます。

ここに画像の説明を挿入

バージョン管理モードが異なります

Gitは分散バージョン管理システムですが、SVNはリモートの集中管理システムです。

たとえば、次の図を使用して、SVNの集中管理を表すことができます。
ここに画像の説明を挿入

次の図を使用して、Gitの分散管理を表すことができます。

ここに画像の説明を挿入

Gitコアコマンドの概要

Gitクライアントのインストール

公式クライアントのダウンロード:https : //git-scm.com/downloads

他のクライアントをダウンロード:https : //tortoisegit.org/download/

Gitコマンドの使用

(1)リモートウェアハウスに基づいてローカルにクローン

git clone <remote_url>

(2)現在のディレクトリはgitローカルウェアハウスとして初期化されます

git init  <directory>

(3)mvnテンプレートに基づいてプロジェクトを作成する

mvn archetype:generate

ローカルに追加

(1)指定したファイルを一時記憶領域に追加する

git add <fileName>

(2)指定したディレクトリを一時記憶領域に追加します

git add <directory>

(3)すべて追加

git add -A

(4)指定したディレクトリとサブディレクトリを一時記憶領域から削除します

git rm --cached target -r

(5)構成ファイル.gitignoreを追加します

ローカルで送信

(1)地元の倉庫に提出する

git commit file -m '提交的注释信息'

(2)地元の倉庫にすばやく提出する

git commit -am '快捷添加与提交'

支店管理

(1)現在のブランチを表示する

git branch [-avv]

(2)現在のブランチに基づいて新しいブランチを作成する

git branch <branch name>

(3)提出に基づいて新しいブランチを作成する

git branch <branch name> <commit id>
$ git branch -d {
    
    dev}

(4)分岐を切り替える

git checkout <branch name>

(5)ブランチのマージ

git merge <merge target>

(6)競合を解決する

競合が原因で自動マージが失敗した場合、ステータスは現在マージ中です。手動で変更して再送信する必要があります(コミット)

リモート倉庫管理

(1)リモート構成の表示

git remote [-v]

(2)リモートアドレスを追加する

git remote add origin http:xxx.xxx

(3)リモートアドレスを削除する

git remote remove origin 

(4)新しいブランチをリモートにアップロードする

git push --set-upstream origin master 

(5)ローカルブランチをリモートに関連付ける

git branch --track --set-upstream-to=origin/test test

タグ管理

(1)現在のビュー

git tag

(2)ブランチを作成する

git tag <tag name> <branch name>

(3)ブランチを削除する

git tag -d <tag name>

ログ管理

(1)現在のブランチの下のすべてのコミットログを表示する

git log

(2)現在のブランチの下のすべてのコミットログを表示する

git log {
    
    branch}

(3)単一行表示ログ

git log --oneline

(4)2つのバージョンの違いを比較する

git log master..experiment

(5)送信された結合ネットワークをグラフで表示する

git log --pretty=format:'%h %s' --graph

Gitの基本原則

GITストレージオブジェクト(hashMap)

Gitは、コンテンツアドレス可能なファイルシステムです。そのコアパーツは、単純なKey-Valueデータストアです。データベースに任意のコンテンツを挿入すると、ハッシュキーが返されて値が取得されます。 。

(1)Git Key-Valueライブラリにデータを挿入する

echo 'binghe' | git hash-object -w --stdin 79362d07cf264f8078b489a47132afbc73f87b9a

(2)キーに基づいて指定されたコンテンツを取得する

git cat-file -p 79362d07cf264f8078b489a47132afbc73f87b9a

この関数に基づいて、Gitは各ファイルバージョンのコンテンツをデータベースに保存し、バージョンをロールバックするときに、キーの1つを使用してピリオドを取得および置換します。

Gitバージョンの書き込みおよびロールバックプロセス

(1)すべてのgitオブジェクトを見つける

 find .git/objects/ -type f

(2)バージョン1を書く

echo 'version1' > README.MF; git hash-object -w README.MF;

(3)バージョン2を書く

echo 'version2' > README.MF; git hash-object -w README.MF;

(4)バージョン3を書く

echo 'version3' > README.MF; git hash-object -w README.MF;

(5)指定したバージョンをロールバックする

git cat-file -p c11e96db44f7f3bc4c608aa7d7cd9ba4ab25066e > README.MF

したがって、通常のgit addは実際には、変更されたコンテンツをKey-Valueライブラリに挿入することです。git add README.MFを実行すると、ファイルをデータベースに書き込むためにgit hash-object -w README.MFを実行するのと同じことになります。

ストレージの問題は解決しましたが、コンテンツのみを保存でき、ファイル名は保存できません。ロールバックする場合、どのコンテンツがどのファイルに対応するかをどのようにして知ることができますか?次に、ファイル名の保存の問題を解決するツリーオブジェクトを見てみましょう。

Gitツリーオブジェクト

ツリーオブジェクトはファイル名の問題を解決します。その目的は、複数のファイル名とそれらに対応するキー、およびオペレーティングシステムのファイルとして理解できる他のツリーオブジェクトへの参照を含む複数のファイル名をまとめることです。フォルダ。フォルダには、複数のファイルと他の複数のフォルダが含まれています。

各ブランチはツリーオブジェクトに関連付けられており、現在のブランチの下にあるすべてのファイル名と対応するキーが格納されています。次のコマンドで表示できます

 git cat-file -p master^{
    
    tree} 

Git commitオブジェクト

送信は、現在のバージョンのスナップショットです。スナップショットは、オブジェクトを送信することによって保存されます。格納されるコンテンツは、トップレベルのツリーオブジェクト、前回送信されたオブジェクト、送信者のユーザー名と電子メールアドレス、および送信タイムスタンプです。コメントを送信します。

$ git cat-file -p b2395925b5f1c12bf8cb9602f05fc8d580311836 
tree 002adb8152f7cd49f400a0480ef2d4c09b060c07 
parent 8be903f5e1046b851117a21cdc3c80bdcaf97570 
author binghe <[email protected]> 1532959457 +0800 
committer binghe <[email protected]> 1532959457 +0800 

要約すると、ファイルを変更して送信するプロセスから、合計3つのオブジェクトが生成されると推測できます。

  • コンテンツオブジェクト:ファイルのコンテンツが格納されます
  • ツリーオブジェクト:ファイル名とコンテンツオブジェクトのキーが格納されます
  • 送信オブジェクト:ツリーオブジェクトのキーを格納し、コメントを送信します。

Gitリファレンス

gitブランチ{branchName}を実行すると、ブランチが作成されます。本質は、gitで指定したコミットに基づいて参照ファイルを作成し、それを.git \ refs \ heads \に保存することです。

(1)ブランチを作成する

 git branch dev 
 cat.git\refs\heads\dev

Gitには3種類の参照があります。

  • ブランチリファレンス
  • リモートブランチリファレンス
  • ラベル参照

(2)2つのバージョンのクエリと比較

 git log master..experiment

(3)バージョン提出履歴ネットワーク

git log --pretty=format:'%h %s' --graph

(4)ブランチツリーを表示する

git cat-file -p master^{
    
    tree}

さて、今日はそれについて話しましょう!より多くの人が一緒に見て、一緒に学び、一緒に進歩することができるように、それを好きで、それを見て転送している誰かにそれを与えることを忘れないでください!

おすすめ

転載: blog.csdn.net/l1028386804/article/details/108569833