MacでのGitの使い方!

Gitって?Githubって?

エンジニアとして駆け出してみると、知らない単語がごっそり出てきますね。

その中でも避けられないGitGithub

これって良く耳にするけど、何が違うんだろうか!って思いませんか!?

おもいませんか…

Gitとは

Gitは、プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。(wikipedia参照)

Githubとは

GitHub(ギットハブ)は、ソフトウェア開発のプラットフォームであり、ソースコードをホスティングする。コードのバージョン管理システムにはGitを使用する。(wikipedia参照)

つまり

Git:バージョン管理システム

Github:Gitを利用した、ソフトウェア開発のプラットフォーム

で、GithubはあくまでもGitを便利に利用するためのツールで、バージョン管理自体はGitで行っていきます

今回はそのGitの使い方について解説していきます。

Git周りの用語解説

  • ワーキングツリー
    git initコマンドにより、Gitの管理下に置かれたディレクトリのこと

  • インデックス
    →コミットするためのファイルを登録しておく場所。git addでファイルを指定して登録する

  • ローカルリポジトリ
    →ユーザーが個人で利用するためのリポジトリ。git commitでインデックスに登録されたファイルをローカルリポジトリに記録する

  • リモートリポジトリ
    →複数人でソースコードの開発に関わるデータをまとめて共有・管理するためのデータ置き場(リポジトリ)。git pushでローカルリポジトリの内容をリモートリポジトリに登録する

  • コミット(commit)
    →インデックスに登録されたファイルをローカルリポジトリに反映させること

  • プッシュ(push)
    →ローカルリポジトリの内容をリモートリポジトリにアップロードして反映させること

  • フォーク (fork)
    →他人のリポジトリをコピーして自分のリポジトリを作成すること

  • クローン(clone)
    →リポジトリを自分のマシンにコピーしてくること。Forkも内部的にはcloneが行われている

  • プル(pull)
    →リモートリポジトリから最新の状態をダウンロードしてローカルリポジトリに反映させること

  • ブランチ(branch)
    →ある地点からのソースコードの派生系のこと。リポジトリを作成した時にデフォルトで作成されるのが「master」ブランチ。ブランチを切っておくと、masterブランチに影響を与えずに新機能を作成したりできる。

  • チェックアウト (checkout)
    →利用しているブランチを切り替える

  • マージ (merge)
    →現在のブランチに他のブランチを取り込むこと

これらの用語と意味は今すべてを覚える必要はありませんが、Gitを利用して共同開発を行っていくうえで必須の用語になると思いますので「なんか聞いたことあるなー」くらいには覚えておきましょう!

Gitを使ってみよう!

基本用語をおさえたうえで、実際にGitを使ってみましょう!

Gitのインストール

まず自分のPCにGitがインストールされているか確認しましょう。

下記コマンドを入力して、Gitのバージョンが表示されたらインストールされています。

# Gitのバージョン確認
$ git --version

インストールされていない場合はポップアップが出ると思いますので、それにしたがってGitをインストールしましょう!

その後、Gitを最新版にアップデートしていきます。

# Homebrewのアップデート
$ brew update

# HomebrewでGitのアップデート
$ brew install git

そもそもHomebrewがインストールされていない場合は以下のコマンドを入力

# Homebrewのインストール
$ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

…

# 正常にインストールされているか確認
$ brew update
Already up-to-date.

# 問題なければGitをインストール
$ brew install git

Gitの初期設定

Gitのインストールが出来たら初期設定を行いましょう。

Gitには自分の情報が登録できますので、これを設定していきます。

※ただし、ここに設定した情報はGithubなどで公開した時に閲覧できてしまう情報なので、個人利用の場合は本名などは利用しない方がよいでしょう

$ git config --global user.name "${あなたの名前}"
$ git config --global user.email ${あなたのメールアドレス}

下記コマンドで自身の情報を表示

$ git config -l

user.name="${あなたの名前}"
user.email=${あなたのメールアドレス}
...

ローカルリポジトリを作ってみる

ローカルリポジトリを作成するにはリポジトリを作りたいディレクトリに移動してgit initコマンドを入力します。

$ mkdir ~/git_test

$ cd ~/git_test

$ pwd
/Users/○○/git_test

$ git init
Initialized empty Git repository in /Users/○○/git_test/.git/

これでローカルリポジトリが作成されました。

git addでインデックスにステージングしてみる

$ touch hoge.txt

$ git add hoge.txt

この状態でgit statusコマンドを入力してステージングの状態を確認してみましょう

$ git status
On branch master

No commits yet

Changes to be committed:
(use "git rm --cached ..." to unstage)

new file: hoge.txt

最下段にnew fileとしてhoge.txtが記載されていればステージングは完了です!

ちなみに謝ってステージングしてしまった場合はこちらに詳しく書かれておりますが、下記コマンドで取り除けます!

# addの取り消し
$ git reset hoge.txt

# 再度ステージングの確認
$ git status
On branch master

No commits yet

Untracked files:
(use "git add ..." to include in what will be committed)

hoge.txt

nothing added to commit but untracked files present (use "git add" to track)

Untracked filesと表示されて、インデックスに無いファイルとして、hoge.txtが挙げられています。

最下段にはGitに未追跡のファイルがあるので、追跡するにはaddしてくださいとの表示があります。

これでaddを取り消す方法がわかりました。

ディレクトリ内の全てのファイルをステージングするにはgit add .と最後にドットをつけます。

同様にgit reset .とすることで、全てのステージングを解除することができます。

確認できたら再度ステージングしましょう。

ステージングの際にはgit diff --cachedコマンドで、前回コミット(HEAD)とインデックスの差分を確認することができます。

$ git diff --cached

ローカルリポジトリにコミットしてみる

ステージングができたら、ローカルリポジトリにコミットしていきます。

手順が多くて大変ですが、コマンド一発でリモートリポジトリにpushできてしまうと、バグが残った状態でシステムを上書きしてしまう可能性もありますし、諦めて頑張りましょう!

コミットは下記コマンドで行いますが、必ず-mオプションをつけてコミットメッセージを記載の上コミットしましょう。

# コミットする
$ git commit -m "初めてのコミット"
[master (root-commit) 7be24ef] 初めてのコミット
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 hoge.txt

自分のコミットはgit logコマンドで確認できます。

git logは様々なオプションがありますのでgit logを使ってコミット履歴を閲覧する方法【初心者向け】
をご参考ください

# 自分のコミットを確認
$ git log
commit 7be24effe47dea6947e5e5a56d285d43914a57bb (HEAD -> master)
Author: 〇〇 <〇〇@〇〇.com>
Date: Tue Nov 13 12:52:47 2018 +0900

初めてのコミット

リモートリポジトリにpushする

リモートリポジトリを作成する

リモートリポジトリにpushするためにはまず、リモートリポジトリを作成しなければなりませんね!

今回はすでにGitHubのアカウントが存在し、SSHの公開鍵認証の設定を終えている前提で話を進めていきます。

まだの方は以下を参考にしてやってみてくださいね!

GitHubのアカウント登録からリポジトリ操作まで

GitHubの右上にあるアイコンをクリックして自分のリポジトリを開きましょう。

個人ページの上の方にあるタブからRepositoriesを選択し、newをクリックしましょう。

Repository nameは自由に設定し、下の緑色のボタンCreate repositoryをクリックしましょう。

すると、以下のような画面になります。

...or create a new eepository on the command lineという項目の git commit -m "first commit"の項目まではすでに完了していますので、git remote add origin git@github.com:〇〇/test.gitgit push -u origin masterをコマンドラインに入力していきましょう

リモートリポジトリにpushする

$ git remote add origin git@github.com:〇〇/test.git
fatal: remote origin already exists.

$ git push -u origin master
Counting objects: 3, done.
Writing objects: 100% (3/3), 236 bytes | 236.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote: https://github.com/〇〇/test/pull/new/master
remote:
To github.com:〇〇/test.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

git remote add originの際にエラーのようなものが出てるかもしれませんが、今は気にしなくても問題ないはずですので、気にせずpushしましょう!

pushした後に今作成したリポジトリの画面に移動すると以下のような表示になるはずです!

これでリモートリポジトリへのpushが完了しました!

お疲れ様でした!

git push -u origin masterがPermission denied (publickey).となる時の対処

$ git push -u origin master
git@github.com: Permission denied (publickey).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

pushする際に、上記のような出力がされることがあります。

理由はいくつかあると思われますが、僕の場合は公開鍵と秘密鍵の名前をid_git_rsaにしていたことが原因だと思われます。

(通常の設定だとid_rsaを自動で読み込みに行く…?)

githubからcloneするときにPermission denied (publickey)エラーが発生するを参考にさせていただきましたが、こちらではssh-agentに登録することで問題を解決しており、当方でも同様のやり方で解決したため紹介します。

$ eval `ssh-agent`
Agent pid 9053
$ ssh-add ~/.ssh/id_git_rsa
Enter passphrase for /Users/〇〇/.ssh/id_git_rsa: # 鍵作成時のパスフレーズを入力する
Identity added: /Users/〇〇/.ssh/id_git_rsa (/Users/〇〇/.ssh/id_git_rsa)

他の方法

今回は上記の方法で解決いたしましたが、これは僕が昔にSSHキーを作成しており、何か設定を触ってしまったために起こったエラーだと思われます。

この記事を見て、新たにSSHキーを作成した人で同じようなエラーが起きた際は、下記リンクが参考になると思います。

基本的には

  • SSHの鍵を作成し直し、Githubに登録し直す

  • パーミッションを適切に設定する

等で問題が解決する場合が多いようです。

“Permission denied (publickey)”と表示されたときの対処法

SSH で Permission Denied となる傾向と対策

最後に

これで基本的なGitとGithubの使い方は分かるようになりました!

次回はチェックアウト・マージや.gitignoreについて書いていきたいと思います!!

Tags:, ,