GitLabとGit Essentials - ハンズオンラボ: Gitをローカルで使用する
完了までの見積時間: 45分
目的
このラボでは、ローカルコンピュータ上のリポジトリを使用し、次の概念について学習します:
- リポジトリのクローン
- ブランチの作成、使用、マージ
- ファイルの編集とコミット
- リモートリポジトリとの変更のプッシュとプル
ラボでコピー&ペーストを求められるコードを理解するために時間をかけてください。不明なコードがあればインストラクターに質問して説明を受けてください。
このラボで使用される多くのGitコマンドは、GitLabの便利なgitチートシートにまとめられています。このラボでは、ローカルコンピュータを使用してインターネットへのSSHアクセスができる必要があります。マシンに必要な権限があることを確認してください。
タスクA. Gitがローカルにインストールされていることを確認する
-
コンピュータ上のターミナルを開き、次のコマンドを入力します:
git version
-
バージョン番号が表示された場合、Gitがインストールされています。エラーが発生した場合は、Gitのインストールに関するドキュメントを参照してください。
タスクB. SSHキーを生成する
GitLabはSSHプロトコルを使用してGitと安全に通信します。SSHキーを使用してGitLabリモートサーバーに認証すると、ユーザー名とパスワードを毎回入力する必要がありません。詳細についてはドキュメントを参照してください。
-
GNU/Linux、macOS、Windows 10には事前にインストールされているOpenSSHクライアントを使用します。現在のバージョンを確認するには、ターミナルまたはPowerShellで次のコマンドを実行します:
ssh -V
-
次のコマンドをターミナルまたはPowerShellで実行して、公開鍵と秘密鍵のペアを作成します。
ssh-keygen
-
最初のプロンプトでは、SSHキーを保存する場所を尋ねられます。コマンドがキーを保存する場所に注意してください。デフォルトでは、パスは
~/.ssh
、デフォルトの名前はid_rsa
になります。デフォルトのキーの場所と名前を受け入れるにはEnterを押してください。 -
2番目のプロンプトでは、キーファイルのパスワードを設定するように求められます。ローカルキーファイルの空のパスフレーズを使用するには、Enterを押してください。
ステップを簡単に保つため、キーファイルにパスワードを設定しないことにしました。空のパスフレーズは一般的にベストプラクティスとは考えられていません。必要に応じてパスフレーズを設定できます。
タスクC. GitLabプロフィールにSSHキーを追加する
-
Lab 1 で作成したプロジェクトをブラウザで開きます。
-
左上隅にあるユーザーアバターをクリックします。
-
ドロップダウンメニューから プロフィールを編集 をクリックします。
-
左側のナビゲーションペインで SSHキー をクリックします。
-
既存のターミナルウィンドウを開きます。
cd ~/.ssh
を使用してSSHキーを保存したディレクトリに移動し、ls
コマンドを使用してそのディレクトリ内のすべてのファイルのリストを印刷します。cd ~/.ssh ls
Windows の場合:
cd ~\.ssh
デフォルトでは、キーは
~/.ssh
ディレクトリに保存されます。別のディレクトリにキーを保存した場合は、代わりにそのディレクトリにcd
する必要があります。 -
2つのキーファイルが表示されます: 公開鍵(例:
id_rsa.pub
)と秘密鍵(例:id_rsa
)。公開鍵は.pub
で終わり、GitLab と共有する必要があるものです。セキュリティ警告: 秘密鍵を共有したり、ウェブサイトのフォームに貼り付けたりしてはいけません。公開鍵のみを共有すべきです。
-
cat id_rsa.pub
コマンドを使用して公開鍵の内容を表示します。cat id_rsa.pub
別のファイル名を使用した場合は、
cat <filename>.pub
となります。 -
画面に表示されたファイルの内容をクリップボードにコピーします。
-
GitLab Web UI のウェブブラウザで 新しいキーを追加 ボタンをクリックします。
-
公開鍵の内容を キー フィールドに貼り付けます。
-
タイトル フィールドに任意のタイトルを入力します(例: コンピュータのホスト名)し、キーを追加 をクリックします。
ヒント: キーが使用されている場所を簡単に特定するために、異なる好みの命名スキーマがない場合は、コンピュータのホスト名や説明(例:
alextanuki-m2-mac
)を使用すると良いでしょう。 -
使用方法の認証と署名が選択されていることを確認してください
この使用方法では、キーをGitLabで認証するために使用することができます。また、コミットに署名するためにも使用できます。署名されたコミットについては、ドキュメントで詳細を確認できます
-
有効期限日はデフォルトの日付のままにしてください
キーに有効期限日を設定し、定期的にキーをローテーションすることが理想的です。キーの有効期限日の推奨値は、セキュリティ要件によって異なります。
-
キーを追加ボタンをクリックします
-
ターミナルで、以下のコマンドを実行して接続をテストします
インスタンスのURLに
gitlab-learn-labs/*
が含まれる場合は、次のコマンドを実行します:ssh -T git@gitlab.com
インスタンスのURLに
ilt.gitlabtraining.cloud
が含まれる場合は、次のコマンドを実行します:ssh -T git@ilt.gitlabtraining.cloud
歓迎メッセージが表示され、エラーが表示されない場合、SSHキーが正しく設定されています。
接続が拒否されたというエラーが表示されるか、コマンドが機能しない場合は、ネットワークがSSH経由の接続をブロックしている可能性があります。その場合は、次のタスクに進んでください。
タスクD. GitLabプロジェクトリポジトリをローカルコンピュータにクローンする
リポジトリをクローンすると、リモートリポジトリからファイルがコンピュータにダウンロードされ、接続が作成されます。詳細については、ドキュメントを参照してください。
-
Lab 1で作成した
Top Level
プロジェクトに戻ります -
左サイドバーでCode > リポジトリをクリックします
-
プロジェクトリポジトリの右側で、Codeボタンをクリックします。SSHでクローンの下にあるURLをクリップボードにコピーします
-
ターミナルまたはPowerShellウィンドウで、ホームディレクトリに
training
という新しいディレクトリを作成し、以下のコマンドを使用してそのディレクトリに移動しますmkdir ~/training cd ~/training
Windowsの場合:
mkdir ~\training cd ~\training
-
git clone
コマンドを実行して、SSH でクローン からコピーしたコマンドを使用します。git clone <Clone with SSH Command>
接続がタイムアウトしたか、拒否されたというエラーが表示された場合、ネットワークがファイアウォールによってポート 22 の接続をブロックしている可能性があります。この場合は、HTTPS でクローン を選択し、Code ボタンから手順 D を繰り返してください。
-
cd
コマンドを使用して、クローンしたリポジトリに移動します。このディレクトリ内のすべてのファイルは Git によって追跡され、このラボで実行する Git コマンドはすべてこのディレクトリから実行する必要があります。cd top-level-project
-
ls -a
コマンドを使用して、ドットで始まる隠しファイルやディレクトリを含むディレクトリの内容を表示します。ls -a
.git
ディレクトリの存在に注意してください。.git
ディレクトリには、プロジェクトのメタデータとオブジェクトデータベースが保存されています。 -
次のコマンドを実行して、リポジトリの状態を確認します。
git status
出力に
nothing to commit, working tree clean
と表示されます。これは、このディレクトリ内のファイルが Git に保存されているバージョンと同じ内容を持っていることを意味します。
タスク E. ブランチで作業
ブランチはプロジェクトの作業ツリーのバージョンです。新しいプロジェクトを作成すると、GitLab はリポジトリに
main
(以前はmaster
)というデフォルトブランチを作成します。このデフォルトブランチの設定は、プロジェクト、サブグループ、グループ、またはインスタンスレベルで構成できます。詳細については、ドキュメント を参照してください。
-
コンピューター上で temporary_branch という新しいブランチを作成します。
git branch temporary_branch
-
作成したばかりのブランチに切り替えます。
git checkout temporary_branch
-
リポジトリ内のすべてのブランチをリストします。
git branch -a
ブランチリストを終了するには、キーボードで
q
(終了)を押します。 -
赤いブランチはリモートサーバーにあり、それは GitLab インスタンスであり、リポジトリが保存されている場所です。
-
アスタリスクは現在のブランチを示しています。
タスク F. ファイルを編集する
-
任意のテキストエディタ(Visual Studio Code、Sublime Text、notepad、vi など)を使用して、
README.md
の末尾にこの行を追加し、ファイルを保存します。ローカルで temporary_branch に追加された行
-
Git がファイルの変更を検出しているか確認します。
git status
出力には、
README
ファイルが変更されており、ステータスがmodified
であることが表示されます。赤いフォントの色は、README
ファイルがまだ Git のステージングエリアに追加されていないことを示しています。
タスク G. 編集したファイルを Git のステージングエリアに追加する
-
git add
コマンドを使用してファイルをステージングエリアに追加します。コマンドが成功すると、出力はありません。git add README.md
git add
はREADME.md
をファイルシステム上で移動させませんが、Git の「ステージングエリア」に追加します。 -
README.md
が今正常にコミットできる状態になっていることを確認します。git status
これで、
README
ファイルが緑色のフォントで表示されます。これは変更が Git のステージングエリアで追跡されていることを示しています。
タスク H. 編集をコミットする
-
以下の
git commit
コマンドを使用してステージングされたファイルをコミットします。各コミットには説明的なコミットメッセージを付けることが重要です。git commit -m "README.md に行を追加"
これで、後で参照できるファイルのスナップショットが作成されました。
-
ステージングエリアが再び空になっていることを確認します。
git status
タスク I. 変更を GitLab インスタンスにプッシュする
-
GitLab サーバー上のリモート Git リポジトリで temporary_branch という名前の新しいブランチを作成し、
git push
コマンドを使用してそのブランチに変更をプッシュします。git push -u origin temporary_branch
リモートサーバーに変更をプッシュする正確なコマンドがわからない場合は、
git push
と入力すると、Git が正しいコマンドをコピーして貼り付けるためのエラーメッセージを出力します。
タスク J. ファイルを再度編集、コミット、プッシュする
-
ローカルマシンのテキストエディタ(GitLabのブラウザ内エディタではなく)で、
README.md
の最後にこの新しい行を追加し、ファイルを保存します。a second line in README.md
-
ターミナルで、
git add
コマンドを使用して編集したファイルを Git のステージングエリアに移動します。git add README.md
-
git commit
コマンドを使用してステージングされたファイルをコミットします。記述的なコミットメッセージを入力してください。以下は例です。git commit -m "README.md を修正"
-
git log
コマンドを使用して、行ったコミットの説明を確認します。git log
git log
の出力画面を終了するにはq
キーを押してください。 -
git push
コマンドを入力して、ローカルリポジトリのコミットを GitLab インスタンス上のリモートリポジトリにプッシュします。git push
リモートリポジトリの既存のブランチに変更をコミットするには、最初にコミットを GitLab インスタンスにプッシュしたときに使用した長いコマンドではなく、
git push
を実行するだけで済みます。システムは最初にアップストリームブランチを設定する必要があります。 -
GitLab Web UI に移動します。
-
プロジェクトのメインページに移動し、Code > Branches に進みます。
-
temporary_branch をクリックしてそのブランチに切り替えます。ローカルブランチで行った
README.md
の変更がリモートリポジトリにプッシュされたことを確認してください。適用されたすべての変更を確認するには、History ボタンをクリックしてください。これにより、ブランチに適用されたすべてのコミットが表示されます。
タスク K. リモートブランチの編集
組織内の他の誰かが GitLab インスタンス上のリモートリポジトリに存在する temporary_branch に変更を加えるシミュレーションを行いましょう。このセクションが終了すると、リモートとローカルの temporary_branch のバージョンが異なる状態になります。そのブランチのコードがあなたの足元から移動してしまったというわけです。次のセクションでは、この違いを調整する方法を見ていきます。
-
GitLabにアクセスし、トップレベルプロジェクトのランディングページに移動します。すでにtemporary_branchにいない場合は、左側のナビゲーションペインに移動し、Code > Branches > temporary_branchをクリックします。{/examples/}
-
これでtemporary_branchのファイルを見ています。コンテンツを確認するにはREADME.mdをクリックします。{/examples/}
-
ファイルを編集するには、右上隅の編集 > 単一ファイルの編集をクリックします。{/examples/}
-
ファイルの末尾に新しい行を追加します。
temporary_branchのリモートコピーに追加された3行目
-
適切なコミットメッセージを入力します。{/examples/}
-
ターゲットブランチをtemporary_branchに設定します。{/examples/}
-
変更をコミットボタンをクリックします。{/examples/}
このコミットを行った後、GitLabインスタンス上のリモートリポジトリは、ローカルリポジトリよりも1つのコミットが進んでいます。
Task L. リモートのtemporary_branchに関する変更のメタデータを取得する
ローカルのtemporary_branchは、GitLabインスタンス上のリモートのtemporary_branchと同期されていません。
git fetch
コマンドは、ローカルブランチの内容を更新せずにリモートブランチの更新状態を取得します。つまり、ローカルブランチがリモートブランチより何コミット遅れているかを教えてくれますが、ローカルブランチのファイルには変更を加えません。
-
git fetch
コマンドを使用して、リポジトリのリモートコピーのブランチに関するメタデータを取得します。{/examples/}git fetch
-
リモートコピーのリポジトリにはいくつのコミットがあり、ローカルコピーにはないか、その逆かを確認します。{/examples/}
git status
git status
の出力で、あなたのブランチが1つのコミット遅れていることがわかります。
Task M. リモートリポジトリからプルする
ローカルのtemporary_branchのコンテンツを更新するために、リモートのtemporary_branchからの変更をマージする必要があります。
-
ターミナルで、
git pull
コマンドを使用してリモートコピーをローカルコピーにマージします。{/examples/}git pull
-
cat README.md
コマンドを入力してファイルの更新された内容を表示します。GitLab Web IDEで追加した4行目が表示されるはずです。
cat README.md
タスク N. 変更をメインブランチにマージする
今、ローカルの temporary_branch がリモートの temporary_branch と同じであるため、それをローカルの main ブランチにマージできます。これにより、main にある安定したコードベースに編集内容が追加されます。
-
git branch
と入力して、現在作業中のブランチを確認します。git branch
-
ターミナルで
git checkout
コマンドを使用して main ブランチに切り替えます。git checkout main
-
git merge temporary_branch
と入力して、ローカルの temporary_branch(この場合、変更されたREADME.md
のみ)からすべての変更をローカルの main ブランチに取り込みます。git merge temporary_branch
タスク O. リモートリポジトリを更新する
-
git status
と入力して、ステージングやコミットする必要のある編集済みファイルがないこと、および main ブランチにいることを確認します。git status
-
git push
と入力して、ローカルコピーからリモートコピーの main ブランチを更新します。git push
-
ブラウザで GitLab ページに戻り、プロジェクトの main ブランチの
README.md
を表示して、リモートコピーの main にプッシュした変更を確認します。
ラボガイド完了
このラボ演習を完了しました。他のこのコースのラボガイドを表示できます。
提案はありますか?
ラボに変更を提案したい場合は、マージリクエストを送信してください。