0

通过命令:

$git diff --name-status tag1 tag2 -- target-src

输出如下:

M       src/config.h
M       src/createTable.sql
A       src/gameserver/BattleGround_10v10.h
M       src/gameserver/CMakeLists.txt
M       src/gameserver/achieve.cpp
M       src/gameserver/achieve.h
A       src/gameserver/action.cpp
A       src/gameserver/action.h
A       src/gameserver/activity.cpp
A       src/gameserver/activity.h
M       src/gameserver/admin.cpp

我得到了在两个标签之间修改的文件。但我想要按承诺时间排列的列表顺序。我怎样才能做到这一点?


感谢ilius 的回答,我添加awk了我的请求:

git diff --name-status tag1 tag2 | while read line ; do
    status=${line:0:1}
    path=${line:2}
    date=$(git log -1 '--pretty=format:%ci' -- "$path")
    echo "$date    $status   $path"
done | sort -r | awk '{print $4" "$5}'

但是我觉得太复杂了。能不能简单点?

4

2 回答 2

0

你可以尝试同样的事情,但使用git log

git log --name-status tag1 tag2 -- target-src

这样,文件按照提交的顺序排序。还有git log各种排序选项,您可以尝试。

于 2013-08-23T10:25:44.263 回答
0

使用mart1n的想法

git log --name-status '--pretty=format:' tag1 tag2 -- target-src | grep -vxh '\s*'

给出一个干净的输出。

也试试这个脚本:

git diff --name-status tag1 tag2 | while read line ; do
    status=${line:0:1}
    path=${line:2}
    date=$(git log -1 '--pretty=format:%ci' -- "$path")
    echo "$date    $status   $path"
done | sort -r

您可以稍后删除日期(用于排序),但我认为日期很有用。

如果您希望旧的更改文件位于顶部,您也可以删除-r选项。sort

于 2013-08-23T10:53:36.977 回答