恥ずかしくも今までgitの基本をちゃんと勉強しないできたので夏休みの一日を使ってgitを叩き込んでおこうと思います。disclaimer: 自分で分かればいいと思って殴り書きでまとめてあるのでしっかりと学習したい方は一番下に貼っておいた参考にしたサイトを見てもらったほうが早いと思います。
目次
Gitとは
不特定多数の人と共同でファイルをいじる際にいじった内容や履歴などを一括管理してくれるバージョン管理システムの一つ。
どうやって
ディレクトリ毎にレポジトリを作って内容の変更履歴を保存、管理する。
基本的な操作一覧
-
ls
自分が今いるディレクトリにあるファイル一覧を表示 cd [(下層)ディレクトリの先]
-
cd ~
ホーム画面へ戻る -
pwd
自分が今いるディレクトリがわからない時に -
cd ..
自分が今いるディレクトリのひとつ前(上層)のディレクトリへ -
ls -la
文字通り全てのファイルを表示(ファイル表示でも見れないようなファイル、そういうファイルは基本いじらないほうがよし!)
簡単なチュートリアル
新しく作ったファイル/ファイルの変更をコミット
mkdir ex
でプロジェクトを作りcd ex
でそのディレクトリに行きgit init
でgitを起動。適当なテキストファイルを作り保存。git add .
(gitに変更箇所があることを教えるコマンド)
git log --author="username"
で特定のユーザーからのコミットのみを表示
git status
でレポジトリと今いるディレクトリを比べて何か変化があったかどうかを確認できる。たとえばディレクトリにex.pyとex2.pyがあったとして二つに変更を加えてgit status
を行ってみたところ...
untracked filesというのはつまりコミットされていないファイル。つまりコミットしてないから変更履歴を管理できてないよと教えてくれている。
そこでコミットするためにはgit add [file]
で一度ローカルレポジトリに入れてからgit commit
で変更を追加する。
working copy > staging area > repositoryの順番。詳しくは上の(下手な)画像を参照。。。
git commit -m "[comment goes in here]"
でコミット完了。
git commit -m "adding all the files to the repository"
git log
で確認可能。
変更したファイルの違いを確認
ファイルを変更すると勿論git status
でレポジトリのファイルを違うよ!と警告が出る。具体的にどんな違いがあるのかを一括で確認したい時に使えるのがgit diff
ここではex.pyのファイル内にあるdef bar(): return 2
からdef bar(): return 345
に変わってるぞと教えてくれている。赤字が現在レポジトリに入っているデータで緑色が作業ディレクトリに入っているデータの内容。git diff
は作業ディレクトリとレポジトリを比較しているのであってその中間に位置しているステージングエリアにあるファイルではないことに注意。言い換えると一度git add [file]
をしたらそのファイルはgit diff
上では表示されないことを覚えておく。もしstaging areaと比較したい場合はgit diff --staged
で確認可能。
ファイルの削除
git rm [file name]
でレポジトリと作業ディレクトリにあるファイルを削除してくれる。削除した後もコミットするのを忘れずに!
ファイルの移動/名前の変更
git mv [file name] [new file name]
で名前の変更。git mv [file name] [directory name]
でファイルの移動。git mv ex.py test/ex.py
もしくはgit mv ex.py test/ex2.py
で名前変更とファイルへの移動を同時に行える。
ちょっとした実践
youtubeのチュートリアルにあったファイルを使って実際にgitを使ってみるよ!ダウンロードはここから(all credits goes to Bucky) 。
Dogs_Site
ディレクトリまで行きgit init
とgit add .
からのgit commit -m "comment"
でレポジトリに全てのファイルを追加。
こんな感じでぐわーーって出てくれば大丈夫。
git commit -amでstagingを通さずにレポジトリへ
任意でファイルを選んで(自分はindex.htmlを)コメントアウトの行数でも何でも適当に変える。git status
で変更を確認してgit commit -am "Cleaned up the HTML comments
するとステージングエリアにいちいち送ることなく一気に変更したファイルをレポジトリに送ることが出来る。git status
で確認してみると綺麗に反映されていることが分かる。
ただこのコマンドを使うと全ての作業ファイルをレポジトリに送ってしまうことを頭に入れておく。またファイルをシンプルに編集している時以外は使わないこと方が良い。
変更を取り消す
git status
で変更点を確認しgit checkout -- [file name]
ステージングしたファイルの取り消し
変更したファイルをgit add [file]
でステージングへと送ったはいいがやっぱりコミットはしたくない。取り下げたい!なんてときにはgit reset HEAD
で最新のファイルをステージングから取り下げて作業ディレクトリへと持ってこれる。
(コミットした後の)変更を取り消して古い方のファイルをレポジトリに持ってくる
git log
でどのコミットに戻りたいかを確認。
commit 739cc67b99beecfbae4271028065263db4251818
Author: xxxxxxxxxxxxx
Date: Fri Aug 5 23:40:15 2016 -0700
cleaned up the HTML comments a bit
commit c71d29002ade2e0806f5aab96e7262d61bed2a5e
Author: xxxxxxxxxxxxx
Date: Fri Aug 5 23:36:07 2016 -0700
our first commit
行きたい先のcommitの横にあるidをコピーして(もしくは最初の何個かの文字を入力)git checkout [id] -- [file name]
で指定したファイルを持ってくる。git statusで確認した後commit。
Githubを使ってみる
githubとgitの違いは下記の参考リンクを見ると分かりやすいが、簡単にいえばオンラインネットワークを介してパブリックに共有できるgitと考えてもらえれば良いと思う。
githubの右上にあるドロップダウンバーにあるcreate a new repositoryをクリック。
適当な作業ディレクトリを作りいつもの手順でgit commit
まで行う。ここからgithubへpush(オンライン上に持ってくことをpushと呼ぶ。pullの代わりにfetch)する。先ほどのウェブページに戻って上にあるリンクをコピー。git remote add [リンクの名前を任意で(わざわざリンクを毎回打つのが大変なので] [リンク]
具体的にはgit remote add github_test https://github.com/xxxxxxxxxxxx/test.git
。git push -u [オンラインレポジトリ]
でオンラインレポジトリへと持っていく。