GitLab で学ぶ Git の基礎 - ハンズオンラボ: ローカルで Git を使う
完了までの推定時間: 45 分
目標
このラボでは、ローカルコンピューター上のリポジトリを使う練習を行い、次の概念について学びます。
- リポジトリのクローン
- ブランチの作成、使用、マージ
- ファイルの編集とコミット
- リモートリポジトリへの変更のプッシュおよびリモートリポジトリからの変更のプル。
いずれのラボでも、コピー&ペーストするよう求められたコードについては、その内容を理解する時間を取ってください。不明なコードがあれば、インストラクターに説明を求めてください。
このラボで使用する Git コマンドの多くは、GitLab の便利な git チートシートにまとめられています。このラボでは、ローカルコンピューターからインターネットへの SSH アクセスができる必要があります。お使いのマシンに必要な権限があることを確認してください。
タスク A. Git がローカルにインストールされていることを確認する
コンピューターでターミナルを開き、次のコマンドを入力します。
git versionバージョン番号が出力されれば、Git はインストールされています。コマンドがエラーになる場合は、Git のインストールに関するドキュメントを参照してください。
タスク B. SSH キーを生成する
GitLab は Git との安全な通信に SSH プロトコルを使用します。SSH キーを使って GitLab のリモートサーバーに認証すると、毎回ユーザー名とパスワードを入力する必要がなくなります。詳しくはドキュメントを参照してください。
セキュリティ推奨事項: SSH キーの生成に 1Password を使用する
SSH キーはディスクに保存するのではなく、1Password を使って生成・保存することをおすすめします。この方法のほうが秘密鍵をより安全に保護できます。詳しい手順は 1Password での SSH キー生成ガイドに従ってください。
代替方法: SSH キーをローカルで生成する
ローカルで SSH キーを生成したい場合は、次の手順に従ってください。
ここでは OpenSSH クライアントを使用します。これは GNU/Linux、macOS、Windows 10 にプリインストールされています。現在のバージョンを確認するには、ターミナルまたは PowerShell で次のコマンドを実行します。
ssh -Vターミナルまたは PowerShell で次のコマンドを実行して、公開鍵と秘密鍵のペアを作成します。
ssh-keygen -t ed25519最初のプロンプトでは、SSH キーを保存する場所を尋ねられます。コマンドがキーを保存する場所を控えておいてください。デフォルトのパスは
~/.sshです。Enter キーを押すと、デフォルトのキーの保存場所と名前が使用されます。必要に応じて、この手順でカスタムのファイルパスとキー名を指定することもできます。
2 番目のプロンプトでは、キーファイルのパスワードを設定するよう求められます。Enter キーを押すと、ローカルのキーファイルに空のパスフレーズを使用します。
手順をシンプルにするため、ここではキーファイルにパスワードを設定しないことにします。空のパスフレーズは一般的にベストプラクティスとは見なされません。必要であればパスフレーズを設定してかまいません。
セキュリティ警告: SSH キーをディスクに保存することにはセキュリティリスクがあります。秘密鍵は保護し、決して共有しないでください。本番環境では、1Password などの安全なキー管理ソリューションの利用を検討してください。
タスク C. SSH キーを GitLab プロフィールに追加する
ブラウザで、Lab 1 で作成したプロジェクトを開きます。
左上隅のユーザーアバターをクリックします。
ドロップダウンメニューから Edit profile をクリックします。
左側のナビゲーションペインで SSH Keys をクリックします。
既存のターミナルウィンドウを開きます。次のように
cd ~/.sshを使って SSH キーを保存したディレクトリに移動し、lsコマンドでそのディレクトリ内のすべてのファイルを一覧表示します。cd ~/.ssh lsWindows の場合:
cd ~\.sshデフォルトでは、キーは
~/.sshディレクトリに保存されます。別のディレクトリにキーを保存した場合は、代わりにそのディレクトリへcdする必要があります。2 つのキーファイル、すなわち公開鍵(例:
id_ed25519.pub)と秘密鍵(例:id_ed25519)が表示されるはずです。公開鍵は.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 のプロジェクトリポジトリをローカルコンピューターにクローンする
リポジトリをクローンすると、リモートリポジトリのファイルがコンピューターにダウンロードされ、接続が作成されます。詳しくはドキュメントを参照してください。
Lab 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 の接続をブロックしている可能性があります。その場合は、Task D の手順を繰り返しますが、Code ボタンで Clone with SSH の代わりに 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を実行すればよいです。システムがアップストリームブランチを設定する必要があるのは 1 回だけです。GitLab Web UI でプロジェクトに移動します。
プロジェクトのメインページに移動したら、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. リモートリポジトリを更新する
git statusと入力して、ステージングまたはコミットが必要な編集済みファイルがないこと、および main ブランチにいることを確認します。git statusgit pushと入力して、ローカルコピーの変更で main ブランチのリモートコピーを更新します。git pushブラウザで GitLab のページに戻り、プロジェクトの main ブランチで
README.mdを表示して、たった今 main のリモートコピーにプッシュした変更を確認します。
ラボガイド完了
このラボの演習は完了です。このコースのほかのラボガイドを見ることができます。
c955a93f)