0. はじめに
この記事は、git初心者がプロジェクトにアサインした際に、「GitHub上に保存された開発データをcloneし、ローカルリポジトリで作業したものをcommitして、リモートリポジトリにpushしてPull Requestを出す。」という基本操作が、ターミナル上でできるようになることを目的に書いたものです。
説明途中に次のような用語解説など入れていますので、専門用語に振り回されて困っている方の一助になれば幸いです。
【用語解説】リポジトリとは
ここでは「リポジトリとはディレクトリだ」と認識してもらって良いです。
※厳密にはかなり語弊がありますが、周辺知識が不足しているだろう初心者の段階で、以下に記す細かい定義に気を取られるよりも、本記事の目的に集中するためには「ディレクトリだ」で一旦気持ちを整理する方が良いです。
以下は学習に余裕のある人だけで構いませんが、厳密なリポジトリの定義は次のようになっています。
プロジェクト開始以来の全てのリビジョンを集めて記録しているデータベースのこと。
(濱野純.入門Git.秀和システム,2014)
リビジョン(revision)とは、プロジェクトのある時点ごとの状態を記録したもののことであり、プロジェクトの状態と、リビジョン間の変更に関するその他の情報が記録されます。
データベースとは、データを1か所に集めて管理しやすくしたものです。ただし厳密にはディレクトリ(ファイル)とは違い、プログラムに隷属したデータ群ではなく、独立させてデータベース管理システムにより統合して管理・運用するためものです。
0.1. 環境
- OS: macOS Sequoia 15.5, Intel Core i5 チップ
- 開発ツール: Visual Studio Code 1.102.1
0.2. 前提
この記事では次のことが完了していることを前提とします。
0.2.1. GitHubアカウントが作成されていること
0.2.2. SSH Keyが設定されていること
GitHubリポジトリ(リモートリポジトリ)へのアクセス認証でSSHを利用するため、公開鍵認証に必要なSSH Keyの作成と、GitHubへの公開鍵登録が完了されていること。
※この設定は初心者には難しいので、OJTリーダーに設定してもらってください。
1. GitHubのリモートリポジトリをcloneする
では初めに、プロジェクトの開発データをローカルにcloneしましょう。
※ここではすでにcloneするためのプロジェクトのリモートリポジトリ(development-repository)が作成されているものとします。
【用語解説】cloneする
リモートリポジトリをローカルのディレクトリに複製することを、「リモートリポジトリをcloneする」といいます。
特に、このセクションで紹介しているgit clone
コマンドを用いると、元のリモートリポジトリを「origin」として参照できるように自動的に設定されます。
1.1. リモートリポジトリのSSH Keyをコピーする。
後ほどgit clone
コマンドを使用する際に使うので、リモートリポジトリのSSH keyをコピーしておきます。
1.2. ローカルにディレクトリを作成する。
cloneする場所となるディレクトリを作成します。ここではディレクトリ名を、project-nameとします。
mkdir project-name
1.3. リモートリポジトリをcloneする
作成したproject-nameディレクトリ内に、リモートリポジトリのdevelopment-repositoryをcloneします。
"ディレクトリ内に移動"
cd project-name
"git clone [コピしたいリモートリポジトリのSSH Key]"
git clone git@(1.1.の赤い部分)
成功すると、次のような実行結果が表示されます。
Cloning into 'development-repository'...
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 4 (delta 0), reused 0 (delta 0), pack-reused 0 (from 0)
Receiving objects: 100% (4/4), done.
これ以降、このproject-nameディレクトリにcloneしたdevelopment-repositoryは、「ローカルリポジトリ」と呼ぶこととします。
2. ローカルリポジトリでの作業内容をcommitする
それでは早速このローカルリポジトリを使って業務を行い、commitしましょう。ただし、業務を行う前に、まずは「ブランチを切る」ことから行います。
【用語解説】commitする
作業記録をローカルリポジトリに記録することを、「commitする」と言います。
より厳密には、「前のリビジョンに基づいて、それに変更を加えた新しいリビジョンを作ること」です。
【用語解説】ブランチを切る
ブランチ(branch:枝)を作成することを、「ブランチを切る」といいます。このブランチに関しては非常に重要な概念であるものの、説明もその分長くなってしまうため、「作業に必要な分岐を作成する」と理解してください。
詳細をどうしても今知りたい!という方は以下の記事を参考になさってください。
参考資料:
2.1. ブランチを切る
まず、cloneしたローカルリポジトリ内に移動してからブランチを切ります。
"cloneしたローカルリポジトリ内に移動"
cd development-repository
"git branch [ブランチ名]"
git branch feature/add-sample
なお、ブランチ名やその管理方法については業界でおおよそメジャーな考えがあります。以下を参考にしてください。
参考資料:
ブランチが切れているかは、git branch
コマンドで確認できます。
% git branch
feature/add-sample
* main
*
:現在いるブランチ
ブランチ名を変更する方法
現在チェックアウト中のブランチにて以下を実行"git branch -m [新しいブランチ名]"
※チェックアウトしていない場合は以下を実行
"git branch -m [古いブランチ名] [新しいブランチ名]"
ブランチを削除する場合
`git branch`に`d`オプションを用いると、ブランチを削除することができます。"git branch -d [ブランチ名]"
git branch -d feature/add-sample
なんでmainブランチから作業ブランチ切ってんの!?
上記で紹介しているGit-flowの知識を持っている方は、この記事がmainブランチから作業用のブランチを切っていることに違和感(危機感?)を抱くかもしれません。
開発作業を行う場合、main(またはmaster)ブランチから、開発するためのブランチとしてdevelopブランチを切ったうえで作業用ブランチを切るのが、より一般的な手順となります。
しかしこの記事では、「GitHub上に保存された開発データをcloneし、ローカルリポジトリで作業したものをcommitして、リモートリポジトリにpushしてPull Requestを出す」ことを最優先目標としており、Git-flowなどの管理概念は優先順位を落としているため、詳細を省いています。
この記事を読んでいる初心者の方でOJTリーダーがついておられる方は、プロジェクトで作業ブランチを切る前に、ブランチを切って良いブランチかどうかを確認しても良いかもしれません。
2.2. ブランチをcheckoutする
現時点ではfeature/add-sample
は作成しましたが、実行結果からまだmain
ブランチにいることがわかります。これではせっかく作業用のブランチを作った意味がないので、feature/add-sample
にcheckoutしましょう。
【用語解説】checkoutする
ブランチを移動する・切り替えることを「checkoutする」と言います。
より厳密には、リビジョンに記録されている内容を展開したディレクトリ領域を「ワークツリー」と呼び、リポジトリに記録されている内容をワークツリーに展開・反映する行為を「チェックアウトする」といいます。
"git checkout [ブランチ名]"
git checkout feature/add-sample
成功すると次のような実行結果になります。
Switched to branch 'feature/add-sample'
ブランチを切ってcheckoutまで一括で行う方法
ブランチを作成し、checkoutする操作を一括で行いたい場合は、bオプションを加える"git checkout -b [ブランチ名]"
git checkout -b feature/add-sample
2.3. プロジェクト作業を行う。
それではcheckout
したブランチで作業を行いましょう。今回は作業としてsample-file.mdを作成したこととします。
2.4. commitするファイルを指定する
git add
コマンドを用いてsample-file.mdをcommitするファイルとして指定します。また、この操作は単にcommitするというだけではなく、ファイルをGitリポジトリの管理対象とするという意味を持っています。
"git add [指定するファイル]"
git add sample-file.md
2.5. commitする
ファイルを指定した後、git commit
コマンドを用いてcommitし、これまでの状態を記録します。
'git commit -m "コメント"'
git commint -m "sample-fileの追加"
実行すると以下のように表示されました。
[feature/add-sample 45ec490] sample-fileの追加
1 file changed, 1 insertion(+)
create mode 100644 sample-file.md
3. リモートリポジトリにpushする
ローカルリポジトリの作業記録を、GitHubで管理されているリモートリポジトリにpushしましょう。
【用語解説】pushする
ローカルリポジトリの作業記録を、リモートリポジトリに送信すること。
3.1. mainブランチを更新する
まずはpushする前に、mainブランチが更新されているかをgit fetch
コマンドで確認します。
"mainブランチにcheckoutする"
git checkout main
"mainブランチのリモートブランチの最新の変更を、ローカルリポジトリに取得する"
git fetch
もしリモートリポジトリのmainブランチの方がローカルリポジトリのmainブランチよりも最新の状態である場合は、git pull
コマンドを用いてローカルリポジトリのmainブランチも最新の状態にしましょう。
git pull
main以外のブランチを更新する場合
Pull Requestを出したのち、レビュワーからGitHub上で修正提案を受けることがあります(Suggested change)。そういった場合は修正提案を採用する場合はそのままcommit suggestionボタンを押してGitHub上で修正提案をcommitして、ローカルリポジトリには、以下を実行して更新することができます。
"git pull origin [ブランチ名]"
git pull origin feature/add-sample
3.2. pushするブランチに最新のmainブランチをmergeする
もしmainブランチが最新の状態に更新された場合、先ほどまで作業していたfeature/add-sampleブランチに、mainブランチをmergeしましょう。
【用語解説】mergeする
2つのブランチを統合すること。
"作業ブランチにcheckoutする"
git checkout feature/add-sample
"mainブランチをmergeする"
git merge main -m "コメント"
※コメントなしでも実行可能ですが、その際は別対応が必要になるので、それについては @kuramoto30 氏の開発用(feature)ブランチにmain(master)ブランチをマージした時 初心者向けを参考にされてください。
3.3. リモートリポジトリにpushする
それでは、リモートリポジトリにpushしていきましょう。
"git push -u origin [ブランチ名]"
git push -u origin feature/add-sample
※originとはclone元のリモートリポジトリのことを指します。
実行結果は次のようになりました。
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 380 bytes | 380.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'feature/add-sample' on GitHub by visiting:
remote: https://github.com/yunokizono-ferix/development-repository/pull/new/feature/add-sample
remote:
To github.com:yunokizono-ferix/development-repository.git
* [new branch] feature/add-sample -> feature/add-sample
branch 'feature/add-sample' set up to track 'origin/feature/add-sample'.
4. Pull Requestを出す
最後の仕上げとして、Pull Requestを出していきましょう。
git push
コマンドにより、GitHubブラウザでは次のようにpushされたことを知らせる表示がされます。
ここで、「Compare & pull request」をクリックし、
必要事項を入力して「Creat pull request」を押せば、Pull Requestの完了です。
5. おわりに
いかがでしたでしょうか?
もしこの記事で実際に取り組まれた方で、「ここが分かりにくかった」、「この部分についてもっと詳しく書いてほしい」などのご意見をコメントしていただけましたら、その内容を検討して可能な限り反映できたらと思います。
ご意見お待ちしております。
参考資料
記事作成にあたり、以下を参考にさせて頂きました。心より感謝申し上げます。
書籍
- 濱野純.入門Git.秀和システム,2014
- 増永良文.Information & Computing-116 リレーショナルデータベース入門[第3版]-データモデル・SQL・管理システム・NoSQL-.サイエンス社,2021