【问题标题】:Watching files with Git使用 Git 查看文件
【发布时间】:2015-10-15 18:06:45
【问题描述】:

我使用一个小脚本向 Git 查询最近更改了哪些文件,然后根据这些文件采取行动。

当调用该工具时,我运行 git status --porcelain 以获取要操作的文件列表。

但这在以下情况下会失效:

echo "lorum ipsum" > foo.txt
./tool `git status --porcelain` # tool acts upon foo.txt
git checkout .
./tool `git status --porcelain` # tool doesn't know to act upon foo.txt

有没有办法让 Git 告诉你哪个被跟踪的文件最后被修改了,即使它在 Git 眼中不再被修改?

也许是自上次 Git 查询以来最后更新的文件?还是最近一小时内更新的文件?

【问题讨论】:

  • 有一个更通用的解决方案:github.com/facebook/watchman(这是一个沉重的工具,我自己没有尝试过。)
  • 您希望您的脚本对自上次运行以来发生更改的每个文件进行操作? (此外,您的操作方法对于带有空格等的文件也不安全。)您可能需要查看 inotify 及其各种工具、绑定等。
  • @EtanReisner 代码示例只是显示我意图的伪代码...是的,更具体地说,上次运行时,我将更新问题以使其更清楚。谢谢,我会研究 inotify

标签: git shell scripting


【解决方案1】:

我要提出的最接近的是我在“git status - list last modified date”中提到的:

IFS=''; git status -s | while read -n2 mode; read -n1; read file; \ 
  do echo $mode $(stat -c %y "$file") $file; \ 
done|sort

这允许我添加索引和组修改(自上次提交以来完成),从最旧到最新。
通过关注git status 输出,可以避免检查所有尚未更改的文件。
在第二次调用问题中的伪代码时,foo.txt 不会担心。

【讨论】:

  • 这是一个有用的脚本,但它不能解决原始问题中所述的问题...我现在认为原始问题无法单独使用 Git 解决...
猜你喜欢
  • 2011-12-24
  • 2020-02-11
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 2012-08-10
  • 2016-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多