#はじめに
こちらの記事は、Udemyの講義で使用したコマンドや手順を記録するための備忘録です。
本記事で書かれている内容は、講義の要点をまとめたり、バージョンアップに伴う対応を記録していますが、詳細な手順を知りたい方は、以下の講義を受講してください。(無料です)
Git:はじめてのGitとGitHub
#Gitとは
##Gitとは何?
Gitはバージョン管理システム。
複数人で同じファイルを編集したときに、誤って編集を上書きしたりしてしまうことを防いだり、最新のバージョンがすぐに分かるようにすることができる。
#事前準備
##Gitのインストール(MacOS)
Macには、すでにGitが入っている。インストールされているか確認する。
user@mbp ~ % git version
##Gitの初期設定
GitHubに登録したユーザー名とメールアドレスを登録していく。
user@mbp ~ % git config --global user.name "自分が登録したユーザ名"
user@mbp ~ % git config --global user.email 自分が登録したメールアドレス
ここで登録しているメールアドレス(以下、コミットメールアドレス)は、公開されてしまうので要注意です。
私用で使っているアドレスを設定してしまい、公開されたくないという方は、以下のサイトを参考にメールアドレスを変更(削除)しましょう!
メールアドレスの削除
メールアドレスを公開・非公開にしよう(noreplyの設定)
#GitとGitHubの基本的なワークフロー
##新規プロジェクトから始める場合
Gitリポジトリを作るところから始める。リポジトリとは、ファイルやディレクトリの状態、変更履歴を記録する場所。
まずは、今回の練習で管理したいテキストファイルをあらかじめ作る。
続いて、ターミナルでcdコマンドを使いながら移動する。
lsコマンドで見ると、GitIntroフォルダの中にGitPracticeファイルが入っていることがわかる。
user@mbp ~ % cd ~/Desktop
user@mbp Desktop % cd GitIntro
user@mbp GitIntro % ls
GitPractice
ここまでできたら、git initコマンドを使って、「.gitディレクトリ」を作る。
Gitはバージョン管理システムだから、システムの状態を時系列順に保持しておく必要がある。
その保存のための場所が.gitディレクトリである。
user@mbp GitIntro % git init
Reinitialized existing Git repository in /Users/user/Desktop/GitIntro/.git/
ちゃんと作れたか確かめるため、lsコマンドでフォルダの中身を見る。
隠しフォルダまで見るには、オプション[-a]をつける。
user@mbp GitIntro % ls
GitPractice
user@mbp GitIntro % ls -a
. .. .DS_Store .git GitPractice
試しにgitディレクトリの中身を見てみよう。
user@mbp GitIntro % ls -a .git/
. HEAD description info refs
.. config hooks objects
##既存プロジェクトから始める場合
もともとあるプロジェクトをバージョン管理する方法を記載する。
予め作ってあるファイルにcdコマンドで移動し、そこでgit initするだけ。
基本的に上記と同じ。
##基本的なワークフローを理解しよう
基本のワークフローは以下の通り。
①ファイルの変更をステージングエリア(コミットする前の控室)へ追加する
②ローカルリポジトリにコミットする
③リモートリポジトリにプッシュする
対象ファイルのあるフォルダにcdで移動する。
続いてgit addコマンドでステージングエリアに追加し、コミットする。
user@mbp GitIntro % git add GitPractice
user@mbp GitIntro % git commit
コミットメッセージが書けるこのようなエディタ画面になるので、半角英数字に切り替えて[i]を押す。
# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
#
# On branch master
#
# Initial commit
#
# Changes to be committed:
# new file: GitPractice
#
# Untracked files:
# .DS_Store
# sample_git/
#
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
~
一番上の行にコメントを書いて[esc]を押し、[:wq]を押してEnterを押すと元の画面に戻る。
ここまでできたらブラウザのGitHubに移動し、新しいリポジトリを作成する。
(リポジトリ名はわかりやすいものにする。)
完了したら、「…or push an existing repository from the command line」に書かれているコードを実行する。
以下のコードでGitにGitHubを登録する。
user@mbp GitIntro % git remote add origin https://github.com/codarcodar/intro-git.git
続いて、以下のコードを実行する。
user@mbp GitIntro % git branch -M main
user@mbp GitIntro % git push -u origin main
すると、UsernameとPasswordが聞かれるが、PasswordにはTokenが必要らしい。
以下のサイトの手順で解消したので、参考にしてください。
GitHubでhttpsのパスワードが聞かれたときの対処法
##変更をコミットする
ファイルを変更したら、以下の2ステップを踏む。
①ステージングエリアに追加する(git add ファイル名)
→複数のファイルを変更した場合、コミットするファイルを選択するためにあるのがステージングエリア
→ステージングエリアにあるファイルすべてをコミットする場合は**git add.**とする。
②リポジトリにメッセージを付けてコミットする(git commit)
→コミットとは、変更にメッセージを付けて記録・保存すること。
→コミットすることで、変更が時系列でリポジトリ内に記録される。
コミットメッセージは、共同で作業している他のメンバーが「何をどうして変更したか」がわかる内容にする。
1行目:変更内容の要約
2行目:空行
3行目:変更理由・変更の背景
テキストファイル(今回はGitPracticeというファイル)に変更を加えて保存し、ターミナルに移動する。
gitの状態をgit statusで確認すると、以下のように表示される。
user@mbp GitIntro % git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: GitPractice
no changes added to commit (use "git add" and/or "git commit -a")
要約すると、「GitPracticeというファイルの内容が書き換わったので、コミットできるよ!」という意味である。
変更をコミットするために、まずはステージングエリアに追加する。
user@mbp GitIntro % git add GitPractice
追加したあとに、再度「git status」を実行すると、今度はmodified: "ファイル名" が赤字ではなく緑になっている。
これは、ステージングエリアに追加できていると生じるので、OK。
コミットするときに[-v]をつけると、追加された変更点を見ることができるので、おすすめ。
user@mbp GitIntro % git commit -v
コミットメッセージを編集する画面で、+になっている部分が今回の変更点。
先程と同じ手順でコミットを完了させる。
ちなみに、ターミナルで以下のコマンドを実行すると、今までのコミット履歴が見れる。
上の方が最新で下に行くほど古い履歴になっている。
user@mbp GitIntro % git log
commit 1a0a8b9c872c6123cce03293c4b682b502f0da5d (HEAD -> main)
Author: codarcodar <rina.s2.tm.0115@gmail.com>
Date: Sat Dec 18 16:41:16 2021 +0900
変更点を追加した
講座の練習のため
commit 836e1d0f560c437641c7b75427c5326c18cb7dd0 (origin/main)
Author: codarcodar <rina.s2.tm.0115@gmail.com>
Date: Sat Dec 18 15:40:38 2021 +0900
initial commit
##ファイルの削除をコミット
ファイルを削除するときは、rmコマンドを使う。
今回は、second.txtというファイルを削除する。
user@mbp GitIntro % rm second.txt
削除したファイルをステージングエリアに追加するときはrmを使う。
user@mbp GitIntro % git rm second.txt
コミットメッセージを書く編集画面になるので、同様にメッセージを書く。
##現在の状況を確認する
コミットしてからの状況を確認する。
user@mbp GitIntro % git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: GitPractice
no changes added to commit (use "git add" and/or "git commit -a")
git statusは頻繁に使うので、マスターしたい。
##変更履歴を確認する
コミットされたログはgit logで確認できる。
jで下に移動、kで上に移動。qで閉じる。
よく使うオプションは以下の通り。
-
git log --oneline
→一行で表示する。一瞬で何が変更されたかわかる。 -
git log -p ファイル名
→ファイルの差分を表示する。 -
git log -n 数字
→最初の「数字」分のコミットを確認できる。
##ファイルの変更差分を確認する
git diffで、ファイルの変更差分を表示する。
diffはdifferenceの略。
ローカル(実際のファイル)とステージングエリアにあるファイルの状態の差分を表示するため、
git addする前後の差分を表示してくれる。
##GitHubにプッシュする
git remote addでローカルリポジトリをリモートリポジトリに登録する。
「originとは?」と気になるが、これは「今後はoringinという名前でGitHubリポジトリにアクセスできるよ」ということ。
user@mbp ~ % git remote add origin リポジトリのURL
「リポジトリのURL」とは、GitHubのメニュータブから「YourProfile」>タブのRepositories>「対象のリポジトリをクリック」で画面遷移したときのURLをコピーして貼り付ける。
やってみたら、以下のエラーが出た
fatal: not a git repository (or any of the parent directories): .git
.gitディレクトリは前の手順で作ってるはずなのに、.gitディレクトリが存在しないと言われている。
これは、git initコマンドで初期化することで解消される。
ローカルリポジトリの内容をリモートリポジトリへ送信するのは、git pushコマンドを使う。
git push origin masterで、originリポジトリにmasterブランチを送信するという意味。
masterはデフォルトのブランチ名。
#Ruby on Railsチュートリアル的補足
本記事を記載後、RubyOnRailsチュートリアルでGitHubに公開するときに別途設定した項目があるので、記載する。
##編集エディタの設定
クラウドIDE(AWS Cloud9など)でデフォルトのエディタを設定するときのコマンド
cloud9User:~/environment/hello_app (master) $ sudo ln -sf `which nano` /usr/bin
##エイリアス設定
これは必須ではありませんが、checkoutコマンドを短く入力できるので、設定しておくと便利です。
エイリアスとは別名という意味で、省略形を登録することで作業効率をアップできる。
cloud9User:~/environment/hello_app (master) $ git config --global alias.co checkout
##Gitでパスワードを一定時間保持する設定
pushコマンドやpullコマンドを入力するたびにパスワードを入力しなくてよいようにする設定。
cloud9User:~/environment/hello_app (master) $ git config --global credential.helper "cache --timeout=86400"
上記の設定をすると、Gitはパスワードを86,400秒(つまり1日)の間保持してくれます。
セキュリティ意識の高い方は、デフォルトの900秒(つまり15分)のようにもっと短い時間にしてもよいでしょう。