GitLab with Git Fundamentals - ハンズオンラボ: ローカルで Git を使って作業する
完了までの推定時間: 45 分
目標
このラボでは、ローカルコンピューターのリポジトリを使用し、以下の概念を学習します:
- リポジトリのクローン
- ブランチの作成・使用・マージ
- ファイルの編集とコミット
- リモートリポジトリへの変更のプッシュとプル
ラボでコピー・アンド・ペーストを求められるコードは、時間をかけて理解してください。不明なコードはインストラクターに質問してください。
このラボで使用する多くの Git コマンドは、GitLab の git チートシート にまとめられています。このラボでは、インターネットへの SSH アクセスのためにローカルコンピューターを使用する必要があります。マシンに必要な権限があることを確認してください。
タスク A. Git がローカルにインストールされていることを確認する
コンピューターのターミナルを開き、次のコマンドを入力します:
git versionバージョン番号が出力されれば、Git はインストールされています。コマンドがエラーをスローした場合は、Git のインストールについてのドキュメントを参照してください。
タスク B. SSH キーを生成する
GitLab は SSH プロトコルを使用して Git と安全に通信します。SSH キーを使って GitLab のリモートサーバーに認証すると、毎回ユーザー名とパスワードを入力する必要がありません。詳細についてはドキュメントをご覧ください。
セキュリティ推奨事項: SSH キーの生成に 1Password を使用する
SSH キーをディスクに保存するのではなく、1Password を使用して生成・保存することをお勧めします。この方法では秘密鍵を保護できます。詳細な手順については 1Password SSH キー生成ガイド をご覧ください。
代替方法: SSH キーをローカルで生成する
SSH キーをローカルで生成する場合は、以下の手順に従ってください:
GNU/Linux・macOS・Windows 10 にプリインストールされている OpenSSH クライアントを使用します。ターミナルまたは Powershell で以下のコマンドを実行して現在のバージョンを確認します:
ssh -Vターミナルまたは PowerShell で以下のコマンドを実行して、公開鍵と秘密鍵のペアを作成します。
ssh-keygen -t ed25519最初のプロンプトで、SSH キーの保存場所を尋ねられます。コマンドがキーを保存するパスを確認してください。デフォルトでは
~/.sshに保存されます。Enter を押してデフォルトのキーの場所と名前をそのまま使用します。必要に応じて、このステップでカスタムのファイルパスとキー名を指定することもできます。
2 番目のプロンプトで、キーファイルのパスワードを設定するよう求められます。ローカルキーファイルに空のパスフレーズを使用する場合は Enter を押します。
手順を簡単にするため、キーファイルにパスワードを設定しないことにしています。空のパスフレーズは一般的にベストプラクティスとは見なされません。必要に応じてパスフレーズを設定することもできます。
セキュリティ警告: SSH キーをディスクに保存することはセキュリティリスクを伴います。秘密鍵は保護され、共有してはいけません。本番環境では 1Password などのセキュアなキー管理ソリューションの使用を検討してください。
タスク C. SSH キーを GitLab プロフィールに追加する
ラボ 1 で作成したプロジェクトをブラウザで開きます。
左上のユーザーアバターをクリックします。
ドロップダウンメニューから Edit profile をクリックします。
左側のナビゲーションペインで SSH Keys をクリックします。
既存のターミナルウィンドウを開きます。以下に示すように、
cd ~/.sshを使用して SSH キーを保存したディレクトリに移動し、lsコマンドでそのディレクトリ内のすべてのファイルを一覧表示します。cd ~/.ssh lsWindows の場合:
cd ~\.sshデフォルトでは、キーは
~/.sshディレクトリに保存されます。異なるディレクトリにキーを保存した場合は、そのディレクトリにcdする必要があります。公開鍵(例:
id_ed25519.pub)と秘密鍵(例:id_ed25519)の 2 つのキーファイルが表示されます。公開鍵は.pubで終わり、GitLab と共有する必要があるものです。セキュリティ警告: 秘密鍵を共有したり、ウェブサイトのフォームフィールドに貼り付けたりしてはいけません。共有できるのは公開鍵のみです。
以下のコマンドを使用して公開鍵の内容を表示します。
cat id_ed25519.pub異なるファイル名を使用した場合は、コマンドは
cat <filename>.pubになります。画面に表示されたファイルの内容をクリップボードにコピーします。
GitLab Web UI のウェブブラウザで Add new key ボタンをクリックします。
Key フィールドに公開鍵の内容を貼り付けます。
Title フィールドに任意のタイトル(例: コンピューターのホスト名)を入力し、Add key をクリックします。
ヒント: キーがどこで使用されているかを簡単に識別するために、別の命名スキーマがない場合はコンピューターのホスト名または説明(例:
alextanuki-m2-mac)を使用することをお勧めします。Usage type で Authentication & Signing が選択されていることを確認します。
この使用タイプにより、キーを GitLab への認証だけでなく、コミットへの署名にも使用できます。署名済みコミットの詳細についてはドキュメントをご覧ください。
Expiration date はデフォルトの日付のままにします。
キーに有効期限を設定し、定期的にキーをローテーションすることが理想的です。キーの有効期限の推奨値はセキュリティ要件によって異なります。
Add key ボタンをクリックします。
ターミナルで次のコマンドを実行して接続をテストします。
インスタンス URL に
gitlab-learn-labs/*が含まれている場合:ssh -T [email protected]インスタンス URL に
ilt.gitlabtraining.cloudが含まれている場合:ssh -T [email protected]
エラーではなくウェルカムメッセージでコマンドが完了した場合、SSH キーは正しく設定されています。
接続が拒否されたというエラーが表示される場合、またはコマンドが機能しない場合は、ネットワークが SSH 経由の接続をブロックしている可能性があります。その場合は、次のタスクに進んでください。
タスク D. GitLab プロジェクトリポジトリをローカルコンピューターにクローンする
リポジトリをクローンすると、リモートリポジトリのファイルがコンピューターにダウンロードされ、接続が作成されます。詳細についてはドキュメントをご覧ください。
ラボ 1 で作成した
Top Levelプロジェクトに戻ります。左サイドバーで Code > Repository をクリックします。
プロジェクトリポジトリの右側にある Code ボタンをクリックします。Clone with SSH の下の URL をクリップボードにコピーします。
ターミナルまたは PowerShell ウィンドウで、ホームディレクトリに
trainingという新しいディレクトリを作成し、以下のコマンドで移動します。mkdir ~/training cd ~/trainingWindows の場合:
mkdir ~\training cd ~\trainingClone with SSH からコピーしたコマンドを使用して
git cloneコマンドを実行します。git clone <Clone with SSH Command>
接続がタイムアウトまたは拒否されたというエラーが表示された場合、ファイアウォールによりネットワークがポート 22 上の接続をブロックしているためかもしれません。その場合は、タスク D の手順を繰り返しますが、Code ボタンの Clone with HTTPS を使用してください。
Mac では、クローンされたプロジェクトを見つけるためにホームディレクトリに移動する必要がある場合があります。Finder から、Go > Go to Folder > マシンのユーザー名で検索してホームディレクトリを開きます。または Finder で Option キー(Alt)を押しながら、左下のメニューに表示されるマシンのユーザー名を選択します。
cdコマンドを使用してクローンしたリポジトリに移動します。このディレクトリ内のすべてのファイルは Git によって追跡され、このラボで実行する Git コマンドはこのディレクトリから実行する必要があります。cd top-level-projectls -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(quit)を押します。赤いブランチはリモートサーバー(リポジトリが保存されている GitLab インスタンス)にあります。
アスタリスクは現在いるブランチを示しています。
タスク F. ファイルを編集する
任意のテキストエディタ(Visual Studio Code・Sublime Text・メモ帳・vi など)を使用して、
README.mdの末尾に次の行を追加してファイルを保存します。a line added to temporary_branch locallyGit がファイルの変更を認識しているか確認します。
git status出力に
READMEファイルが赤色でmodifiedのステータスとともに表示されます。赤色のフォントは、READMEファイルがまだ Git のステージングエリアに追加されていないことを示しています。
タスク G. 編集したファイルを Git のステージングエリアに追加する
git addコマンドを使用してファイルをステージングエリアに追加します。コマンドが成功した場合、出力はありません。git add README.mdgit addはREADME.mdをファイルシステム上で移動させるのではなく、Git の「ステージングエリア」に追加します。README.mdがコミット可能な状態(つまり、ステージングに成功した状態)になっていることを確認します。git status
README ファイルが緑色のフォントで表示されます。これは変更が Git のステージングエリアで追跡されていることを示しています。
タスク H. 編集をコミットする
以下の
git commitコマンドを使用してステージングされたファイルをコミットします。各コミットには説明的なコミットメッセージを付けることが重要です。git commit -m "Add a line to 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.mdgit commitコマンドを使用してステージングされたファイルをコミットします。説明的なコミットメッセージを付けるか、以下の例を使用してください。git commit -m "Modify README.md"git logコマンドを使用して、今行ったコミットの説明を表示します。git loggit logの出力画面を終了するにはqを押します。git pushコマンドを入力して、GitLab インスタンスのリモートリポジトリにコミットをプッシュします。git pushアップストリームブランチ(ローカルマシンのブランチと同じ名前のリモートリポジトリ上の既存ブランチ)に変更をコミットするには、最初に GitLab インスタンスにコミットをプッシュしたときに使用した長いコマンドの代わりに
git pushだけを実行できます。アップストリームブランチを設定する必要があるのは一度だけです。GitLab ページのブラウザに戻り、プロジェクトの
README.mdを表示します。プロジェクトのメインページで Code > Branches に移動します。
temporary_branch をクリックしてそのブランチに切り替えます。ローカルブランチで
README.mdに加えた変更がリモートリポジトリにプッシュされていることを確認します。適用されたすべての変更を確認するには、History ボタンをクリックします。ブランチに適用されたすべてのコミットが表示されます。
タスク K. リモートブランチを編集する
組織内の別の人がリモートリポジトリの GitLab インスタンス上にある temporary_branch に変更を加えることをシミュレートします。このセクションが完了すると、temporary_branch のリモートバージョンとローカルバージョンが異なる状態になります(コードが変更されることになります)。次のセクションで、この差異を解消する方法を確認します。
GitLab で Top Level Project のランディングページに移動します。temporary_branch にいない場合は、左側のナビゲーションペインで Code > Branches > temporary_branch をクリックします。
temporary_branch のファイルが表示されています。README.md をクリックして内容を確認します。
右上の Edit > Edit single file をクリックしてファイルを編集します。
ファイルの末尾に新しい行を追加します。
a third line added on the remote copy of temporary_branchページ右上の Commit Changes ボタンをクリックします。
適切なコミットメッセージを入力します。
ターゲットブランチを temporary_branch に設定します。
Commit changes ボタンをクリックします。
このコミットを行った後、GitLab インスタンスのリモートリポジトリはローカルリポジトリより 1 コミット先に進んでいます。
タスク L. リモート temporary_branch への変更に関するメタデータを取得する
ローカルの temporary_branch は GitLab インスタンス上のリモートの temporary_branch と同期が取れていない状態です。
git fetchコマンドは、ローカルブランチの内容を更新せずにリモートブランチの最新の状態を取得します。つまり、ローカルブランチがリモートブランチより何コミット遅れているかを確認できますが、ローカルブランチのファイルに変更は加えられません。
git fetchコマンドを使用して、リポジトリのリモートコピーのブランチに関するメタデータを取得します。git fetchリモートリポジトリにあるがローカルコピーにはないコミット数(またはその逆)を確認します。
git status
git status の出力で、ブランチが 1 コミット遅れていることが確認できます。
タスク M. リモートリポジトリからプルする
リモートの temporary_branch からの変更をマージして、ローカルの temporary_branch の内容を更新する必要があります。
ターミナルで
git pullコマンドを使用して、リモートコピーをローカルコピーにマージします。git pullcat README.mdコマンドを入力してファイルの更新された内容を表示します。GitLab Web IDE で追加した 3 行目が表示されているはずです。cat README.md
タスク N. 変更を main ブランチにマージする
ローカルの temporary_branch がリモートの temporary_branch と同一になったので、ローカルの main ブランチにマージできます。これにより、main にある安定したコードベースに編集内容が追加されます。
git branchを入力して現在作業しているブランチを確認します。git branchターミナルで
git checkoutコマンドを使用して main ブランチに切り替えます。git checkout maingit merge temporary_branchを入力して、ローカルの temporary_branch からのすべての変更(この場合は変更されたREADME.md)をローカルの main ブランチに組み込みます。git merge temporary_branch
タスク O. リモートリポジトリを更新する
ステージングまたはコミットが必要な編集済みファイルがないことを確認し、main ブランチにいることを確認するために
git statusを入力します。git statusgit pushを入力して、ローカルコピーからの変更でリモートの main ブランチを更新します。git pushブラウザの GitLab ページに戻り、プロジェクトの main ブランチで
README.mdを表示して、リモートの main にプッシュした変更を確認します。
ラボガイド完了
このラボ演習が完了しました。このコースの他のラボガイドを見ることができます。
ご提案は?
ラボへの変更を提案したい場合は、マージリクエストを通じて送信してください。
