gitで指定したコミットから指定したファイルを取り出す

Updated:

たまにしか行なわないので、やり方を忘れてしまい、毎回調べることになる操作のメモです。

gitで、あるコミットのファイルの内容を知るには、git showを使って次のようにする。

$ git show ハッシュ:ファイルのパス名

例えば、次のコマンドで、ハッシュ333efpath/to/fileの内容が標準出力に表示される。

$ git show 3333ef:path/to/file

ファイルをカレントディトリからの相対パスで指定するには、パス名を./で始めればよい。

$ git show 3333ef:./myfile.c

Screenの再接続時にssh agent forwardingを有効にする

Updated:

screenコマンドをデタッチしてから、後ほど再ログインしてscreenに再接続すると、screen上で動いているシェルで、ssh agent forwardingが無効になってしまいます。

これは、agent forwardingに使われるソケットの名前が、sshでログインするたびに変わってしまうためです。実際にはソケット名は次のようになります。

/tmp/ssh-[ランダムな文字列]/agent.[sshdのPID]

これを解決するには、sshdが生成したソケットを指すようなシンボリックリンクを、決め打ちのパスで作るようにします。 そして、環境変数SSH_AUTH_SOCKがそのリンボリックを指すようにしてやります。

実際には、~/.bashrcに次のコードを追加します。

# To enable agent forwarding when screen is reconnected.
#  See http://mokokko.hatenablog.com/entry/2013/03/14/133850
AUTH_SOCK="$HOME/.ssh/.ssh-auth-sock"
if [ -S "$AUTH_SOCK" ]; then
    export SSH_AUTH_SOCK=$AUTH_SOCK
elif [ ! -S "$SSH_AUTH_SOCK" ]; then
    export SSH_AUTH_SOCK=$AUTH_SOCK
elif [ ! -L "$SSH_AUTH_SOCK" ]; then
    ln -snf "$SSH_AUTH_SOCK" $AUTH_SOCK && export SSH_AUTH_SOCK=$AUTH_SOCK
fi

参考:

GitHubに貼りつけたイメージの表示サイズを明示的に指定する

Updated:

GitHubでMarkdownの中にイメージを貼りつけることがあります。

デフォルトでイメージは原寸で表示されるのですが、そのままではイメージが大きすぎる事があります。サイズを明示的に指定することにより、イメージを縮小して表示する方法を調べたのでメモしておきます。

Markdownではなく、HTMLの<img>を使って次のようにすれば、指定したサイズに合わせて表示してくれるのでした。

<img src="http://xxxxxxxx" width="300">

ブログをWordPressからJekyllに移行しました

Updated:

ずい分久しぶりの更新です。 前のポストが2015年1月なので、なんと1年半ぶりのポストです。

ブログをWordPressからJekyllに移行しました。 また、ホスト先もさくらVPSから、GitHub Pagesへと乗りかえました。

Jekyll + GitHub Pagesに乗りかえた理由は、WordPressではMySQLサーバを動かす必要があるが、その運用の手間やコストを無くしたいという点です。 今後はブログをGitHub Pagesでホストするので、MySQLだけでなく、Webサーバも不要となりました。

もう1つの理由は、ブログ記事をMarkdownで記述して、Gitで管理したい、というものですが、こちらもJekyllにする事で実現できました。

サイトのデーマは、Minimal Mistakesを使っています。 ご覧の通り、とてもシンプルなデザインで気に入っています。 実際には、自分の好みに合わせて若干カスタマイズしています。

GitHub PagesはJekyllに対応していますが、Minimal MistakesもGitHub Pages上で動くように設計されています。

過去記事のURLは変わらないようにしてあります。

環境をJekyllベースに移行したので、手軽にブログを更新できるようになりました。 実際には、記事をMarkdownで書いて、Gitでコミットして、GitHubにpushすれば公開されます。

今後はもっと気軽に更新してきますので、よろしくお願いいたします。

Gitでリモートブランチを削除する方法

Updated:

たまにしか実行しない手順は、次にやる時にはやり方を忘れてしまっていて調べ直したりするので、無駄を省くために書き残しておきましょう。

というわけで、まずはGitでリモートブランチを削除する方法です。

リモートブランチを削除するには、pushコマンドを使います。例えばoriginリポジトリのworkブランチを削除するには、次のようにします。

$ git push origin :work

なぜこのgit pushでリモートブランチが削除されるかを説明します。git pushコマンドには次のようにパラメータを与えます。

$ git push <repository> <refspec>

ここで、普通の使い方では、<refspec>部分に対象となるブランチ名を指定します。例えば、workと書けば、ローカルブランチworkがリモートブランチにプッシュされるわけです。

しかし、正式には、<refspec>には「<src>:<dest>」という指定を行うことになっています。<src>にはローカルブランチ(実際には、任意のハッシュ値やHEAD~のような記法も使えます)、<dest>にはリモートブランチを指定します。

ですから、originリポジトリにworkブランチをプッシュする場合には、正式な書き方では次のようになります。

$ git push origin work:work

ただし、ローカルプランチとリモートブランチの名前が同じ場合には、次のように略して書けることになっています。これは普通のgit pushの書き方ですね。

$ git push origin work

さて、<refspec>に「:work」を指定するとどうなるでしょうか。これは、「空のローカルブランチ」をリモートブランチworkにプッシュするという意味になります。つまりリモートブランチworkを削除することになるのです。

もっとも、リポジトリをGitHubやGitLabに置いていれば、GUIで簡単にブランチを削除できてしまいますけどね。