如何检测git回购是否有任何更改?

如何检测git回购是否有任何更改?,git,backup,Git,Backup,我的目标是仅当最近的备份不再有效时,才在UI中提供“备份回购”选项,因此我需要一种有效的方法来确定是否对回购进行了任何更改 我的第一个想法是将repo中每个目录的修改时间散列在一起,并与备份中计算的相同值进行比较。这样行吗?有更好的方法吗?您可以解析 git fetch --dry-run origin 。。。我的第一个想法是将repo中每个目录的修改时间散列在一起,并与备份中计算的相同值进行比较。这样行吗?有更好的办法吗 是的,您可以检查服务器是否有任何挂起的更改: # grab all l

我的目标是仅当最近的备份不再有效时,才在UI中提供“备份回购”选项,因此我需要一种有效的方法来确定是否对回购进行了任何更改


我的第一个想法是将repo中每个目录的修改时间散列在一起,并与备份中计算的相同值进行比较。这样行吗?有更好的方法吗?

您可以解析

git fetch --dry-run origin
。。。我的第一个想法是将repo中每个目录的修改时间散列在一起,并与备份中计算的相同值进行比较。这样行吗?有更好的办法吗

是的,您可以检查服务器是否有任何挂起的更改:

# grab all latest changes
git fetch

# check to see if there are any changes
git diff <origin/branch> ^branch

# or 
git diff ^<branch> origin/branch

您确实只想查看(在获取后)您的远程跟踪分支源/分支是否与您的本地跟踪分支相同,因此只需检查此类分支的SHA(然后进行合并以了解情况)。因此,您可以只对origin/branch执行rev解析,并将其与branch的rev解析进行比较,因为不管提交多少次,也不管更改发生在何处,只要有更改(或者git日志——一行origin/branch..branch通过管道连接到wc-l之类的东西)

您对整个目录上的散列的想法与实际计算提交的SHA的方式类似,因此仅使用SHA即可实现这一点。请注意,如果有人进行了提交,然后又进行了恢复,那么我的建议将失败,因此您将得到相同的内容。每次连续提交时,SHA都会发生变化(因为它们还包含提交信息以及父SHA),但我认为这是一种不太可能的情况,您不需要对其进行优化

因此,我的方法假设您有一个本地回购协议,您正在从远程复制该协议。如果没有,或者你不想拖垮整个远程回购协议,你可以做一个浅层克隆来获得提示并记住之前的提示

但是,更好的方法是使用
gitlsremote
解析该输出,记住其状态,并在下次运行时进行比较

NAME
       git-ls-remote - List references in a remote repository

SYNOPSIS
       git ls-remote [--heads] [--tags]  [--upload-pack=<exec>]
                     [--exit-code] <repository> [<refs>...]

DESCRIPTION
       Displays references available in a remote repository along with the associated commit IDs.

因此,您可以看到,它列出了遥控器的头部和参考,并且只需解析并保存它。

到目前为止,对答案有两条评论:(1)我不认为存在远程回购。(2) 我对回购协议的全部内容感兴趣,而不仅仅是一个分支机构,也不仅仅是托管文件。更改配置或添加标记将被视为更改,因为这意味着我需要更新备份。要明确的是,我处理的是一个非常大的回购协议,它不会经常更改,因此将其从普通的定期增量备份中排除。
NAME
       git-ls-remote - List references in a remote repository

SYNOPSIS
       git ls-remote [--heads] [--tags]  [--upload-pack=<exec>]
                     [--exit-code] <repository> [<refs>...]

DESCRIPTION
       Displays references available in a remote repository along with the associated commit IDs.
From https://github.com/foobar/myRepo.git
3133d81f8cca51c73c92aeeaa1c762b177683456    HEAD
3133d81f8cca51c73c92aeeaa1c762b177683456    refs/heads/master