只读检查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退出。然而,它似乎并不完全干净,可能会因为网络连接问题等其他原因出错,我希望能够区分类似的情况和过时的情况。

我想我不会费心去尝试让它工作,但是:

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

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

最新更新