Edited at

gitをコマンドラインから使う場合(これだけは覚えておこう)

More than 3 years have passed since last update.

普段Windows上ではGitExtensionsしか使っていないわたしですが、サーバー上にリポジトリをデプロイするときなどGitをコマンドラインから叩かないといけない機会が時々あります。

そういうときに覚えておかないといけないコマンドを最低限。


クローンする

まずは基本です。

$ git clone [リポジトリアドレス] [配置するディレクトリパス(未指定の場合はリポジトリ名と同じ)]

具体的には

$ git clone git@github.com:TakamiChie/Pico-Tags-Plugin.git tags

など。

また、クローンするリポジトリ内にサブモジュールが使われているときは、別途サブモジュールも読み込みしてやる。

$ git clone [リポジトリアドレス]

$ git submodules init
$ git submodules update

で、だいたいOK。


「Could not open a connection to your authentication agent.」とか「Permission denied (publickey).」とか表示される場合

clone時に上記エラーが表示される場合、リポジトリアクセス用の秘密鍵がサーバに登録されていないのが原因です。秘密鍵(ファイルの先頭が「-----BEGIN RSA PRIVATE KEY-----」から始まっているもの)を~/.ssh/に保存し、ssh-add`します。

$ vi ~/.ssh/github.com.key # ← githubの秘密鍵データ

$ chmod 600 ~/.ssh/github.com.key
$ eval `ssh-agent -s`
$ ssh-add ~/.ssh/github.com.key

秘密鍵ファイルのパーミッションが緩いままだとclone時に怒られてしまうので、厳しく(ここでは600)にしておきましょう。


(リポジトリを最新のものとして)リポジトリの内容を読み込む

リポジトリのデータを読み込む。

$ git pull

どうも「git pullは使うな、git fetchを使え」という意見も多いようですが、とりあえずサーバ上のファイルを更新しない前提では問題が起きていないのでこのまま使っています。


サブモジュールを更新する

また、サブモジュールも更新した場合は、これだけではサブモジュールが更新されない場合があります(と思ったらされることもあるようで、よくわからない)。その場合以下の処理を足す。

$ git submodules foreach 'git pull origin master'

これで全てのサブモジュールをgit pullします。

本来ならgit submodules updateでもいいようですが、たまにmasterブランチを見ていないモジュールがあったりするので、これで統一しておくと楽です。


リポジトリに編集したファイルをコミット

いくらWindows上での開発がメインとはいえ、サーバ上のスクリプトの編集など、場合によってはサーバ上のファイルを直接編集→それをコミットすることはあるので・・・

$ git commit .

ここでコミットメッセージエディタが出ます。自環境のせいかもしれませんが日本語は使えませんので英語で記載しましょう。

コミットするファイルを指定する場合は、引数を.ではなく、ファイル名にする。

$ git commit index.php

ついでにリポジトリ未登録のファイルはコミットできません(GitExtensionsあたりだと勝手にAdd→Commitしてくれるので気にならないのですが)。わすれずにaddしておきましょう。

$ git add config.php


リポジトリのプッシュ

コミットが終わったら、忘れずにpushしましょう。

$ git push .

もし他の環境でリポジトリを編集していたら、事前にpullします。

$ git pull

$ git push .

とりあえずこれだけがあれば最低限の操作はできるかと思います。