2009年09月21日(Mon)
■ githubのgistを利用する
GitHubには大きくわけて2つのエリアがあります。ひとつは複数のファイルを束ねて管理するリポジトリ。もうひとつは単体のファイルを管理するGistです。今回、GitHubのGistにファイルを作成し、ローカルにpull(ダウンロード)したり、push(アップロード)してみました。
前提
global git configを設定する
https://github.com/account にある、"Global Git Config"をクリックすると、次のようなコマンドがでてきます。
git config --global github.user "your user name" git config --global github.token "your token id"
その通りにコマンド(git config)を打つと、$HOME/.gitconfigに次の3行が追加されます。
[github] user = "your user name" token = "your token id"
$HOME/.ssh/configを設定する
1 Host github.com 2 User git 3 Hostname github.com 4 PreferredAuthentications publickey 5 IdentityFile /home/hoge/.ssh/id_rsa
※この設定は、ダウンロード(clone,pull)するだけならばいりません。アップロード(push)するときに必要です。
Webで、Gistを作成する。
http://gist.github.com/ で、適当な内容を作り、"Paste"すると新規にGistが作成されます。
以下、対象Gistを、 http://gist.github.com/189008 を例にします。
githubのgistからダウンロード(pull)する
初回時
%cd $HOME/local/work/gist %git clone git@gist.github.com:189008.git ./gist-189008 Initialized empty Git repository in /home/hoge/local/work/gists/gist-189008/.git/ Enter passphrase for key '/home/hoge/.ssh/id_rsa': Pushing your gist... remote: Counting objects: 17, done. remote: Compressing objects: 100% (10/10), done. remote: Total 17 (delta 3), reused 0 (delta 0) Receiving objects: 100% (17/17), 2.16 KiB, done. Resolving deltas: 100% (3/3), done. %ls gist-189008 %cd gist-189008 %ls github-signup
二度目以降
%git pull Enter passphrase for key '/home/hoge/.ssh/id_rsa': Pushing your gist... remote: Counting objects: 5, done. remote: Compressing objects: 100% (2/2), done. remote: Total 3 (delta 1), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. From gist.github.com:189008 fbed720..f0e6a5d master -> origin/master Updating fbed720..f0e6a5d Fast forward github-signup | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
ローカルで編集し、githubのgistsを更新する
ローカルで編集分をコミットする
%git commit -a -m "del amazon url" [master 0089e65] del amazon url 1 files changed, 0 insertions(+), 1 deletions(-)
最終行のamazonのurlをdelしたとメッセージを入れてコミットします。
github上のgistsにアップロード(push)する
%git push origin master Enter passphrase for key '/home/hoge/.ssh/id_rsa': Pushing your gist... Counting objects: 5, done. Delta compression using up to 2 threads. Compressing objects: 100% (2/2), done. Writing objects: 100% (3/3), 270 bytes, done. Total 3 (delta 1), reused 1 (delta 0) To git@gist.github.com:189008.git f0e6a5d..0089e65 master -> master
まとめ
%git clone <対象とするgit> <ダウンロードディレクトリ> %vi ダウンロードディレクトリ/ターゲットファイル (適当に編集します) %git commit -a -m "変更メッセージ" (このコミットはダウンロードしてきたローカルのリポジトリに対してです) %git push origin master (リモートにあるgithub.comに対して、更新をかけます)
■ gistsを便利に使うgisty
GitHubのGistはちょっとしたサンプルコードや、単体のコードを置くのに便利です。ただ、最初のGistの作成はgitコマンドからはできず、Webからでないとできませんが、gistyをインストールするとコマンドラインからGistの新規作成およびcloneができるようになります。
前提条件
- RubyGemsがインストールされていること
- 環境変数 RB_USER_INSTALL=true が設定されていること
- これが設定されていないと、nokogiriがインストールできない
- 参考:さくらサーバーに gem をインストールする際に「chown/chgrp: Operation not permitted」とエラーが出た場合 - make world
gistyのインストール
%gem sources -a http://gems.github.com %setenv RB_USER_INSTALL true %gem install nokogiri %gem install swdyh-gisty %vi ~/.cshrc setenv GISTY_DIR $HOME/local/work/gists %rehash
gisty利用時の作業ファイル
gistyを利用したときの作業ファイルは、gisty適用前と適用後で変わります。
適用前
hoge/aa.txt
gisty適用
%cd hoge %gisty post aa.txt
GitHubにGistが新規に作成され、ローカルにcloneされます。clone先は、先に設定した、$GISTY_DIR/配下です。
適用後
%cd $GISTY_DIR/<gist_id>/ %ls aa.txt
ローカルにclone(初回ダウンロード)されるのは、$GIST_DIRの下で、新規に作成された<gist_id>が振られたディレクトリが作られ、その下に当該ファイルができます。
ローカルでの編集およびコミット、pushは、以降、この $GIST_DIR/<gist_id>/aa.txt で行います。
gistyの便利な点
$GIST_DIRを見ても、数字のディレクトリが並ぶだけで、どこに目的とするファイルがあるかわからなくなるのですが、gisty listを使うと、パブリックおよびプライベートの属性、ファイルの場所がわかりやすく参照できます。
%cd $GIST_DIR %ls 189008 190336 444e99328812038e7c26 %gisty list - public gist - 190336: README.txt 189008: github-signup - private gist - 444e99328812038e7c26: README.txt