【问题标题】:git log output like svn ls -vgit 日志输出,如 svn ls -v
【发布时间】:2010-10-02 20:35:48
【问题描述】:

有没有办法让 git 像 svn ls -v 那样给我输出。基本上是每个文件的列表以及最后一次编辑该文件的人?像这样:

filea.txt     Someone Else
fileb.txt     Another Person

也许即使使用 SHA 来识别更改发生的提交?

【问题讨论】:

  • 太紧了,不知什么原因我不知道 svn ls,谢谢

标签: svn git


【解决方案1】:

在 git 中问这个问题不是很自然,但你可以通过这样的方式实现你想要的。

for a in $(ls); do git log --pretty=format:"%h%x09%an%x09%ad%x09$a" -1 -- "$a"; done

这会遍历当前目录中的每个文件并对其执行git log 以查找影响它的最后一次提交。

它不是很有效,因为它搜索每个文件的 git 历史记录,并且不努力重用以前搜索的结果。但是,它是单行的。

【讨论】:

  • 还添加了 --no-pager 和另一个 echo 以获得新行。对于 $(ls) 中的 a;做 git --no-pager log --pretty=format:"%h%x09%an%x09%ad%x09$a" -1 -- "$a";回声“”;完成
  • @koppor 完整列表在 git-log 的手册页上,在 PRETTY FORMATS 部分下,格式: 列表:git-log man page
【解决方案2】:

您想玩转git log 及其漂亮的格式。这是一个示例,它并不能完全满足您的需求,但应该可以帮助您:

git log --pretty=format:"%h: %s -- %an"

打印:

...
58a2e46: Added readme for github. -- DylanFM
...

【讨论】:

    【解决方案3】:

    问题是:为什么需要它?目前 git 缺少可以执行“svn ls -v”等效的单个命令,并且您必须编写一些脚本:我认为“git log -1 -- $filename”的想法是最简单的解决方案(术语要编写的脚本行数);如果是的话,它可能会是“git blame”。

    但我想还有其他方法可以解决您使用“svn ls -v”解决的问题。

    还请记住,对于非线性历史,上次更改文件的人这一概念并不明确。

    【讨论】:

    • 我只在一个特殊的、奇怪的情况下需要它。在另外两个人重新设计它之后,我正在从以前版本的网站中删除 kruft。我添加的任何内容都来自旧站点,来自他们的任何内容都是新的。日复一日,你是对的,我不需要它。
    • 哦,在这种情况下,我知道历史是线性的......我的所有更改至少在其他人触及它之前一个月就停止了。
    • “git log -p --author=”不是解决这个问题的好办法吗?
    • 所以你想知道他们改变的所有文件。我认为'--author='(或'--after=',或..说明符)与'--names-only'和适当的'--pretty=format=结合使用。 ..' 选项,以及 sort 和 uniq,可用于生成由它们更改的所有文件的列表。
    猜你喜欢
    • 2012-04-21
    • 1970-01-01
    • 2014-10-15
    • 2019-06-13
    • 2017-09-10
    • 2011-06-03
    • 2021-08-28
    • 2012-11-18
    • 1970-01-01
    相关资源
    最近更新 更多