コマンドラインでGitを使い始める

Gitはオープンソースの分散バージョン管理システムで、小規模なプロジェクトから大規模なプロジェクトまで、あらゆるプロジェクトを迅速かつ効率的に処理できるように設計されています。 GitLabはGitの上に構築されています。

GitLabには強力なユーザーインターフェイスがあり、ブラウザから直接多くのGitオペレーションを行うことができますが、最終的には高度なタスクのためにコマンドラインからGitを使う必要が出てきます。

たとえば、複雑なマージ競合の修正、ブランチのリベース、手動マージ、コミットの取り消しやロールバックなどが必要な場合は、コマンドラインから Git を使ってからリモートサーバーに変更をプッシュする必要があります。

このガイドは、コマンドラインからGitを使い始めるのに役立ち、今後Gitコマンドを使うときのリファレンスにもなります。 Gitコマンドのクイックリファレンスだけを探している場合は、GitLabのGit Cheat Sheetをダウンロードできます。

GitとGitLabで作業する利点について、詳しくはこちらをご覧ください:

ヒント: ローカルでの作業を視覚化するために、インストールできるGit GUIアプリがあります。

要件

ローカルでGitを使うのにGitLabのアカウントは必要ありませんが、このガイドの目的のために、始める前にアカウントに登録してサインインすることをお勧めします。 いくつかのコマンドは、あなたのコンピュータ内のファイルとリモートサーバー上のバージョンとの接続を必要とします。

コマンドシェルを開き、gitをインストールする必要があります。

コマンドシェル

コンピューターでgitコマンドを実行するには、お好みのコマンドシェル(コマンドプロンプト、ターミナル、コマンドラインなどとも呼ばれます)を開く必要があります。 以下にいくつかの提案を示します:

  • MacOSユーザーの方へ:
    • ⌘ コマンド +スペース を押し、”terminal” と入力してください。
    • iTerm2は、zshや oh my zshとインテグレーションすることで、カラーハイライトなど、gitユーザーにとって便利な機能を使うことができます。
  • Windowsユーザーの方へ
    • Windowsの下部のナビゲーションバーにある検索アイコンをクリックし、”cmd“と入力して検索します。
    • PowerShell:Windowsの「パワーアップした」シェルで、より多くのコマンドを実行できます。
    • Git Bash:Git forWindowsに組み込まれています。
  • Linuxユーザーの方へ:

Gitのインストール

コマンドシェルを開き、以下のコマンドを実行して、gitがすでにインストールされているかどうかを確認します:

git --version

Gitがインストールされていれば、次のように出力されます:

git version X.Y.Z

お使いのコンピューターがgit をコマンドとして認識しない場合は、git をインストールする必要があります。その後、git --version をもう一度実行して、正しくインストールされたかどうかを確認してください。

Gitの設定

コンピュータからGitを使い始めるには、作品の作成者であることを示す認証情報(ユーザー名とEメール)を入力する必要があります。 ユーザー名とEメールは、GitLabで使っているものと同じでなければなりません。

shell にユーザー名を追加します:

git config --global user.name "your_username"

メールアドレスも:

git config --global user.email "your_email_address@example.com"

設定を確認するには、以下を実行してください:

git config --global --list

この--global オプションは、システム上で何かをするときに常にこの情報を使うように Git に指示します。省略 --globalしたり--localを使ったりすると、設定は現在のリポジトリにのみ適用されます。

Git がどのように設定を管理するのかについては、Git Configドキュメントを参照ください。

git 認証方法

GitLabとコンピュータを接続するには、本人確認のために認証情報を追加する必要があります。 2つのオプションがあります:

  • プロジェクトごとに HTTPS で認証し、コンピュータと GitLab の間でオペレーションを行うたびに認証情報を入力します。
  • 一度SSHで認証すれば、GitLabはプル、プッシュ、クローンのたびに認証情報を尋ねることはありません。

認証プロセスを開始するために、既存のリポジトリをコンピュータにクローンします:

  • SSHを使用して認証したい場合は、SSHドキュメントの指示に従って、クローン作成前に設定してください。
  • HTTPSを使用したい場合、GitLabはあなたのユーザー名とパスワードを要求します:
    • アカウントで2FAを有効にしている場合、アカウントのパスワードの代わりにread_repositoryまたはwrite_repository権限を持つパーソナルアクセストークンを使用する必要があります。 クローン作成前に作成してください。
    • 2FAを有効にしていない場合は、アカウントのパスワードを使用してください。
注意:SSH 経由での認証は GitLab が推奨する方法です。 クレデンシャルの保存方法についてはGit Credentials ドキュメントを参照してください。

gitの用語

git の用語に慣れているのなら、基本的なコマンドに直接飛び込むのもよいでしょう。

名前空間

ネームスペースはユーザー名またはグループです。

たとえば、JoがGitLab.comのユーザーで、ユーザー名をjoとしたとしましょう。Joのプロフィールはhttps://gitlab.com/joで見ることができます。jo は名前空間です。

Jo も GitLab でグループを作成し、test-group というパスを選びました。このグループにはhttps://gitlab.com/test-groupでアクセスできます。test-group は名前空間です。

リポジトリ

GitLabのファイルはリポジトリにあり、コンピュータのフォルダやディレクトリにあるのと同じです。リモートリポジトリはGitLabのファイルを指し、コンピュータのコピーはローカルコピーと呼ばれます。 GitLabのプロジェクトはリポジトリを保持するものであり、リポジトリはファイルを保持します。 リポジトリという言葉はしばしば “repo “と短縮されます。

フォーク

他人のリポジトリをコピーしたいときは フォークします。フォークすることで、プロジェクトのコピーを自分の名前空間に作成し、プロジェクトのファイルや設定を変更するための読み取り権限と書き込み権限を持つことができます。

たとえば、このプロジェクトhttps://gitlab.com/gitlab-tests/sample-project/ をあなたの名前空間にフォークすると、あなたの名前空間 (https://gitlab.com/your-namespace/sample-project/) にあなた自身のリポジトリコピーが作成されます。そこから、あなたのコンピュータにクローンし、そのファイルで作業し、必要であれば (オプションで) 変更案を元のリポジトリに提出することができます。

ダウンロード vs クローン

リモートリポジトリのファイルのコピーをコンピュータに作成するには、ダウンロードするかクローンします。 ダウンロードした場合、GitLab上のリモートリポジトリと同期することはできません。

一方、リポジトリをクローンすると、そのファイルのコピーをローカルコンピューターにダウンロードしますが、リモートリポジトリとの Git 接続は維持します。

プルとプッシュ

リポジトリの内部コピーを保存し、コンピュータ上でファイルを変更したら、その変更をGitLabにアップロードすることができます。これはGitLabにプッシュすることと呼ばれ、コマンドgit push

リモートリポジトリが変更されると、あなたのローカルコピーはその背後になります。 リモートリポジトリの新しい変更でそれを更新することができます。これはGitLabからのプルと呼ばれ、コマンドgit pull.

基本的な Git コマンド

このガイドでは、GitLab.comのサンプルプロジェクトhttps://gitlab.com/gitlab-tests/sample-project/

これを使うには、GitLab.comにログインし、サンプルプロジェクトを自分の名前空間にフォークして、自分のコピーを持って遊びます。サンプルプロジェクトはhttps://gitlab.com/<your-namespace>/sample-project/の下で利用できるようになります。

このガイドに従うために、他のプロジェクトを選択することもできます。 それから、例のURLをあなたのプロジェクトのものに置き換えてください。

既存のGitLabリポジトリをコンピュータにコピーすることから始めたい場合は、リポジトリをクローンする方法をご覧ください。 一方、既存のフォルダをコンピュータからGitLabにアップロードすることから始めたい場合は、ローカルフォルダをGitリポジトリに変換する方法をご覧ください。

リポジトリのクローン

既存のリモートリポジトリでローカルに作業を開始するには、git clone <repository path>コマンドでクローンします。HTTPS経由でもSSH経由でも、お好みの認証方法でクローンできます。

プロジェクトのランディングページに移動してクローンをクリックすると、両方のパス (HTTPS と SSH) が表示されます。 GitLab が両方のパスを表示するので、それをコピーしてコマンドラインに貼り付けます。

例えば、サンプルプロジェクトを考えてみましょう:

  • HTTPS 経由でクローンを作成するには、https://gitlab.com/gitlab-tests/sample-project.gitを使用します。
  • SSH経由でクローンするには、git@gitlab.com:gitlab-tests/sample-project.git.

始めるには、リポジトリファイルを追加したいディレクトリでターミナルウィンドウを開き、以下の説明に従ってgit clone コマンドのいずれかを実行します。

どちらのコマンドもプロジェクト名と同じ名前のフォルダにファイルのコピーをダウンロードし、リモートリポジトリとの接続を維持します。 その後、cd sample-project で新しいディレクトリに移動し、ローカルで作業を開始できます。

HTTPS経由のクローン

HTTPS経由でhttps://gitlab.com/gitlab-tests/sample-project/

git clone https://gitlab.com/gitlab-tests/sample-project.git
トラブルシューティング:Windowsの場合、間違ったパスワードを何度も入力したのにGitLabが応答する場合Access denied、HTTPS経由でクローンするためにネームスペース(ユーザー名またはグループ名)を追加する必要があるかもしれませんgit clone https://namespace@gitlab.com/gitlab-org/gitlab.git

SSH経由のクローン

SSH 経由でgit@gitlab.com:gitlab-org/gitlab.git をクローンします:

git clone git@gitlab.com:gitlab-org/gitlab.git

ローカルディレクトリをリポジトリに変換

ローカルフォルダーにファイルを置いてリポジトリに変換したい場合は、git initコマンドでフォルダーを_初期化_する必要があります。これにより、git がそのディレクトリをリポジトリとして追跡し始めるようになります。これを行うには、変換したいディレクトリのターミナルを開いて実行します:

git init

このコマンドを実行すると、あなたのディレクトリに.git フォルダーが作成され、その中に git レコードと設定ファイルが格納されます。これらのファイルを直接編集しないことをお勧めします。

そして次のステップで、リモートリポジトリへのパスを追加します。そうすれば、git がファイルを正しいプロジェクトにアップロードできるようになります。

リモートリポジトリの追加

自分のローカルディレクトリに「リモートリポジトリを追加」することで、GitLab の特定のプロジェクトへのパスが自分のコンピュータにある特定のフォルダに対応することを Git に伝えます。 こうすることで、自分のローカルフォルダが特定のリモートプロジェクトのローカルコンテンツとして Git に認識されるようになります。

リモートリポジトリをローカルコピーに追加するには

  1. GitLabで、ファイルを格納する新しいプロジェクトを作成します。
  2. このプロジェクトのホームページにアクセスし、下にスクロールして既存のフォルダを押しgit remote addで始まるコマンドをコピーします。
  3. コンピューター上で、初期化したディレクトリのターミナルを開き、コピーしたコマンドを貼り付け、enterを押します:

    git remote add origin <git@gitlab.com:username/projectpath.git
    

それが終わったら、ファイルをステージして GitLabにアップロードします。

プロジェクトの最新の変更点をダウンロード

プロジェクトの最新のコピーで作業するためには (プロジェクトで作業を始めるたびにこれを行うことが重要です)、pull で、前回プロジェクトをクローンしたりプルしたりしたとき以降にユーザーによって加えられたすべての変更を取得します。<name-of-branch> で、メインブランチのコード、あるいは現在作業しているブランチのブランチ名を取得するには、master を使用します。

git pull <REMOTE> <name-of-branch>

リポジトリをクローンする場合、REMOTE は通常originです。これはリポジトリのクローン元で、リモートサーバー上のリポジトリの SSH または HTTPS URL を示しています。<name-of-branch> は通常masterですが、既存のブランチでもかまいません。必要に応じて、さらに名前付きリモートやブランチを作成できます。

Git がリモートリポジトリを管理する方法については、Git Remote のドキュメントを参照ください。

リモートリポジトリの表示

リモートリポジトリを表示するには、次のように入力します:

git remote -v

-v フラグはverboseを表します。

ブランチ

プロジェクトにコードを追加したいけれどうまく動くかどうかわからない場合や、他の人と共同でプロジェクトを進めていて自分の作業が混ざってしまうのが嫌な場合は、別のブランチで作業するのがよいでしょう。

Git リポジトリにブランチを作成すると、ブランチの時点でそのファイルのコピーが作成されます。 ブランチ内のコードについては、メインブランチや他のブランチに影響を与えることなく自由に変更することができます。そして、変更内容をメインのコードベースに反映させる準備ができたら、ブランチをプロジェクトで使用しているメインのブランチ (masterなど) にマージします。

ブランチの作成

master ブランチに影響を与えずに作業するための新しいブランチを作成するには、次のように入力します (ブランチ名にはスペースが認識されないので、ハイフンかアンダースコアを使う必要があります):

git checkout -b <name-of-branch>

masterブランチに切り替えます。

メインブランチは master ブランチですが、master をブランチ名に変更すれば同じコマンドで別のブランチに切り替えることができます。

git checkout master

既存ブランチでの作業

既存のブランチに切り替えて、そのブランチで作業できるようにします:

git checkout <name-of-branch>

変更内容の確認

何が起きているのか、自分の変更のステータスを知ることは重要です。 ファイルやフォルダーを追加、変更、削除すると、git はそれを知ることになります。 変更のステータスを確認するには

git status

違いを見る

ステージされていないローカルの変更と、クローンまたはプルしたリポジトリのバージョンの差分を表示するには、次のように入力します:

git diff

ローカル変更の追加とコミット

git statusと入力すると、ローカルの変更が赤色で表示されます。これらの変更は、新規、変更、または削除されたファイル/フォルダーです。git add を使用して、まずローカルのファイル/フォルダーをステージ (コミットの準備) します。次にgit commit を使用して、ステージされたファイルをコミット (保存) します:

git add <file-name OR folder-name>
git commit -m "COMMENT TO DESCRIBE THE INTENTION OF THE COMMIT"

すべての変更をコミットに追加

すべてのローカル変更をすばやく追加し、コミット(保存)します:

git add .
git commit -m "COMMENT TO DESCRIBE THE INTENTION OF THE COMMIT"
注意:. の文字は、_現在のディレクトリとすべてのサブディレクトリのすべてのファイルの変更を_意味します。

GitLab.com に変更を送信します。

すべてのローカルコミット(保存した変更)をリモートリポジトリにプッシュします:

git push <remote> <name-of-branch>

例えば、あなたの内部コミットをorigin_ リモ_ ートの _master _ブランチにプッシュします:

git push origin master
Note:フォークからアップストリームリポジトリへのマージリクエストを作成するには、フォークワークフローを参照してください。

ブランチ内のすべての変更を削除します。

ステージングエリアに追加されていないブランチのローカルな変更をすべて削除し、ステージされていないファイルやフォルダーを残すには、次のように入力します:

git checkout .

これはファイルそのものではなく、ファイルへの変更を削除することに注意してください。

ステージングエリアに追加されたすべての変更のステージを解除します。

ファイル/フォルダーに最近追加された(コミットされていない)変更を取り消します:

git reset .

直近のコミットの取り消し

直近のコミットを取り消すには、次のように入力します:

git reset HEAD~1

これにより、変更されたファイルやフォルダはローカルリポジトリにステージされないままになります。

警告:Git のコミットは、特にすでにリモートリポジトリにプッシュしている場合は、通常は取り消すべきではありません。 コミットを取り消すことはできますが、最善の選択肢は、慎重に作業することで状況を完全に回避することです。

ブランチを master ブランチにマージします。

ブランチのすべての変更を master ブランチに恒久的に追加する準備ができたら、merge

git checkout <name-of-branch>
git merge master

フォークしたリポジトリの変更をアップストリームと同期します。

リポジトリをフォークすると、自分のネームスペースにリポジトリのコピーを作成することができます。 リポジトリのコピーに加えた変更は、元のリポジトリと自動的に同期されません。 ローカルフォーク(コピー)には、自分が加えた変更のみが含まれるため、元のプロジェクトとの同期を保つには、元のリポジトリからpull する必要があります。

元のリポジトリから変更を取り込むには、リモートリポジトリへのリンクを作成する必要があります。このリモートをupstreamと呼ぶのが一般的です。

これで、upstream<remote> として使い、pull 新しい更新を元のリポジトリから取得したり、originを使ってローカルの変更をプッシュしたり、マージリクエストを作成したりできるようになりました。