1

これはこの質問に関連していますが、別の質問が必要だと思います。

git blame --line-porcelainの出力は次のようになります

27ce485030bf872158ceb011e6bd775d2ead5eeb 9 36 1
author Joao Tavora
author-time 1358179206
committer Joao Tavora
committer-time 1358179206
summary initial commit
boundary
filename test.el
    (defun AB (space task next.task)
242020d0de6363d48d32465299d07239f0a9940f 19 37 1
author Joao Tavora
author-time 1358179709
committer Joao Tavora
committer-time 1358179709
summary reinstate declare
previous 11da1748d905aa9520ee3d6d9ac6a8712db0040f test.el
filename test.el
      (declare (ignore space))
cbfa1ec071dd30a27be82dd041ccc9c384e5ff60 11 38 2
author Joao Tavora
author-time 1358179273
committer Joao Tavora
committer-time 1358179273
summary use thingy
previous 69af7ace6e2b6c006c86e4fd91bf3c15ff8cec07 test.el
filename test.el
      (if (and (some.task.p (task (IP.TASK-thingy task)))

sed(またはgrepまたはawk)を使用して、commit shaとcomitter-timeだけをフィルターで除外するにはどうすればよいですか?上記の例では、次のようになります。

27ce485030bf872158ceb011e6bd775d2ead5eeb 1358179206
242020d0de6363d48d32465299d07239f0a9940f 1358179709
cbfa1ec071dd30a27be82dd041ccc9c384e5ff60 1358179273 

perlのワンライナーは大丈夫かもしれませんが、私はむしろルビーに依存したくありません。

4

3 に答える 3

4

これはうまくいくかもしれません(GNU sed):

sed -r '/^[0-9a-f]{40}\b/!d;:a;/\ncommitter-time\b/bb;$!{N;ba};:b;s/\s+.*(\s.*)/\1/' file
于 2013-01-14T17:42:24.687 に答える
0

これは完全に間違っているかもしれませんが、これを試してください:

git shortlog --format="%H %ct" -- <filename>

tail -n +2コマンドの後にパイプで最初の数行を切り落とすこともできます。確かに、これは行ごとの変更を示していませんが、どの部分が必要か正確にはわかりません。

于 2013-01-14T17:32:14.490 に答える
0

私はそれを発見しました

git blame -l -e -t -- file-to-blame | awk '{print $1 " " $3}'

ほとんど私の問題を解決しますが、著者の時間のためにそうすると思います。--line-porcelainそして、出力を解析することを本当に学びたいです。

于 2013-01-14T17:54:18.177 に答える