今回はGitをMacのターミナルで使う例です。
すでにGitは導入済みでSource TreeなどでGUI環境でGitを使っている初心者向けの記事です。
入門者はまずSource Treeで使ってみることをお勧めします。Source Treeの使い方はこちらの「Git入門(2)〜SourceTreeの使い方」を参考にしてください。
Source Treeに慣れてきたら、できるだけ早くコマンドでGit操作できるようになりましょう。よく使うコマンドは限られていますし、何よりも早くて簡潔明瞭だからです。
Gitの使い方詳細はGitBookが参考になります。
環境設定
必要に応じてGitの環境設定します。
*ユーザー名登録
例ではユーザー名を「Tahara」に設定
git config --global user.name "Tahara"
*メールアドレス登録
[自分のメールアドレス]部分を削除して自分のメールアドレスを記述
git config --global user.email [自分のメールアドレス]
コミットするエディッタの登録
デフォルトではVimが立ち上がります。今回の例ではSublime textを使用する場合です。
まず、sublへのシンボリックリンクを作成すること。〜/binディレクトリがあると仮定したら以下コマンド。〜/binディレクトリが無ければ作ります。
ln -s "/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl" ~/bin/subl
git config --global core.editor "subl -n -w"
うまくいかないときは次を試しましょう。
export PATH=$HOME/bin:$PATH
Gitの操作の流れ
ローカルリポジトリ
ローカルリポジトリとは履歴データの保管場所のことです。
ワークツリー(現在の作業場所)で作業したデーターをローカルリポジトリに保存します。
基本的な考え方として、ローカルは3つのエリアに分かれます。
- ワークツリー:ファイル変更する場所
- ステージ:スナップショット記録(コミット)を変更する準備をする場所
- リポジトリ:スナップショット記録
Gitデータ構造について
ポイントをまとめると次のようになります。
- リポジトリに圧縮ファイル、ツリー、コミットファイルを作成することでデータを保存しています。
Gitではこれらのファイルを「Gitオブジェクト」と呼んでいます。Gitオブジェクトは「.git/objects」ディレクトリの下に保存されます。 - コミットが親コミットを持つことで変更履歴を辿ることができます。
- Gitの本質はデータを圧縮して、スナップショットを保存していることです。
- Gitコマンドは、そのデータに対して色々な操作をしていることです。
初回以降のコミットはそのコミット内容を保存すると共にその一つ前の親コミットも合わせて記録します。
そうすることで必ず一つ前の履歴に戻れる仕組みができるわけです。
リポジトリの作成と使いかた
ローカルリポジトリ作成
ローカルリポジトリを作成するコマンド
git init
- まずはターミナルでプロジェクトフォルダに 「cd」で移動
- 「git init」で.gitディレクトリが作成されます
ここには、リポジトリ(圧縮ファイル、ツリーファイル、コミットファイル)、インデックスファイル、設定ファイルが作成されます。
すでにリモートに存在するGitリポジトリをコピー
リモートからクローンする方法
リポジトリ名のフォルダができて、その中にクローンしたデータが入ります。
初心者は2重にフォルダができる結果になりますので注意。
git clone<リポジトリ名>
クローンの例
git clone https://github.com/haidoro/1html_beginer.git
ステージに追加とコミット
全ての変更ファイルをステージに追加するコマンドは「git add」の後にピリオドをつけます。
特定のファイルをステージに追加するにはそのファイル名をつけます。
git add .
*コミット
「git commit」でコミットすることができます。
git commit
ファイルの変更を確認
「git status」コマンドは変更のあったファイル名を表示してくれます。
ステージに追加される前の変更か、ステージに変更後の変更か分けて表示されます。
git status
具体的に変更されたファイルの変更された内容を表示するには「git diff」 コマンドを使います。
ターミナルの確認が終わったらキーボードの「Qキー」で「git diff」の表示を閉じます。
*「git add」する前の変更を確認
git diff #特定ファイルの場合 git diff <ファイル名>
*「git add」した後の変更確認
git diff --staged
変更履歴
今までの変更履歴をみる場合は「git log」を使います。
git log
ファイル削除
ファイル削除関連のコマンドは慎重に行いましょう。
フォルダからGitを使ってファイルを削除する方法です。
*ファイル削除 git rm <ファイル名> #ディレクトリ削除 git rm -r <ディレクトリ名>
ファイルを残すとき
「–cached」 オプションを付けることにより、ファイルを残したままGitの管理対象から外すことができます。
「–cached」 オプションつけないと、ファイルごと削除することになります。使用する場合は慎重に!
git rm --cached <ファイル名>
GitHubにプッシュする方法
まず、GitHubのページでログインしておきます。
ログイン後「New repository」ボタンでリモートリポジトリを作成します。これで空のリモートリポジトリができました。
ローカルリポジトリにリモートリポジトリを新規追加
*リモートに接続する設定
リモートに接続する設定のコマンドは新規リモートリポジトリを作成したら表示されますので、それをコピーして使います。
*リモートに接続する設定のコマンド
git remote add origin https://github.com/[アカウント名]/[リモートリポジトリ名]
*初回のpushは以下コマンド
git push -u origin master
*2回目以降のpushは以下コマンド
git push
*ブランチを複数作成して作業をしている場合は次のコマンドが便利で安全です。ブランチの有無関係なしに「push」はこのコマンドとしておくのも良いかもしれません。
git push -u origin HEAD
コマンドのエイリアス
エイリアスを作成しておくと入力が楽になります。次の例ではコミットは「cm」だから、`git cm`と入力すればOK
git config --global alias.cm commit git config --global alias.st status git config --global alias.br branch git config --global alias.ch checkout
バージョン管理したく無いファイル
「.gitignore」ファイルはGit管理の対象から外す一覧のファイルです。これは重要な考え方です。
パスワードが入ったファイルやpsdファイル、キャッシュ、MACの専用ファイルなどや、フロントエンドでは「node_modulesフォルダ」などは巨大になりますので「.gitignore」ファイルに記述しておきます。
このようにGitの管理から外したい場合は、「.gitignore」ファイルを作成して記載します。
*注意:パスワードやAPIの認証コードなどを不用意にGitHubに公開することは危険な行為です。くれぐれも注意してください。AWSなどで不正利用されて多額の請求を受けたなどの笑えないミスが多く報告されています。
「.gitignore」記述方法の例
ファイル名 フォルダ名/ *.psd
変更をもとに戻す
Gitでは基本的に変更した内容を元に戻すことはやらない方が良いです。トラブルの元になります。
どうしても必要な時は少し練習をしてしっかりと理解して行いましょう。
次の内容はこんなことができるという簡単な事例です。参考程度にみてください。
詳細はもっと複雑です。どこかでまた特集を組みたいと思います。
*Gitリセットコマンド詳説はこちら
ステージした後に変更を元に戻す
git add した後にファイルの変更内容を元の状態に戻す方法です。
ただし、これはgit addしたことをやめただけで、ワークツリー内のファイルの内容まで書き換わりません。
git reset HEAD <ファイル名>
*全ての変更を取り消す場合
git reset HEAD .
もしワークツリーの内容を変更する場合は「git checkout」コマンドを使います。
git add する前のファイルの変更内容をもとの状態に戻します。
「git checkout」の後の「–」の前と後ろには半角空白が入ります。
git checkout -- <ファイル名>
*全ての変更を取り消す場合
git checkout --.
リモートとのやりとり
リモート情報の確認
リモートを表示するコマンドです。
対応するURLを表示するときは「-v」を付けます。
git remote
Fetchの仕組み
リモート情報をremotes/リモート/ブランチとして別ブランチにして保存します。
リモートから取得(Fetch)
*fetchのコマンド
リモート名は通常「origin」です。
git fetch <リモート名> #実例 git fetch origin
*別ブランチにfetchで取得した情報をマージする方法。
git merge <リモート名>/<ブランチ名> #実例 git merge origin/master
*リモートから取得(pull)
リモートから情報を取得して、マージまで一度に実施します。
git pull <リモート名> <ブランチ名> #実例 git pull origin master #省略したコマンド git pull
これは「git fetch origin master」と「git merge origin master」を行ったことと同じことになります。
リモート情報を詳しく知る
- FetchとPushのURL
- リモートブランチ
- git pullの挙動
- git pushの挙動
git remote show <リモート名> # 実例 git remote show origin
リモートを変更、削除
*リモートを変更
get remote rename <旧リモート名> <新リモート名>
*リモートを削除
get remote rm <リモート名>
コメントを投稿するにはログインしてください。