コマンドラインでGitを使い始める
Gitはオープンソースの分散バージョン管理システムで、小規模なプロジェクトから大規模なプロジェクトまで、あらゆるプロジェクトを迅速かつ効率的に処理できるように設計されています。 GitLabはGitの上に構築されています。
GitLabには強力なユーザーインターフェイスがあり、ブラウザから直接多くのGitオペレーションを行うことができますが、最終的には高度なタスクのためにコマンドラインからGitを使う必要が出てきます。
たとえば、複雑なマージ競合の修正、ブランチのリベース、手動マージ、コミットの取り消しやロールバックなどが必要な場合は、コマンドラインから Git を使ってからリモートサーバーに変更をプッシュする必要があります。
このガイドは、コマンドラインからGitを使い始めるのに役立ち、今後Gitコマンドを使うときのリファレンスにもなります。 Gitコマンドのクイックリファレンスだけを探している場合は、GitLabのGit Cheat Sheetをダウンロードできます。
GitとGitLabで作業する利点について、詳しくはこちらをご覧ください:
- GitLabソースコード管理ウォークスルービデオをご覧ください。
- GitLabがWorldlineの開発環境のバックボーンとなった経緯をご紹介します。
要件
ローカルでGitを使うのにGitLabのアカウントは必要ありませんが、このガイドの目的のために、始める前にアカウントに登録してサインインすることをお勧めします。 いくつかのコマンドは、あなたのコンピュータ内のファイルとリモートサーバー上のバージョンとの接続を必要とします。
コマンドシェルを開き、gitをインストールする必要があります。
コマンドシェル
コンピューターでgitコマンドを実行するには、お好みのコマンドシェル(コマンドプロンプト、ターミナル、コマンドラインなどとも呼ばれます)を開く必要があります。 以下にいくつかの提案を示します:
- MacOSユーザーの方へ:
- ⌘ コマンド +スペース を押し、”terminal” と入力してください。
- iTerm2は、zshや oh my zshとインテグレーションすることで、カラーハイライトなど、gitユーザーにとって便利な機能を使うことができます。
- Windowsユーザーの方へ
- Windowsの下部のナビゲーションバーにある検索アイコンをクリックし、”cmd“と入力して検索します。
- PowerShell:Windowsの「パワーアップした」シェルで、より多くのコマンドを実行できます。
- Git Bash:Git forWindowsに組み込まれています。
- Linuxユーザーの方へ:
- 内蔵: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を有効にしていない場合は、アカウントのパスワードを使用してください。
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
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 に認識されるようになります。
リモートリポジトリをローカルコピーに追加するには
- GitLabで、ファイルを格納する新しいプロジェクトを作成します。
- このプロジェクトのホームページにアクセスし、下にスクロールして既存のフォルダを押し、
git remote add
で始まるコマンドをコピーします。 -
コンピューター上で、初期化したディレクトリのターミナルを開き、コピーしたコマンドを貼り付け、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
ブランチ内のすべての変更を削除します。
ステージングエリアに追加されていないブランチのローカルな変更をすべて削除し、ステージされていないファイルやフォルダーを残すには、次のように入力します:
git checkout .
これはファイルそのものではなく、ファイルへの変更を削除することに注意してください。
ステージングエリアに追加されたすべての変更のステージを解除します。
ファイル/フォルダーに最近追加された(コミットされていない)変更を取り消します:
git reset .
直近のコミットの取り消し
直近のコミットを取り消すには、次のように入力します:
git reset HEAD~1
これにより、変更されたファイルやフォルダはローカルリポジトリにステージされないままになります。
ブランチを master ブランチにマージします。
ブランチのすべての変更を master ブランチに恒久的に追加する準備ができたら、merge
:
git checkout <name-of-branch>
git merge master
フォークしたリポジトリの変更をアップストリームと同期します。
リポジトリをフォークすると、自分のネームスペースにリポジトリのコピーを作成することができます。 リポジトリのコピーに加えた変更は、元のリポジトリと自動的に同期されません。 ローカルフォーク(コピー)には、自分が加えた変更のみが含まれるため、元のプロジェクトとの同期を保つには、元のリポジトリからpull
する必要があります。
元のリポジトリから変更を取り込むには、リモートリポジトリへのリンクを作成する必要があります。このリモートをupstream
と呼ぶのが一般的です。
これで、upstream
を<remote>
として使い、pull
新しい更新を元のリポジトリから取得したり、origin
を使ってローカルの変更をプッシュしたり、マージリクエストを作成したりできるようになりました。