Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Git,如何找到谁修改了目录内容?_Git - Fatal编程技术网

使用Git,如何找到谁修改了目录内容?

使用Git,如何找到谁修改了目录内容?,git,Git,如何在Git中找到上次修改目录内容的人?在理想情况下,我希望ls的输出与git产生的内容相同。因此,对于存储库的每个跟踪目录,找到上次修改它的人 举个例子,假设这是目录结构: |-project |-dir-a |-file1.txt (modified by Alice in commit 1) |-file2.txt (modified by Bob in commit 2) |-file5.txt (modified by Carl in commit 4)

如何在Git中找到上次修改目录内容的人?在理想情况下,我希望ls的输出与git产生的内容相同。因此,对于存储库的每个跟踪目录,找到上次修改它的人

举个例子,假设这是目录结构:

|-project
  |-dir-a
    |-file1.txt (modified by Alice in commit 1)
    |-file2.txt (modified by Bob in commit 2)
    |-file5.txt (modified by Carl in commit 4)
  |-dir-b
    |-file3.txt (modified by Alice in commit 3)
    |-file4.txt (modified by Alice in commit 3)
然后,我正在寻找的脚本在project/中运行时,将生成如下内容:

$ unknown-command
commit4 Carl  dir-a
commit3 Alice dir-b
我不怕编写脚本,所以它不需要是一个完整的解决方案

如何在Git中找到上次修改目录内容的人

如果目录内容是指工作树,那么答案很简单:你不能。至少,不仅仅是Git

原因是,在Git中,只有在创建一个。仅进行本地更改,甚至进行阶段性更改(即修改索引)与任何名称都没有关联。吉特知道,你奶奶可能做了

如何在Git中找到上次修改目录内容的人

如果目录内容是指工作树,那么答案很简单:你不能。至少,不仅仅是Git


原因是,在Git中,只有在创建一个。仅进行本地更改,甚至进行阶段性更改(即修改索引)与任何名称都没有关联。据Git所知,你的祖母可能已经做到了。

你在寻找Git日志名状态吗

$ git lg --name-status
* 67475d0 - (HEAD, origin/master, master) 2015-04-09-rename-files-in-batch.html <lgfang@5 days ago>|
| A     _posts/util/2015-04-09-rename-files-in-batch.html

* 2098891 - 2015-04-07-kindle-dedrm: add <lgfang@6 days ago>|
| A     _posts/rec/2015-04-07-kindle-dedrm.html

* a96fc4e - 2015-04-07-snmptrapd: add <lgfang@6 days ago>|
| A     _posts/network/2015-04-07-snmptrapd.html

* 059342f - 2014-03-26-java-cover: add <lgfang@8 days ago>|

您正在查找git日志名状态吗

$ git lg --name-status
* 67475d0 - (HEAD, origin/master, master) 2015-04-09-rename-files-in-batch.html <lgfang@5 days ago>|
| A     _posts/util/2015-04-09-rename-files-in-batch.html

* 2098891 - 2015-04-07-kindle-dedrm: add <lgfang@6 days ago>|
| A     _posts/rec/2015-04-07-kindle-dedrm.html

* a96fc4e - 2015-04-07-snmptrapd: add <lgfang@6 days ago>|
| A     _posts/network/2015-04-07-snmptrapd.html

* 059342f - 2014-03-26-java-cover: add <lgfang@8 days ago>|
你是说像这样吗

for i in $(ls -1); do git log --format=format:"%h  %<(28)%ai %<(30)%an $i" -n1 $i; done
编辑:多亏了ghoti的评论——解析ls确实是个坏主意。 此版本适用于文件名中的空白:

 find . -maxdepth 1 -exec git log -n1 --format=format:"%h  %<(28)%ai %<(30)%an {}" {} \;
你是说像这样吗

for i in $(ls -1); do git log --format=format:"%h  %<(28)%ai %<(30)%an $i" -n1 $i; done
编辑:多亏了ghoti的评论——解析ls确实是个坏主意。 此版本适用于文件名中的空白:

 find . -maxdepth 1 -exec git log -n1 --format=format:"%h  %<(28)%ai %<(30)%an {}" {} \;

当然,我只对提交的更改的名称感兴趣。git责怪也不能告诉你是谁做了未注释的更改。@FrankKusters在这种情况下,你应该编辑你的问题来澄清。你所说的目录内容是什么意思?你是说上次更改每个跟踪文件的人的分类吗?当然,我只对提交的更改的名称感兴趣。git责怪也不能告诉你是谁做了未注释的更改。@FrankKusters在这种情况下,你应该编辑你的问题来澄清。你所说的目录内容是什么意思?你的意思是谁最后更改了每个跟踪文件的分类吗?不,虽然我可以理解为什么你会这样理解我的问题。我会把我的问题说得更清楚。不,虽然我能理解你为什么会那样理解我的问题。我会把我的问题说得更清楚。你问题的标题和主体有点相互矛盾。你问题的标题是:对于回购协议的每个跟踪目录,找出上次修改它的人。然而,据我所知,你的问题本质上是在问:对于回购协议的每个提交人,找到他/她上次修改的目录。后者会迫使你沿着整个提交日期走,这可能需要一段时间进行大额回购。你想要哪一个?@Jubobs你发现了一个我不想看到的模式。我更改了示例以避免这种模式。我真的只是对目录感兴趣。你问题的标题和主体有点相互矛盾。你问题的标题是:对于回购协议的每个跟踪目录,找出上次修改它的人。然而,据我所知,你的问题本质上是在问:对于回购协议的每个提交人,找到他/她上次修改的目录。后者会迫使你沿着整个提交日期走,这可能需要一段时间进行大额回购。你想要哪一个?@Jubobs你发现了一个我不想看到的模式。我更改了示例以避免这种模式。我真的只是对目录感兴趣。我想OP想回答:对于回购协议的每个提交人,找到他/她上次修改的目录?这更棘手。在输出中,每个提交人只列出一次。@dillz这正是我需要的。谢谢。你能不能用我的名字,而不是像你那样循环?如果文件名中有空格,会发生什么情况?不安全。我认为OP想要回答:对于回购协议的每个提交人,找到他/她上次修改的目录?这更棘手。在输出中,每个提交人只列出一次。@dillz这正是我需要的。谢谢。你能不能用我的名字,而不是像你那样循环?如果文件名中有空格,会发生什么情况?这是不安全的。