1. ホーム
  2. ギット

ジット

2022-03-17 21:31:38

1. Gitの紹介

Git(発音:/gɪt/.)は、オープンソースの分散型バージョン管理システムで、非常に小さなプロジェクトから非常に大きなプロジェクトまでのバージョン管理を効率的かつ高速に処理することができます。Gitは、Linuxカーネル開発を管理するためにLinus Torvalds氏によって開発されたオープンソースのバージョン管理ソフトウェアです。

Gitは分散型バージョン管理システムなので、中央のサーバーを持たず、みんなのコンピュータが完全なリポジトリになっているので、作業するときにインターネットに接続する必要はありません。さて、みんなのコンピュータが完全なリポジトリを持っているわけですが、どうやって複数人で共同作業をするのでしょうか?例えば、あなたが自分のパソコンでファイルAを変更し、他の誰かがその人のパソコンでファイルAを変更したとします。このとき、二人はそれぞれの変更点をお互いにプッシュするだけで、お互いの変更点を見ることができます。

主な機能は以下の通りです。

1. バージョン管理

2. 分散型

3. サーバーからローカルにコードをダウンロードし、ローカルで開発し、サーバー側にコミットする流れになります

git は svn よりも強力で、多くのコマンドを持っています。このブログでは、いくつかの一般的なコマンドの使い方を詳しく説明します。

2. GitとSVNの比較

1. gitは分散型、svnは中央集権型。(核心部分)

2. git は復元しやすいように過去のバージョンごとに完全なファイルを保存するが、svn は diff ファイルを保存し、過去のバージョンは復元不可能である。(コア)

3. git はほとんどの作業をオフラインで行うことができますが、svn はできません。

4. git は、ブランチとマージをよりエレガントに実装しています。

5. git は、変更を取り消したり、過去のバージョンを変更したりする機能が充実している。

6. git はより速く、より効率的です。

これらの違いから、特にローカルリポジトリを持つgitが明らかに有利であると言えます。

3. Gitのいくつかの概念

I. 作業ディレクトリ

作業ディレクトリは、プロジェクトの特定のバージョンに対応するコンテンツを個別に抽出したものです。これらは、Gitリポジトリの圧縮されたデータベースから抽出されたファイルで、あなたが使用または修正するためにディスク上に配置されます。

II. ステージングエリア(インデックス)

は、次回にコミットされるファイルの一覧に関する情報を保持するファイルで、通常はGitリポジトリのディレクトリに置かれます。インデックス''と呼ばれることもありますが、一般的にはやはりステージング・エリアと呼ばれることが多いようです。

III. Git リポジトリのディレクトリ

これは、Gitがプロジェクトのメタデータとオブジェクト・データベースを保持する場所です。これはGitの最も重要な部分であり、他のマシンからリポジトリをクローンするときにデータがコピーされる場所です。

4. Gitのワークフロー

Gitの基本的なワークフローは以下の通りです。

作業ディレクトリのファイルを修正する > ファイルをステージングし、ステージングエリアにファイルのスナップショットを置く > 更新をコミットし、ステージングエリアのファイルを見つけ、スナップショットをGitリポジトリのディレクトリに恒久的に格納する。

あるファイルの特定のバージョンがGitディレクトリに保存されている場合、そのファイルをコミットします。変更が加えられてステージング・エリアに置かれている場合、それはステージングされています。最後に取り出してから変更を加えたが、ステージング・エリアに入れていない場合は、モディファイドとなります。

5. Gitのインストール

yum install git -y

再起動操作不要

6. git共通オプションの紹介

[root@localhost ~]# git

usage: git [--version] [--help] [-c name=value].

[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]です。

[-p|-paginate|-no-pager] [--no-replace-objects] [--bare] です。

[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]

<command> [<args>].

よく使われるgitコマンドを紹介します。

add ファイルの内容をステージングエリア(インデックス)に追加します。

bisect 二項対立のルックアップでバグを導入する変更点を探し出す

ブランチ ブランチの一覧表示、作成、削除

checkout ブランチの切り替えとロールバック

clone リポジトリを新しいディレクトリにクローンします。

commit リポジトリへの変更をログに記録する

diff は、コミット間、コミットとワークスペース間の差分などを表示します。

fetch は、他のリポジトリからオブジェクトや参照をダウンロードします。

grep パターンに一致する行を出力

init は空の Git リポジトリを作成するか、既存のリポジトリを再初期化し、作業ディレクトリを初期化します。

log はコミットログ、過去のバージョン管理情報を表示します。

merge ブランチをマージする

mv ファイル、ディレクトリ、またはシンボリックリンクを移動または名前変更します。

プルリモートコードをこの資本にプルする

push ローカルリポジトリのコードをリモートリポジトリにプッシュする

ローカルコミットを更新された上流ブランチにリベースする

ロールバックバージョンをリセット

rm ワークスペースとインデックスからファイルを削除します。

様々な種類のオブジェクトを表示する

status 作業ディレクトリ内のテキストの状態を表示します。

tag GPG 署名されたタグオブジェクトの作成、リストアップ、削除、検証を行います。

7. gitの簡単な使い方デモ

ステップ1:ディレクトリの作成

[root@localhost ~]# mkdir /liang

[root@localhost ~]# cd /liang

[root@localhost ~]# ls

ステップ2:ディレクトリの初期化

[root@localhost liang]# git init

空のGitリポジトリを/liang/.git/に初期化します。

[root@localhost liang]# ls -a

. .git # これはgitの作業ディレクトリなので、後でgitディレクトリで作業したい場合は、.gitのあるディレクトリに移動する必要があります。

ステップ3:テキストの作成

[root@localhost liang]# echo '123'>>test

[root@localhost liang]# cat test

123

ステップ4:ステージング・エリアへの追加

[root@localhost liang]# git add . # .はカレントディレクトリにあるすべてのファイルをコミットすることを意味します。

[root@localhost liang]# git log

fatal: 不正なデフォルトリビジョン 'HEAD' # リポジトリが空であることを意味します。

ステップ5:リポジトリへのコミット

[root@localhost liang]# git commit -m "v1" # v1 は名前です。

[マスター (ルートコミット) fa56b78] v1

コミッター:ルート <[email protected]>。

名前とメールアドレスは、ログイン名とホスト名から自動的に設定されます。それらが正しいかどうか確認してください。

で、それらが正しいことを確認してください。以下のコマンドを実行することで、このメッセージが表示されないようにすることができます。

git config --global user.name "あなたの名前"

git config --global user.email [email protected]

一度設定すれば、このコミットに使用したユーザーのIDを以下のコマンドで修正することができます。

git commit --amend --reset-author

1ファイル変更、1ファイル挿入(+)

クリエイトモード 100644テスト

[root@localhost liang]# git config --global user.name "あなたの名前"

[root@localhost liang]# git config --global user.email [email protected]

[root@localhost liang]# git log

commit fa56b781be49d0f809151946cec11f991f541b41

著者:ルート <[email protected]>。

日付 Mon Jun 17 14:40:15 2019 +0800

v1 # リポジトリの追加に成功

ステップ6:テキストを再度編集する

[root@localhost liang]# cat test

123

[root@localhost liang]# echo '456'>>test

[root@localhost liang]# cat test

123

456

ステップ7:ステージングエリアに追加を行う

[root@localhost liang]# git add . # .はカレントディレクトリにあるすべてのファイルをコミットすることを意味します。

ステップ8:リポジトリへのコミット

[root@localhost liang]# git commit -m "v2"

[マスター b0f83dc] v2

1ファイル変更、1ファイル挿入(+)

ステップ9:過去のバージョンを見る

[root@localhost liang]# git log

commit b0f83dc911cae51cebc3f9a9e834bee8c31aa0ed

著者 あなたの名前 <[email protected]>。

日付 Mon Jun 17 14:47:13 2019 +0800

v2

commit fa56b781be49d0f809151946cec11f991f541b41 このコードでロールバックします。

著者:ルート <[email protected]>。

日付 Mon Jun 17 14:40:15 2019 +0800

v1

ステップ10: バージョンをv1までロールバックする

[root@localhost liang]# cat test

123

456

[root@localhost liang]# git reset --hard fa56b781be49 # ロールバックするバージョンのコミットコードをコピーしてください。最低7桁

HEAD は現在 fa56b78 v1 に配置されています。

[root@localhost liang]# cat test

123

8. 各ステージのテキストを元に戻すデモを行う

8.1 ワークスペースの内容を元に戻す

ステップ1:すでに投稿された文章を編集する

[root@localhost liang]# cat test

123

[root@localhost liang]# echo '123'>>test

[root@localhost liang]# cat test

123

123

ステップ2:テキストの状態を確認する

[root@localhost liang]# git status

# branch master

# 変更点はまだコミット用にステージングされていません。

# (コミットする内容を更新するには "git add <file>... " を使用します)

# (ワークスペースの変更を破棄するには "git checkout -- <file>... " を使用します)

#

# 修正:テスト

#

まだコミットに追加されていない変更("git add" や "git commit -a" を使用したもの)。

ステップ3:ワークスペースの内容を元に戻す

[root@localhost liang]# git checkout -- test # test はアンドゥするファイル名です。

ステップ4:テキストの状態を再度確認する

[root@localhost liang]# git status

# branch master

コミットするファイルがないため、ワークスペースをクリーンアップ

[root@localhost liang]# cat test

123

8.2 ステージングエリアの内容を元に戻す

ステップ1:すでに投稿された文章を編集する

[root@localhost liang]# cat test

123

[root@localhost liang]#.

[root@localhost liang]# echo '456'>>test

[root@localhost liang]# cat test

123

456

ステップ2:ステージング・エリアへのファイル送信

[root@localhost liang]# git add .

ステップ3:テキストの状態を確認する

[root@localhost liang]# git status

# branch master

# コミットする変更点

# (ステージングエリアから引き出すには "git reset HEAD <file>... " を使用します)

#

# 修正:テスト

#

ステップ4:ステージングエリアにあるファイルを作業ディレクトリにUndoする

[root@localhost liang]# git reset HEAD test

リセット後にステージングエリアを引き出すための変更。

Mテスト

ステップ5:テキストの状態を確認する

[root@localhost liang]# git status

# branch master

# 変更点はまだコミット用にステージングされていません。

# (コミットする内容を更新するには "git add <file>... " を使用します)

# (ワークスペースの変更を破棄するには "git checkout -- <file>... " を使用します)

#

# 修正:テスト

#

まだコミットに追加されていない変更("git add" や "git commit -a" を使用したもの)。

ステップ6:ワークスペース内のテキストを元に戻す

[root@localhost liang]# git checkout -- test

[root@localhost liang]# git status

# branch master

コミットするファイルがないため、ワークスペースをクリーンアップ

[root@localhost liang]# cat test

123

9. バージョン管理

ステップ1: テキストを編集する

[root@localhost liang]# cat test

123

[root@localhost liang]# echo '789' >> test

ステップ2:ステージング・エリアにテキストを追加する

[root@localhost liang]# git add test

[root@localhost liang]# git status

# branch master

# コミットする変更点

# (ステージングエリアから引き出すには "git reset HEAD <file>... " を使用します)

#

# 修正:テスト

#

ステップ3:ステージングエリアテキストを送信する

[root@localhost liang]# git commit -m "v3"

[マスター e465660] v3

1ファイル変更、1ファイル挿入(+)

ステップ4:バージョン情報を見る

[root@localhost liang]# git log

commit e46566079f4264873160822b9ad673c308be4b4f

著者 あなたの名前 <[email protected]>。

日付 Mon Jun 17 15:24:11 2019 +0800

v3

commit fa56b781be49d0f809151946cec11f991f541b41

著者:ルート <[email protected]>。

日付 Mon Jun 17 14:40:15 2019 +0800

v1

ステップ5:バージョンのロールバック

まず、git log を使用している人から commitID を取得し、ロールバックを行います。

[root@localhost liang]# git reset --hard fa56b781be4

HEAD は現在 fa56b78 v1 にあります。

ステップ6:バージョン情報を見る

[root@localhost liang]# git log

commit fa56b781be49d0f809151946cec11f991f541b41

著者:ルート <[email protected]>。

日付 Mon Jun 17 14:40:15 2019 +0800

v1

考える:どうすればv3にフォールバックできるのか?

ステップ 1: git reflog を使ってコミット ID を取得します。

[root@localhost liang]# git reflog

fa56b78 HEAD@{0}: リセット: fa56b781be4 に移動します。

e465660 HEAD@{1}: コミット: v3

fa56b78 HEAD@{2}: リセット: fa56b781be49 に移動します。

b0f83dc HEAD@{3}: コミット: v2

fa56b78 HEAD@{4}: コミット(初期): v1

ステップ2:バージョンをv3までロールバックする

[root@localhost liang]# git reset --hard e465660

HEAD は現在 e465660 v3 にあります。

[root@localhost liang]# cat test

123

789

10. gitブランチの紹介

ほとんどすべてのバージョン管理システムは、何らかの形でブランチをサポートしています。ブランチを使うということは、自分の作業をメインの開発スレッドから切り離して、メインの開発スレッドに干渉しないようにすることができるということです。

Gitはブランチの扱いが驚くほど軽量で、新しいブランチの作成はほとんど一瞬で、ブランチの切り替えも同様に簡単です。他の多くのバージョン管理システムとは異なり、Gitは、たとえ一日に何度も行うとしても、ワークフローにおいてブランチとマージを頻繁に使用することを推奨します。

11. gitブランチの作成と切り替え

ステップ1: ブランチを見る

[root@localhost liang]# git branch

* マスター

ステップ2:ブランチの作成

[root@localhost liang]# git branch a # a はブランチ名です。

[root@localhost liang]# git branch

a

* マスター

ステップ3:ブランチの切り替え

[root@localhost liang]# git checkout a

ブランチ 'a' に切り替えます。

[root@localhost liang]# git branch

* a # * どこがどのブランチにあるか

マスター

12. gitブランチの使用デモ

ステップ1: kenブランチのテキストを操作する

[root@localhost liang]# git branch

* a

マスター

[root@localhost liang]# ls

テスト

[root@localhost liang]# cat test

123

789

[root@localhost liang]# echo 'liang'>> test

[root@localhost liang]# git add

ファイルが指定されておらず、ファイルが追加されていません。

もしかしたら、'git add .

[root@localhost liang]# git add .

[root@localhost liang]# git commit -m "v4"

[a 706bf14] v4

1ファイル変更、1ファイル挿入(+)

ステップ2: kenブランチのバージョン情報を確認する

[root@localhost liang]# git log

commit 706bf14926abb9804a34853c9cd9eb1f791bb28a

著者 お名前 <[email protected]>。

日付 Mon Jun 17 15:37:04 2019 +0800

v4

commit e46566079f4264873160822b9ad673c308be4b4f

著者 あなたの名前 <[email protected]>。

日付 Mon Jun 17 15:24:11 2019 +0800

v3

commit fa56b781be49d0f809151946cec11f991f541b41

著者:ルート <[email protected]>。

日付 Mon Jun 17 14:40:15 2019 +0800

v1

ステップ3: masterブランチに切り替える

[root@localhost liang]# git checkout master

ブランチ 'master' に切り替えます。

[root@localhost liang]# git branch

a

* マスター

ステップ4:バージョン情報を見る

[root@localhost liang]# git log

commit e46566079f4264873160822b9ad673c308be4b4f

著者 あなたの名前 <[email protected]>。

日付 Mon Jun 17 15:24:11 2019 +0800

v3

commit fa56b781be49d0f809151946cec11f991f541b41

著者:ルート <[email protected]>。

日付 Mon Jun 17 14:40:15 2019 +0800

v1

ステップ5:テキストメッセージの表示

[root@localhost liang]# cat test

123

789

ステップ6:ブランチをマージする

[root@localhost liang]# git merge a # a はマージするブランチです。

e465660..706bf14 を更新しました。

早送り

テスト|1+(プラス

ファイル変更1件、挿入1件(+)

ステップ7:バージョン情報を再度確認する

[root@localhost liang]# git log

commit 706bf14926abb9804a34853c9cd9eb1f791bb28a

著者 あなたの名前 <[email protected]>。

日付 Mon Jun 17 15:37:04 2019 +0800

v4

commit e46566079f4264873160822b9ad673c308be4b4f

著者 あなたの名前 <[email protected]>。

日付 Mon Jun 17 15:24:11 2019 +0800

v3

commit fa56b781be49d0f809151946cec11f991f541b41

著者:ルート <[email protected]>。

日付 Mon Jun 17 14:40:15 2019 +0800

v1

ステップ8:テキストメッセージの表示

[root@localhost liang]# cat test

123

789

リャン

要約すると

ブランチの上で開発されたものは、実際には私たちのメインブランチに影響を与えません

子ブランチで編集した内容を確認できるのは、master ブランチがマージブランチを実行したときだけです。

これにより、masterブランチの開発における多くの混乱やミスを大幅に減らすことができます。