Gitは分散バージョン管理システムです。これは主に、ソフトウェア開発者がソースコード管理のために使用します。 Gitは無料のオープンソースソフトウェアであり、多くの大規模な組織がGitを使用して巨大なコードベースを管理しています。
このチュートリアルでは、Gitについて理解します。これは実践的なガイドになります。このチュートリアルは、Gitがシステムにインストールされていることを前提としています。
Gitユーザーの初期構成
まず、Gitユーザーの設定を構成する必要があります。これらの設定は、現在のシステムに存在するすべてのリポジトリまたは特定のリポジトリに対して行うことができます。例を挙げてこれを理解しましょう:
ユーザーID
Gitでは、名前と電子メールアドレスを指定してユーザーIDを指定できます。この情報は、各コミット操作中に使用されます。ターミナルで以下のコマンドを実行してIDを割り当てます:
$ git config --global user.name "Linuxtechi User" $ git config --global user.email "[email protected]"
編集者
この設定は、コミットメッセージを提供するときに使用されるエディターを構成します:
$ git config --global core.editor vim
圧縮
この設定は、使用する圧縮レベルを構成します。圧縮の有効な範囲は-1〜9です。-1の値はzlib圧縮を示し、デフォルトの圧縮レベルです。 0の値は圧縮がないことを意味し、1から9はさまざまな速度とサイズのトレードオフであり、9が最も遅いです。
$ git config --global core.compression 2
差分ツール
この設定は、差分ビューアツールを構成します。たとえば、以下のコマンドは、vimdiffをdiffツールとして構成します。
$ git config --global diff.tool vimdiff
上記のコマンドでは、 –globalを使用しました どこでもオプション。これにより、この構成がグローバルになります。これは、現在のシステムに存在するすべてのリポジトリに同じ構成が適用されることを意味します。構成リポジトリを特定するには、–globalオプションを削除するだけです。
リスト構成
Git構成を一覧表示するには、ターミナルで以下のコマンドを実行します。
$ git config -l </ pre>このコマンドは次の出力を生成します:
core.repositoryformatversion =0core.filemode =truecore.bare =falsecore.logallrefupdates =truecore.editor =vimcore.compression =2user.name=Linuxtechiユーザー[メール保護]diff.tool=vimdiffGitリポジトリ
リポジトリは、ソースコードが保存される場所です。新しいリポジトリを作成することも、既存のリポジトリを使用することもできます。新しい空のリポジトリを作成するには、以下のコマンドを実行します:
$ mkdir my-repo.git $ cd my-repo.git $ git init --bareInitialized empty Git repository in my-repo.gitこの方法は、新しいプロジェクトを開始するときに役立ちます。もう1つの方法は、既存のリポジトリを使用することです。このようなリポジトリは、GitHubなどのリモートサーバーでホストされます。リモートリポジトリをダウンロードするには、次のようにcloneコマンドを使用します。
$ git clone https://github.com/linuxtechiuser/my-repo.git上記のコマンドでは、最後の引数はリモートリポジトリのパスです。
Gitワークフロー
このセクションでは、gitワークフローについて説明します。
新しい変更を導入する
最初のステップは、新しい変更を導入することです。これは、新しいファイルの追加または既存のファイルの更新である可能性があります。新しいファイルを作成し、既存のファイルを変更しましょう
$ touch AUTHORS#新しいファイルを作成$echo"新しいコンテンツ">>README#既存のファイルを更新リポジトリのステータスを確認する
Gitはコンテンツ追跡システムであり、上記の2つの変更を識別します。リポジトリのステータスを確認しましょう:
$ git status -s M README ??著者上記の出力では、既存のファイルが変更されたことを示すREADMEの前に文字Mが表示されます。一方 ?? AUTHORSの前に表示されます。これは、これが新しいファイルであり、Gitがそれを認識していないため、このようなファイルは追跡されていないファイルと呼ばれます。
ファイルをチェンジセットに追加
この新しいファイルを追跡するようにGitに指示しましょう。これは、addコマンドを使用して実現できます。この操作により、このファイルに加えられた変更の追跡が開始されます。
$ git add AUTHORS今すぐリポジトリのステータスを確認しましょう:
$ git status -sA AUTHORSM README上記の出力は、このファイルがGitの下に新しく追加されたことを示すAUTHORSの前のAを示しています。このコマンドを使用して、ファイルをいくつでも追加できます。
変更セットからファイルを削除する
この新しく追加されたファイルの追跡を解除するようにGitに指示しましょう。これは、resetコマンドを使用して実現できます。この操作により、変更セットからファイルが削除されます
$ git reset AUTHORS $ git status -s M README ??著者上記の出力は、AUTHORSファイルがGitによって追跡されていないことを示しています。
変更をコミットする
Gitでは、チェンジセットの一部であるファイルがコミットを形成します。各コミットは一意のIDを取得します。最初にチェンジセットを作成しましょう
$ git add AUTHORS $ git add README次に、コミットメッセージを使用してローカルリポジトリに変更をコミットしましょう。以下のコマンドでは、-m引数はコミットメッセージを示します。
$ git commit -m "READMEを更新し、作成者を追加しました"上記のコマンドを実行すると、次の出力が生成されます:
[master 0b124eb] READMEを更新し、作成者を追加しました。2つのファイルが変更され、1つの挿入(+)作成モード100644作成者変更の確認
このセクションでは、リポジトリの変更を確認できるコマンドについて説明します。
コミットログを表示
リポジトリには、複数の作成者による複数のコミットを含めることができます。 logコマンドを使用して、使用可能なすべてのコミットを表示できます:
$ git log上記のコマンドを実行すると、次の出力が生成されます:
commit 0b124eb6d0109d837f6f9396c9937406abd3f456(HEAD-> master)作成者:Linuxtechiユーザー<[メール保護]>日付:Fri Jul 27 21:06:55 2018+0530READMEを更新して作成者を追加これは、以前に作成したコミットです。上記のコマンドの場合:
- 16進IDはコミットIDを表します
- コミットの作成者セクションには、これらの変更を行ったユーザーの詳細が表示されます
- 日付セクションには、コミットの日付とタイムスタンプが表示されます
短いコミットログを表示する
上記のコマンドは、各コミットに関する詳細情報を表示します。各コミットの使用に関する簡単な説明を表示するには、次のように1行のオプションを使用します。
$ git log --oneline
上記のコマンドを実行すると、次の出力が生成されます。
0b124eb(HEAD-> master)READMEを更新し、作成者を追加しました
コミットを表示
コミットIDは各チェンジセットに関連付けられています。このIDをshowコマンドで使用して、コミットの内容を表示できます。
$ git show 0b124eb6d0109d837f6f9396c9937406abd3f456
上記のコマンドを実行すると、次の出力が生成されます:
commit 0b124eb6d0109d837f6f9396c9937406abd3f456(HEAD-> master)作成者:Linuxtechiユーザー<[メール保護]>日付:Fri Jul 27 21:06:55 2018 +0530 READMEを更新し、AUTHORSdiff --git a / AUTHORS b/AUTHORSnewファイルモードを追加100644index 0000000..e69de29diff --git a / README b / READMEindex 980a0d5..5680123 100644 --- a / README +++ b / README @@ -1 +1,2 @@ Hello World!+新しいコンテンツ
差分を表示
Diffコマンドを使用すると、変更セットを作成する前に変更を確認できます。 Diffコマンドは、リポジトリとローカルワークスペースの違いを示します。 READMEファイルを変更して違いを確認しましょう
$ echo "Generating diff">> README $ git diffdiff --git a / README b / READMEindex 5680123..3158230 100644 --- a / README +++ b / README @@ -1,2 +1,3 @@ 「こんにちは世界」新しいコンテンツ+差分の生成
上記のコマンドの場合:
- +記号は、ファイルに追加された変更を示します
- –記号は、ファイルから削除された変更を示します
リモートリポジトリの操作
これまでは、ローカルリポジトリのみを使用していました。他の開発者は、ローカルであるため、私たちが行った変更を使用できません。したがって、コードのコラボレーションは不可能です。このセクションでは、リモートリポジトリとの対話を可能にするコマンドについて説明します
変更をリモートリポジトリに公開する
他の開発者が使用できるように、ローカルの変更をリモートリポジトリに公開できます。変更を公開する前に、変更セットとローカルコミットを作成する必要があります。次のように、pushコマンドを使用して変更を公開できます。
$ git push
このコマンドは、変更をローカルワークスペースからリモートリポジトリにコピーします。 Gitでは、この操作はプッシュ操作と呼ばれます。
ワークスペースをリモートリポジトリと同期する
多くの開発者は、ワークスペースの変更をリモートリポジトリに公開できます。 Gitを使用すると、これらの変更をダウンロードして、ワークスペースをリポジトリと同期できます。これは、pullコマンドを使用して実現できます:
$ git pull
Gitでは、この操作はプル操作と呼ばれます。
その他のGitコマンド
このセクションでは、日常のタスクを実行するのに役立つその他のGitコマンドについて説明します。
最新のコミットを変更する
Gitを使用すると、最新のコミットを変更できます。このメソッドを使用して、新しいコミットの作成を回避できます。これは主に、以前のコミットメッセージを変更するために使用されます。最新のコミットを変更するには、 –修正を使用します 次のオプション:
$echo"さらに新しい変更">>README $ git add README $ git commit --amend-m"これは修正されたコミットです
次に、コミットログを確認しましょう:
$ git logcommit 8bf67aec1d1de87f03ab6aae93940b17826fde1c(HEAD-> master)作成者:Linuxtechiユーザー<[メール保護]>日付:金7月27日21:54:552018+0530これは修正されたコミットです
上記の出力を注意深く観察すると、新しいコミットメッセージ、そのID、および新しいタイムスタンプを確認できます。
追跡されていないファイルを削除する
追跡されていないファイルは、Gitに知られていないファイルです。 cleanコマンドを使用して、追跡されていないすべてのファイルを削除できます。
追跡されていないファイルをいくつか作成しましょう:
$ touch delete-me-1 delete-me-2 delete-me-3
上記の追跡されていないファイルをすべて削除するには、 -fを指定してcleanコマンドを使用します 次のオプション:
$ git clean -fRemoving delete-me-1Removing delete-me-2Removing delete-me-3
このコマンドはファイルを完全に削除するため、注意して使用してください。
特定の作成者のコミットを表示する
logコマンドを使用すると、すべての作成者のコミットが表示されます。特定の作成者のコミットを表示するには、次のように作成者フラグを使用します。
$ git log --author =Linuxtechi
上記のコマンドを実行すると、Linuxtechi作成者のすべてのコミットが次のように一覧表示されます。
commit 8bf67aec1d1de87f03ab6aae93940b17826fde1c(HEAD-> master)作成者:Linuxtechiユーザー<[メール保護]>日付:金7月27日21:54:552018+0530これは修正されたコミットです
各ファイルの履歴を1行ずつ表示
行ごとの履歴を表示するには、blameコマンドを使用できます。
$ git blame README
上記のコマンドを実行すると、次の出力が生成されます:
76294131(Linuxtechiユーザー2018-07-27 21:12:11 -0700 1)Hello World!8bf67aec(Linuxtechiユーザー2018-07-27 21:54:55 +0530 2)新しい変更8bf67aec(Linuxtechiユーザー2018-07 -27 21:54:55 +0530 3)さらに別の変更
上記のコマンドの場合:
- 最初の列はコミットIDを示します
- 2番目の列は作成者を示します
- 3番目の列はタイムスタンプを示します
- 最後の列は行番号とファイルの内容を示します
ステージング領域からの差分を表示
addコマンドを使用してチェンジセットを作成すると、ファイルは論理的にステージング領域に移動されます。この例で見てみましょう:
$echo"ステージング領域をデモンストレーションしましょう">>README $ git add README $ git diff
上記のコマンドでは、ファイルがステージング領域に移動されるため、違いは表示されません。 –段階的な操作を使用して違いを確認しましょう:
$ git diff --stageddiff --git a / README b / READMEindex 74729a2..8bc5ffd 100644 --- a / README +++ b / README @@ -1,3 +1,4 @@ Hello World!新しい変更点さらに別の変更点+ステージング領域のデモンストレーションをしましょう
結論
このチュートリアルでは、Gitの基本的な操作について簡単な例を挙げて説明しました。このチュートリアルは、Git初心者にとって良い出発点です。
続きを読む: Linuxでの実用的な例を使用してGitコマンドを学ぶ–パート2