Git,GitHub基礎

Gitとは

ファイルのバージョン管理をするツールのこと。
バージョン管理とは、ソースコードなどのファイルの追加や変更履歴を管理することで、過去の変更を確認したり、特定の場所にファイルを戻したりできること。

バージョン管理を使えば、いつ、どこで、誰が、どのようなファイル変更をしたのか記録でき、いつでも以前の状態に戻せる。

バージョン管理には分散型と集中型の2種類があり、Gitは分散型のバージョン管理システムである。
分散型バージョン管理システムであるGitは開発者自身のPCにローカルリポジトリを持ち、ここに修正や追加したソースコードをcommitすることができる。

ローカルリポジトリへcommitされたソースコードはリモートリポジトリへpushすることでローカルとリモートのリポジトリ内容を合わせることができる。

GitHubとは

ソースコードの管理サービスのことで、主にリモートリポジトリとして活用される。
Gitで管理しているソースコードをチームで簡単に共有できるwebサービス

リポジトリ

バージョン管理によって管理されたファイルやディレクトリの状態や変更履歴を保管するところをリポジトリと呼ぶ。

リポジトリの種類

f:id:meo2:20210723203727p:plain

開発過程をリモートリポジトリへ登録する流れ

  • ステージング(add): ワークツリー(実際に作業してるディレクトリ)で変更があるファイルをステージングエリアへ追加する
  • コミット(commit): ステージングエリアからローカルリポジトリへ登録
  • プッシュ(push): ローカルリポジトリに登録されたファイルをリモートリポジトリへ追加

    コマンド

    $ git status(ステージングにファイルが存在しているか確認)
    $ git add -A( 変更があったすべてのファイルがaddされる) この状態をステージングという。
    $ git commit -m '(適切な内容のコミットメッセージ)'
    $ git push origin(リモートへ変更を反映させる)
    $ git rm -r cached ファイル名(リモートからファイルを削除する。)
    cachedオプションをつけないとローカルからも削除される。
    .gitignoreへ削除したいディレクトリを指定して実行。
    .gitignoreとは、Gitの管理対象に含めないファイルを指定するファイル。

    pullとfetch

  • pull: リモートリポジトリの変更履歴をローカルへ取得。
    リモートのmasterブランチからorigin/masterを介してローカルのmasterまで一気に変更する。
    $ git checkout master
    masterブランチへ移動
    $ git pull origin master
    origin(複製元リモートリポジトリ)の変更をローカルへ取り込む

  • fetch: リモートリポジトリの変更履歴をローカルへ取得。
    $ git fetch origin master
    pullとは違い、origin/masterに変更が取り込まれる。
    $ git merge origin master
    マージしてorigin/masterからmasterへ変更を取り込む。

リポジトリのcloneとfork

既にリモートリポジトリが存在する場合、リモートリポジトリをローカルリポジトリへcloneする。
cloneとは、リモートリポジトリからローカルリポジトリへ複製すること。
cloneすると複製元のリモートリポジトリにはoriginという名前がつく。
$ git clone URL
URLはGitHubから確認する。
f:id:meo2:20210724043336p:plain:w300:h220
forkとは、他人のリモートリポジトリを自分のアカウントのリモートリポジトリへ複製すること。
forkするにはGitHubで右上にあるforkボタンを押すだけ
f:id:meo2:20210724044845p:plain:w300:h50
forkしたら複製した自分のリモートリポジトリをcloneして開発を進めていく。

ブランチ

Gitにはブランチ(branch)という機能があり、
masterから変更履歴を分岐させ、新しい作業場所を作ることをブランチを切ると言う。
f:id:meo2:20210724162956p:plain
ブランチの作成
$ git checkout -b ブランチ名
現在のブランチの確認
$ git branch

GitHub Flow

GitHubではmasterからブランチを切って開発を進め、リモートにpushした後、プルリクエストと呼ばれる機能でコードレビューを行いマージをする。(この開発の流れをGitHub Flowという)
f:id:meo2:20210724195935p:plain

実践

GitHubリポジトリを作成し、cloneする。
$ git clone URL
f:id:meo2:20210724201303p:plain
ローカルでプルリクエスト用のブランチを切る。
$ git checkout -b pullreq1
リモートへpushする。
$ git add -A
$ git commit -m ''
$ git push
GitHub上でプルリクエストを作成する。
GitHub上のリポジトリページからPull requestsを選択し、
マージ先のブランチとプルリクエスト対象のブランチを選択する。
f:id:meo2:20210725052931p:plain

コミット履歴やファイル差分を確認して、Create pull requestする。

f:id:meo2:20210725053231p:plain

プルリクエストを受け取ったユーザーはFiles changedからソースコードを確認し、修正がある場合は commentから修正を促す。変更に問題がなければ、Merge pull requestを実行する。
pullreq1ブランチの内容がmasterへ反映される。

f:id:meo2:20210725053920p:plain

マージ後、pullreqリポジトリのmasterブランチを表示すると、プルリクエストでpullreq1ブランチをmasterブランチへ取り組んだことによりREADME.mdの記述が変わっていることが確認できる。

f:id:meo2:20210725055521p:plain