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