只读检查git工作副本是否在其远程后面

时间:2014-02-23 18:46:28

标签: git

是否有git命令或命令组合以严格只读方式告诉我工作副本是否在其远程控制器后面?如果运行该命令的用户无法写入工作副本,我正在寻找可以正常工作的东西。

我正在尝试编写一个cron作业,当我需要登录某台计算机并手动执行git pull以使工作副本保持最新时,该作业通过电子邮件提醒我。 cron作业的帐户具有对工作副本的只读权限。

我认为此要求不包括任何涉及git fetch的内容。似乎即使git fetch --dry-run尝试写入工作副本:

$ git fetch --dry-run
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database .git/objects
fatal: failed to write object
fatal: unpack-objects failed

这实际上让我实现了我想要的东西,因为它在有变化时退出状态128,如果没有则退出0。但是,它似乎并不完全干净,并且由于其他原因(如网络连接问题)可能会出错,我希望能够区分出类似的情况和过时的情况。

1 个答案:

答案 0 :(得分:2)

我认为我不想尝试做这项工作,但是:

你可以使用git ls-remote来获取每个遥控器对各个分支头的想法(添加--tags和特定的远程名称,以便在需要时获取标签;在这种情况下你需要特定的远程名称由于ls-remote中似乎是一个错误。有了这些,您可以将本地存储库的远程引用的概念与ls-remote步骤中的结果进行比较,以确定是否需要完整的fetch

(使用退出状态似乎要容易得多。正如你所说,它有一些明显的小缺点。)