如何判断给定时间git存储库中存在哪个版本?
假设我有一个共享存储库,多个用户可以在其中推送更改,我想在过去的某一天在12:00停止快照。
如果有人在11:30进行本地提交,但只在12:30将其推送到中央回购,我可以在以后检测到吗?
我是否可以检测到有人在12:00之后是否已经篡改了本地提交的记录提交日期为11:30,然后推送到上游?
答案 0 :(得分:9)
Git本身不会跟踪这些信息,但我能够查看服务器本身git存储库中“objects”目录中提交对象文件的文件创建时间戳。
答案 1 :(得分:2)
您可以使用钩子,可能是post-receive hook来自己存储所需的信息,或者只是启用reflog(默认情况下在裸存储库中禁用它)。 reflog自动跟踪分支的本地历史记录,例如。 git reflog -1 --format=%H master@{12:00}
会告诉你主裁判在12点时指向的是什么。
请注意,reflog过期,您可以使用gc.reflogexpire配置到期时间。
答案 2 :(得分:1)
git
不会记录什么东西被推入存储库(或者就此问题而被提取),只记录提交本身的两个时间戳,所以我认为没有可靠的方法可以在没有写入的情况下执行此操作钩子可以为你存储额外的元数据,或者依赖git-daemon,ssh或你的http服务器完成的日志记录,具体取决于用于推送/获取的方法。