GitLab with Git Fundamentals - ハンズオンラボ: ローカルで Git を使って作業する

このハンズオンガイドでは、Git コマンドを使ってリモートおよびローカルリポジトリを操作する方法を説明します。

完了までの推定時間: 45 分

目標

このラボでは、ローカルコンピューターのリポジトリを使用し、以下の概念を学習します:

  • リポジトリのクローン
  • ブランチの作成・使用・マージ
  • ファイルの編集とコミット
  • リモートリポジトリへの変更のプッシュとプル

ラボでコピー・アンド・ペーストを求められるコードは、時間をかけて理解してください。不明なコードはインストラクターに質問してください。

このラボで使用する多くの Git コマンドは、GitLab の git チートシート にまとめられています。このラボでは、インターネットへの SSH アクセスのためにローカルコンピューターを使用する必要があります。マシンに必要な権限があることを確認してください。

タスク A. Git がローカルにインストールされていることを確認する

  1. コンピューターのターミナルを開き、次のコマンドを入力します:

    git version
    
  2. バージョン番号が出力されれば、Git はインストールされています。コマンドがエラーをスローした場合は、Git のインストールについてのドキュメントを参照してください。

タスク B. SSH キーを生成する

GitLab は SSH プロトコルを使用して Git と安全に通信します。SSH キーを使って GitLab のリモートサーバーに認証すると、毎回ユーザー名とパスワードを入力する必要がありません。詳細についてはドキュメントをご覧ください。

セキュリティ推奨事項: SSH キーの生成に 1Password を使用する

SSH キーをディスクに保存するのではなく、1Password を使用して生成・保存することをお勧めします。この方法では秘密鍵を保護できます。詳細な手順については 1Password SSH キー生成ガイド をご覧ください。

代替方法: SSH キーをローカルで生成する

SSH キーをローカルで生成する場合は、以下の手順に従ってください:

  1. GNU/Linux・macOS・Windows 10 にプリインストールされている OpenSSH クライアントを使用します。ターミナルまたは Powershell で以下のコマンドを実行して現在のバージョンを確認します:

    ssh -V
    
  2. ターミナルまたは PowerShell で以下のコマンドを実行して、公開鍵と秘密鍵のペアを作成します。

    ssh-keygen -t ed25519
    
  3. 最初のプロンプトで、SSH キーの保存場所を尋ねられます。コマンドがキーを保存するパスを確認してください。デフォルトでは ~/.ssh に保存されます。Enter を押してデフォルトのキーの場所と名前をそのまま使用します。

    必要に応じて、このステップでカスタムのファイルパスとキー名を指定することもできます。

  4. 2 番目のプロンプトで、キーファイルのパスワードを設定するよう求められます。ローカルキーファイルに空のパスフレーズを使用する場合は Enter を押します。

    手順を簡単にするため、キーファイルにパスワードを設定しないことにしています。空のパスフレーズは一般的にベストプラクティスとは見なされません。必要に応じてパスフレーズを設定することもできます。

セキュリティ警告: SSH キーをディスクに保存することはセキュリティリスクを伴います。秘密鍵は保護され、共有してはいけません。本番環境では 1Password などのセキュアなキー管理ソリューションの使用を検討してください。

タスク C. SSH キーを GitLab プロフィールに追加する

  1. ラボ 1 で作成したプロジェクトをブラウザで開きます。

  2. 左上のユーザーアバターをクリックします。

  3. ドロップダウンメニューから Edit profile をクリックします。

  4. 左側のナビゲーションペインで SSH Keys をクリックします。

  5. 既存のターミナルウィンドウを開きます。以下に示すように、cd ~/.ssh を使用して SSH キーを保存したディレクトリに移動し、ls コマンドでそのディレクトリ内のすべてのファイルを一覧表示します。

    cd ~/.ssh
    ls
    

    Windows の場合:

    cd ~\.ssh
    

    デフォルトでは、キーは ~/.ssh ディレクトリに保存されます。異なるディレクトリにキーを保存した場合は、そのディレクトリに cd する必要があります。

  6. 公開鍵(例: id_ed25519.pub)と秘密鍵(例: id_ed25519)の 2 つのキーファイルが表示されます。公開鍵は .pub で終わり、GitLab と共有する必要があるものです。

    セキュリティ警告: 秘密鍵を共有したり、ウェブサイトのフォームフィールドに貼り付けたりしてはいけません。共有できるのは公開鍵のみです。

  7. 以下のコマンドを使用して公開鍵の内容を表示します。

    cat id_ed25519.pub
    

    異なるファイル名を使用した場合は、コマンドは cat <filename>.pub になります。

  8. 画面に表示されたファイルの内容をクリップボードにコピーします。

  9. GitLab Web UI のウェブブラウザで Add new key ボタンをクリックします。

  10. Key フィールドに公開鍵の内容を貼り付けます。

  11. Title フィールドに任意のタイトル(例: コンピューターのホスト名)を入力し、Add key をクリックします。

    ヒント: キーがどこで使用されているかを簡単に識別するために、別の命名スキーマがない場合はコンピューターのホスト名または説明(例: alextanuki-m2-mac)を使用することをお勧めします。

  12. Usage typeAuthentication & Signing が選択されていることを確認します。

    この使用タイプにより、キーを GitLab への認証だけでなく、コミットへの署名にも使用できます。署名済みコミットの詳細についてはドキュメントをご覧ください。

  13. Expiration date はデフォルトの日付のままにします。

    キーに有効期限を設定し、定期的にキーをローテーションすることが理想的です。キーの有効期限の推奨値はセキュリティ要件によって異なります。

  14. Add key ボタンをクリックします。

  15. ターミナルで次のコマンドを実行して接続をテストします。

    インスタンス URL に gitlab-learn-labs/* が含まれている場合:

    インスタンス URL に ilt.gitlabtraining.cloud が含まれている場合:

エラーではなくウェルカムメッセージでコマンドが完了した場合、SSH キーは正しく設定されています。

接続が拒否されたというエラーが表示される場合、またはコマンドが機能しない場合は、ネットワークが SSH 経由の接続をブロックしている可能性があります。その場合は、次のタスクに進んでください。

タスク D. GitLab プロジェクトリポジトリをローカルコンピューターにクローンする

リポジトリをクローンすると、リモートリポジトリのファイルがコンピューターにダウンロードされ、接続が作成されます。詳細についてはドキュメントをご覧ください。

  1. ラボ 1 で作成した Top Level プロジェクトに戻ります。

  2. 左サイドバーで Code > Repository をクリックします。

  3. プロジェクトリポジトリの右側にある Code ボタンをクリックします。Clone with SSH の下の URL をクリップボードにコピーします。

  4. ターミナルまたは PowerShell ウィンドウで、ホームディレクトリに training という新しいディレクトリを作成し、以下のコマンドで移動します。

    mkdir ~/training
    cd ~/training
    

    Windows の場合:

    mkdir ~\training
    cd ~\training
    
  5. Clone 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)を押しながら、左下のメニューに表示されるマシンのユーザー名を選択します。

  1. cd コマンドを使用してクローンしたリポジトリに移動します。このディレクトリ内のすべてのファイルは Git によって追跡され、このラボで実行する Git コマンドはこのディレクトリから実行する必要があります。

    cd top-level-project
    
  2. ls -a コマンドを使用して、ピリオドで始まる隠しファイルとディレクトリを含むディレクトリの内容を表示します。

    ls -a
    

    .git ディレクトリの存在に注目してください。.git ディレクトリにはプロジェクトのメタデータとオブジェクトデータベースが格納されています。

  3. 次のコマンドを実行してリポジトリのステータスを確認します:

    git status
    

    出力に nothing to commit, working tree clean と表示されます。これは、このディレクトリのファイルが Git に保存されているバージョンと同じ内容であることを意味します。

タスク E. ブランチで作業する

ブランチはプロジェクトの作業ツリーのバージョンです。新しいプロジェクトを作成すると、GitLab はリポジトリのデフォルトブランチとして main(以前は master)を作成します。このブランチは削除できません。デフォルトブランチの設定は、プロジェクト・サブグループ・グループ・インスタンスレベルで設定できます。詳細についてはドキュメントをご覧ください。

  1. コンピューターに temporary_branch という新しいブランチを作成します。

    git branch temporary_branch
    
  2. 作成したブランチに切り替えます。

    git checkout temporary_branch
    
  3. リポジトリ内のすべてのブランチを一覧表示します。

    git branch -a
    

    ブランチリストを終了するには、キーボードの q(quit)を押します。

  4. 赤いブランチはリモートサーバー(リポジトリが保存されている GitLab インスタンス)にあります。

  5. アスタリスクは現在いるブランチを示しています。

タスク F. ファイルを編集する

  1. 任意のテキストエディタ(Visual Studio Code・Sublime Text・メモ帳・vi など)を使用して、README.md の末尾に次の行を追加してファイルを保存します。

    a line added to temporary_branch locally
    
  2. Git がファイルの変更を認識しているか確認します。

    git status
    

    出力に README ファイルが赤色で modified のステータスとともに表示されます。赤色のフォントは、README ファイルがまだ Git のステージングエリアに追加されていないことを示しています。

タスク G. 編集したファイルを Git のステージングエリアに追加する

  1. git add コマンドを使用してファイルをステージングエリアに追加します。コマンドが成功した場合、出力はありません。

    git add README.md
    

    git addREADME.md をファイルシステム上で移動させるのではなく、Git の「ステージングエリア」に追加します。

  2. README.md がコミット可能な状態(つまり、ステージングに成功した状態)になっていることを確認します。

    git status
    

README ファイルが緑色のフォントで表示されます。これは変更が Git のステージングエリアで追跡されていることを示しています。

タスク H. 編集をコミットする

  1. 以下の git commit コマンドを使用してステージングされたファイルをコミットします。各コミットには説明的なコミットメッセージを付けることが重要です。

    git commit -m "Add a line to README.md"
    

    これで、必要に応じて後で参照できるファイルのスナップショットが作成されました。

  2. ステージングエリアが再び空になっていることを確認します。

    git status
    

タスク I. GitLab インスタンスに変更をプッシュする

  1. GitLab サーバーのリモート Git リポジトリに temporary_branch という新しいブランチを作成し、git push コマンドを使用してそのブランチに変更をプッシュします。

    git push -u origin temporary_branch
    

    リモートサーバーに変更をプッシュする正確なコマンドがわからない場合は、git push と入力すると Git がエラーメッセージとともにコピー・アンド・ペーストできる正しいコマンドを出力します。

タスク J. ファイルを再度編集・コミット・プッシュする

  1. ローカルマシンのテキストエディタ(GitLab のインブラウザエディタではない)で、ローカルの README.md の末尾に次の新しい行を追加してファイルを保存します。

    a second line in README.md
    
  2. ターミナルで git add コマンドを使用して編集したファイルを Git のステージングエリアに移します。

    git add README.md
    
  3. git commit コマンドを使用してステージングされたファイルをコミットします。説明的なコミットメッセージを付けるか、以下の例を使用してください。

    git commit -m "Modify README.md"
    
  4. git log コマンドを使用して、今行ったコミットの説明を表示します。

    git log
    

    git log の出力画面を終了するには q を押します。

  5. git push コマンドを入力して、GitLab インスタンスのリモートリポジトリにコミットをプッシュします。

    git push
    

    アップストリームブランチ(ローカルマシンのブランチと同じ名前のリモートリポジトリ上の既存ブランチ)に変更をコミットするには、最初に GitLab インスタンスにコミットをプッシュしたときに使用した長いコマンドの代わりに git push だけを実行できます。アップストリームブランチを設定する必要があるのは一度だけです。

  6. GitLab ページのブラウザに戻り、プロジェクトの README.md を表示します。

  7. プロジェクトのメインページで Code > Branches に移動します。

  8. temporary_branch をクリックしてそのブランチに切り替えます。ローカルブランチで README.md に加えた変更がリモートリポジトリにプッシュされていることを確認します。

    適用されたすべての変更を確認するには、History ボタンをクリックします。ブランチに適用されたすべてのコミットが表示されます。

タスク K. リモートブランチを編集する

組織内の別の人がリモートリポジトリの GitLab インスタンス上にある temporary_branch に変更を加えることをシミュレートします。このセクションが完了すると、temporary_branch のリモートバージョンとローカルバージョンが異なる状態になります(コードが変更されることになります)。次のセクションで、この差異を解消する方法を確認します。

  1. GitLab で Top Level Project のランディングページに移動します。temporary_branch にいない場合は、左側のナビゲーションペインで Code > Branches > temporary_branch をクリックします。

  2. temporary_branch のファイルが表示されています。README.md をクリックして内容を確認します。

  3. 右上の Edit > Edit single file をクリックしてファイルを編集します。

  4. ファイルの末尾に新しい行を追加します。

    a third line added on the remote copy of temporary_branch
    
  5. ページ右上の Commit Changes ボタンをクリックします。

  6. 適切なコミットメッセージを入力します。

  7. ターゲットブランチを temporary_branch に設定します。

  8. Commit changes ボタンをクリックします。

このコミットを行った後、GitLab インスタンスのリモートリポジトリはローカルリポジトリより 1 コミットに進んでいます。

タスク L. リモート temporary_branch への変更に関するメタデータを取得する

ローカルの temporary_branch は GitLab インスタンス上のリモートの temporary_branch と同期が取れていない状態です。git fetch コマンドは、ローカルブランチの内容を更新せずにリモートブランチの最新の状態を取得します。つまり、ローカルブランチがリモートブランチより何コミット遅れているかを確認できますが、ローカルブランチのファイルに変更は加えられません。

  1. git fetch コマンドを使用して、リポジトリのリモートコピーのブランチに関するメタデータを取得します。

    git fetch
    
  2. リモートリポジトリにあるがローカルコピーにはないコミット数(またはその逆)を確認します。

    git status
    

git status の出力で、ブランチが 1 コミット遅れていることが確認できます。

タスク M. リモートリポジトリからプルする

リモートの temporary_branch からの変更をマージして、ローカルの temporary_branch の内容を更新する必要があります。

  1. ターミナルで git pull コマンドを使用して、リモートコピーをローカルコピーにマージします。

    git pull
    
  2. cat README.md コマンドを入力してファイルの更新された内容を表示します。GitLab Web IDE で追加した 3 行目が表示されているはずです。

    cat README.md
    

タスク N. 変更を main ブランチにマージする

ローカルの temporary_branch がリモートの temporary_branch と同一になったので、ローカルの main ブランチにマージできます。これにより、main にある安定したコードベースに編集内容が追加されます。

  1. git branch を入力して現在作業しているブランチを確認します。

    git branch
    
  2. ターミナルで git checkout コマンドを使用して main ブランチに切り替えます。

    git checkout main
    
  3. git merge temporary_branch を入力して、ローカルの temporary_branch からのすべての変更(この場合は変更された README.md)をローカルの main ブランチに組み込みます。

    git merge temporary_branch
    

タスク O. リモートリポジトリを更新する

  1. ステージングまたはコミットが必要な編集済みファイルがないことを確認し、main ブランチにいることを確認するために git status を入力します。

    git status
    
  2. git push を入力して、ローカルコピーからの変更でリモートの main ブランチを更新します。

    git push
    
  3. ブラウザの GitLab ページに戻り、プロジェクトの main ブランチで README.md を表示して、リモートの main にプッシュした変更を確認します。

ラボガイド完了

このラボ演習が完了しました。このコースの他のラボガイドを見ることができます。

ご提案は?

ラボへの変更を提案したい場合は、マージリクエストを通じて送信してください。