ダメ人間オンライン

あまり信用しないほうがいい技術メモとか備忘録とかその他雑記

gitで特定コミットのコミットされた時刻だけを取得する

特定コミットの情報を表示させるにはgit showコマンドを使うと思いますが、その中からコミット時刻だけを取りたいというような場合。

例えばHEADの情報を表示させるには

git show HEAD

commit d520594c8750b0531344415ec3d3f66b9ba1d7f5
Author: dameninngenn <dameninngenn.owata@gmail.com>
Date:   Sat Dec 31 18:09:38 2011 +0900

    unite-scripts/nicoranking.pl

diff --git a/.vimrc b/.vimrc
index 255a5d1..15733e1 100644
--- a/.vimrc
+++ b/.vimrc
@@ -347,6 +347,9 @@ nnoremap <silent> <Leader>up  :<C-u>Unite phrase<CR>
 vnoremap <silent> <Leader>1  :BlockDiff1<CR>
 vnoremap <silent> <Leader>2  :BlockDiff2<CR>
 
+" Unite用スクリプト
+nnoremap <silent> <Leader>un :Unite script:perl:~/.vim/unite-scripts/nicoranking.pl<CR>
+
 " http://subtech.g.hatena.ne.jp/motemen/20110817/1313577108
 nnoremap <buffer> <silent> ( :<C-U>call PreviewOpenBrace()<CR>
 if !exists('*PreviewOpenBrace')
@@ -461,6 +464,7 @@ function! s:unite_source.gather_candidates(args, context)
   \   { 'word': ',r 【スクリプト実行】[quickrun]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': ',yr 【yankリスト表示】[yankring]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': ',1/,2 【選択範囲のdiff表示】[blockdiff]', 'source': 'my_help', 'kind': 'word' },
+  \   { 'word': ',un 【ニコニコ動画のランキング表示】[unite-scripts]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': '( 【今いるスコープの括弧を表示】[user]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': 'dit 【XMLタグに囲まれた範囲を削除】[system][xml]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': ':GoogleTasks 【googletasksの内容を表示】[command][googletasks]', 'source': 'my_help', 'kind': 'word' },

こんな感じで表示される。時刻はDate:の部分ですね。

ここで--pretty=formatのオプションで時刻だけ表示させようとすると、

git show --pretty=format:"%cd" HEAD
Sat Dec 31 18:09:38 2011 +0900
diff --git a/.vimrc b/.vimrc
index 255a5d1..15733e1 100644
--- a/.vimrc
+++ b/.vimrc
@@ -347,6 +347,9 @@ nnoremap <silent> <Leader>up  :<C-u>Unite phrase<CR>
 vnoremap <silent> <Leader>1  :BlockDiff1<CR>
 vnoremap <silent> <Leader>2  :BlockDiff2<CR>
 
+" Unite用スクリプト
+nnoremap <silent> <Leader>un :Unite script:perl:~/.vim/unite-scripts/nicoranking.pl<CR>
+
 " http://subtech.g.hatena.ne.jp/motemen/20110817/1313577108
 nnoremap <buffer> <silent> ( :<C-U>call PreviewOpenBrace()<CR>
 if !exists('*PreviewOpenBrace')
@@ -461,6 +464,7 @@ function! s:unite_source.gather_candidates(args, context)
   \   { 'word': ',r 【スクリプト実行】[quickrun]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': ',yr 【yankリスト表示】[yankring]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': ',1/,2 【選択範囲のdiff表示】[blockdiff]', 'source': 'my_help', 'kind': 'word' },
+  \   { 'word': ',un 【ニコニコ動画のランキング表示】[unite-scripts]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': '( 【今いるスコープの括弧を表示】[user]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': 'dit 【XMLタグに囲まれた範囲を削除】[system][xml]', 'source': 'my_help', 'kind': 'word' },
   \   { 'word': ':GoogleTasks 【googletasksの内容を表示】[command][googletasks]', 'source': 'my_help', 'kind': 'word' },

となって上部のとこは時刻だけにまとまってますが、diffは表示されたままになります。

詳しくは調べてないですがgit showはlog部分とdiff部分で別々のものを組み合わせて表示してるという感じなのでしょうか。時刻だけ取りたいのに下のdiffの部分はいらないので--quietオプションで消します。

git show --quiet --pretty=format:"%cd" HEAD

これで

Sat Dec 31 18:09:38 2011 +0900

だけとってこれます。formatの%cdを%ctとかにするとepochでとれたりしますね。

HEADのかわりにタグ名とか特定コミットのSHA1とか指定すれば好きなとこの時刻がとってこれます。

git-logとかgit-showは指定できるオプション多すぎてよくわからない。。