【问题标题】:git-diff in another directorygit-diff 在另一个目录中
【发布时间】:2011-02-16 02:10:58
【问题描述】:

我目前正在编写一个小 zsh 函数,它检查我所有的 git 存储库以查看它们是否脏,然后打印出需要提交的那些。到目前为止,我发现找出 git 存储库的干净/脏状态的最快方法是通过git-diffgit-ls-files

if ! git diff --quiet || git ls-files --others --exclude-standard; then
  state=":dirty"
fi

我有两个问题要问你们:

  1. 有人知道在 git 存储库中检查文件更改/添加的更快、更有效的方法吗?
  2. 我希望我的 zsh 函数获得一个文件路径(比如~/Code/git-repos/)并检查其中的所有存储库。有没有办法不用 cd 进入每个目录并运行这些命令?像git-diff --quiet --git-dir="~/Code/git-repos/..." 这样的东西会很棒。

谢谢! :)

【问题讨论】:

  • @VonC - 看起来很棒。我希望我不必使用 git-status,因为它有点重,但它允许我指定要查看的“远程”git 目录,这可能是我唯一的选择。

标签: git zsh


【解决方案1】:

如果$DIR 包含您的目录名称并且它是标准布局(即.git 目录是$DIR/.git),那么git --git-dir $DIR/.git --work-tree $DIR status -s -uno 将列出所有未提交更改的文件。检查列表是否为空应该可以满足您的需求。

【讨论】:

  • 运行该命令会给出“致命:无效的未跟踪文件模式 '=none'”。手册页将“no”指定为 -u 的有效选项,但这会产生类似的错误。
  • 你是对的,对不起,语法有点不对。使用 -uno 代替 -u=none
  • (我相应地修复了帖子)
  • 这个和上面@VonC的链接(特别是git状态的--porcelain标志)的组合就是诀窍。
猜你喜欢
  • 1970-01-01
  • 2011-09-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2014-05-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多