gitは日常的に使ってますが、使用頻度が低いコマンドはすぐ忘れてしまうので自分用のメモをここに残しています。
(時々更新予定)
プロジェクト作成
$ cd プロジェクトのdir
$ git init
ファイル追加
$ git add 追加したいファイル
$ git add . # 全部追加できる
空のディレクトリは追加できないので、よくディレクトリに適当な.gitnoteなどの空ファイルを作るパターンが多いです。
ユーザ名とメールアドレスの設定関連
ユーザ名とメールアドレスはシステム全体で自動的に設定されるグローバルと、そのプロジェクトのみで使用できるローカルの二種類が設定可能。
多少面倒でもグローバルには誰が見ても当たりさわりのないものを設定しておいて、ローカルで個々のを設定しておくとあらぬ事故を防げてお得です。
# グローバル設定
$ git config --global user.name ユーザ名
$ git config --global user.email メールアドレス
# ローカル設定
$ git config --local user.name ユーザ名
$ git config --local user.email メールアドレス
# 確認
$ git config --list
gitに無視させたいファイルがある
.gitignoreファイルを作って、その中に無視させたいファイルを書けばOK。
*.o
out/
ワイルドカードも使用可能で、↑の例では、ほげほげ.oファイルすべてとoutディレクトリのみが無視される
(outディレクトリの中にあるファイルは無視されない)
プロジェクトごとにわざわざ書くのが面倒な場合は、以下に各言語のテンプレートがあるので、ここからテンプレートを持ってくると便利です。
https://github.com/github/gitignore
プロジェクトを.git抜きでエクスポートしたい
.git抜きでエクスポートする場合は以下のようにする
$ git archive --format=tar.gz ブランチorタグor番号 -o 出力ファイル名
# ↑の場合はカレントの位置を基準としたアーカイブを作成
# してしまうので、特定のディレクトリの中に収めたい場合はこれ
$ git archive --format=tar.gz -prefix=ディレクトリ名/ ブランチorタグor番号 -o 出力ファイル名
git checkout-indexも似たようなことができますが、使用方法を間違えると危ないのでよほどのことが無い限りgit archiveで運用したほうがいいです。
別のリポジトリの変更点を反映したい(変更履歴付きで)
まず、別のリポジトリの差分をgit format-patch でパッチを作る
$ git format-patch ブランチorタグor番号
すると、00XX-xxxx.patchというファイルができるので、これらを反映したいリポジトリにコピーする。
その後、git am で適用するとOK
$ git am パッチファイル名
失敗するとなにか言われるので、git am --abortとかすると取り消せる。
abortで取り消したあとで、patchファイルを編集して再度git amしてもいい。
プロキシ設定
イントラネットなどでプロキシが設定されていることは当たり前なので、外部に接続する時はやっておくと吉
$ git config --global http.proxy プロキシサーバのアドレス:ポート番号
github色々
ローカルで新規にリポジトリを作る場合は、Github上で新規に作ったあと以下のようにする。
$ cd プロジェクト名
$ git init
$ git config --local user.name ユーザ名
$ git config --local user.email メールアドレス
$ git config --local github.user githubユーザ名
$ git config --local github.token github APIキー
$ git remote add origin git@github.com:ユーザ名/リポジトリ名.git
$ git fetch
$ git checkout master
リモートへの反映は次のようにやる
$ git commit -a -m コミットメッセージ
$ git push origin master
(master以外を指定するとそのブランチがリモートにも作成される。既にある場合そのブランチがアップデートされる)
リモートからの反映は次のようにやる(remoteのbranchに注意)
$ git fetch
$ git merge origin/master
Windowsでgitgitしたい
windowsでGitしてブランチ作って管理したいと思うことってありませんか?
私はwindowsでしか動かないツールも扱うことが多いので、結構あります。
で、Windows上でのgitは、前は面倒だったり動作に問題がありましたが今は結構使えるようになってます。
GUI派はsourcetree落としておくと何かと便利。
gitで作ったプロジェクトがsambaで接続されたUNC形式なパスでも問題なく操作できて、クロス開発がやりやすいです。
日本語も化けないのは有能。
余談ですが、Visual Studio 2013ではgitが普通に使えるらしい。。
これはもうVSSなんか窓からなげすt。。。
2012は別途Extensionを入れるとOK
msysgit
http://msysgit.github.io/
sourcetree
http://www.sourcetreeapp.com/download/
Visual Studio Tools for Git
http://visualstudiogallery.msdn.microsoft.com/abafc7d6-dcaa-40f4-8a5e-d6724bdb980c
インストールの流れとしては
msysgit→sourcetreeの順番だけど、sourcetreeは内部的にgitを持ってるので、sourcetree単体でも問題ないかもしれません。
msysgitのインストール時にRun Git and included Unix tools from the Windows Command Prompt
を選択するとcmdでgitが普通に使えるようになるので何かと捗ります。
gitoliteでプライベートなGitサーバの管理
プライベートなGitサーバを作るときに結構便利
パッケージ導入
$ sudo apt-get install gitolite
Warinigが出ることがあるけど大丈夫
gitoliteユーザの作成
管理はgitoliteにやらせましょうということでユーザ作成
$ sudo adduser --system --disabled-password --shell /bin/sh --group gitolite --home /var/gitolite
home は別に /home/gitolite でも構わないみたいです。
管理者の設定
gitoliteを管理するユーザを設定します。
gitoliteはRSA公開鍵を使ってユーザ管理をやります。
なので、今使っているrsaの鍵とは違う鍵を使いたい場合は次のようにします。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa) ← ここに新しいファイル名を追記すること
で、新しく作った公開鍵の名前をid_rsa_admin_gitとすると。。
sudo -H -u gitolite gl-setup ~/.ssh/id_rsa_admin_git.pub
とするとOK
しばらくするとコンフィグ設定をするためにエディタが起動するけど、今はなにもしなくてそのままエディタを終われば良い。
sshのconfigを編集
sshのconfigを編集して先ほど設定したアドミン用の鍵を使わせるようにする。
~/.ssh/configを次のように編集
host my_gitserver
user gitolite
hostname 192.168.1.100(Gitサーバのホスト名かIP)
port 22
identityfile ~/.ssh/id_rsa_admin_git
終わったらCloneできるかどうか確認。
$ cd 適当なディレクトリ
$ git clone ssh://my_gitserver/testing
リポジトリの基本的な動作
このへんはほとんどgithub使う時と変わらない感じです。
sshのconfigにサーバ接続情報が書いていれば以下でOK
$ git clone ssh://my_gitserver/testing
リモードへの変更反映
console:
$ git push origin master
リモードからの変更を取得
console:
$ git pull
新しいユーザの追加
[ユーザ側]
管理者を作った時のように、sshの公開鍵を作成。
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (~/.ssh/id_rsa) ← ここに新しいファイル名を追記すること
で、新しく作った公開鍵の名前をid_rsa_user_gitとして、~/.ssh/configを以下のようにする。
host linux_gitserver
user gitolite
hostname 192.168.1.100(Gitサーバのホスト名かIP)
port 22
identityfile ~/.ssh/id_rsa_user_git
終わったら、id_rsa_user_git.pub(公開鍵)をgitサーバの管理者に渡す。
[管理者側]
ユーザから公開鍵を受け取ったら、gitoliteにユーザの鍵を追加する必要があるのですが、gitoliteはgitでユーザ情報もかんりしているので、管理情報をgitからクローンしてきます。
git clone ssh://my_gitserver/gitolite-admin
これで、gitolite-admin以下に[conf]と[keydir]ができるので、keydirのほうにもらった公開鍵をコピーしてpushすればOK
cp もらった公開鍵 gitolite-admin/keydir/ユーザ名.pub
git add keydir/ユーザ名.pub
git commit -a -m "user add hogehoge"
git push
[ユーザ側]
管理者が追加したら、以下で確認。
$ cd hogehoge
$ git clone ssh://linux_gitserver/testing
新しいリポジトリの作成
先ほど作ったgitolite-adminレポジトリのconfにある[gitolite.conf]を次のように追記すればOK。
repo [新しいレポジトリ名]
RW+ = [許可したいユーザ名]
これをgit commit git push するだけでOK
ユーザ名はもらった公開鍵の.pubを抜いた名前となるので注意。
現在進行中のローカルリポジトリを丸々リモートに反映する
git remote add origin <SSHの位置>
git push origin --all
で全ブランチが反映されます。
gitoliteからリポジトリを削除する
gitolite-adminレポジトリのconfにある[gitolite.conf]にあるリポジトリの記述を削除したあとで、いつものように
git commit -a -m "delete xxx repo"
git push origin master
として反映すればとりあえず消えますが、gitoliteサーバにデータがまだ残ってるので、gitoliteサーバに入ってデータを削除する必要があります
sudp su - gitolite
cd repositories
rm -rf <消したいレポジトリ>.git