git 是如何确保时间同步?

2022-03-16 00:03:30 +08:00
 zinwalin

比如,git 服务器上,项目代码的最新提交时间是 UTC +8 10:00

本地提交前,故意把时区改为 UTC +7, 提交代码后,git 是怎么处理的? 实际上服务器的最新提交比本地的要早。

3216 次点击
所在节点    git
23 条回复
CEBBCAT
2022-03-16 00:10:24 +08:00
没看明白,但 git 时间戳是有时区的,这个一搜便知
XiLingHost
2022-03-16 00:12:46 +08:00
时间戳是从 1970 年 1 月 1 日 00:00(GMT+0)开始所经过的秒数,不考虑闰秒,和时区无关
zinwalin
2022-03-16 00:16:12 +08:00
时间戳不也是根据本地计算机来算吗?
Explr
2022-03-16 00:23:17 +08:00
git 应该不保证提交时间不能伪造吧,应该只是简单的直接使用本地时间。git commit 命令甚至有一个参数--date 用来指定 author date 。
gadfly3173
2022-03-16 00:26:55 +08:00
更改时区并不会影响本地时间,得同时改掉时间。以及 git 的时间就是以本地为准,你甚至可以通过 force push 来完全伪造全部的提交记录。所以是否被篡改只能拉过代码的人自己根据日志去看
msg7086
2022-03-16 00:32:04 +08:00
时间戳是本地计算的呀。
如果只是改时区的话,时间戳本身是不变的。
如果你要改时间戳的话,当然是可以的,完全可以新建一个十年前或者十年后的提交,没有问题。
szzhiyang
2022-03-16 00:49:16 +08:00
Git 的同步依据不是时间,而是链表结点的顺序。
Vegetable
2022-03-16 00:54:56 +08:00
两个问题
1.时间戳与时区无关
2.git 提交记录的时间毫无意义
dingwen07
2022-03-16 01:08:14 +08:00
@gadfly3173 #5
是否被原作者之外的人篡改应该通过验证 GPG 签名来进行验证
SoloCompany
2022-03-16 01:13:11 +08:00
git 是去中心化数据库, 请自动朗读三遍
jinliming2
2022-03-16 01:30:41 +08:00
1 ,时间与时区无关,时区只用来表示地区。2022/03/16 10:00:00 +08:00 与 2022/03/16 09:00:00 +07:00 表示的是完全相同的时间,只不过地区不一样。
2 ,时间戳也是有时区信息的,时区信息存在于它的定义中,定义指明了它表示的就只能是 UTC 时区的时间。
3 ,Git 只记录两次 commit 之间的变化。git 不在乎时间,时间仅作为 commit 的一个属性,git 同步本身不使用时间属性做任何参考。因此,即便是你本地计算机的时间不正确,对 git 也没有任何影响。新的 commit 时间完全可以早于旧的 commit 。
jiangzm
2022-03-16 01:37:51 +08:00
同一个时间点可以用不同的时区表示形式,假如你本地改成了东九区时刻会比北京时间快一小时但是时间点是一样的。

数值也是一样的,二进制的 1 、十进制的 1 、十六进制的 1 是相等的,表示形式不一样而已。

git commit 不管你的时间点,只和 commit 的顺序有关系。
js8510
2022-03-16 02:06:13 +08:00
git commit time, author, email 通通可以改。。(但是改时区没有用,因为 UTC 不变)。就是一个 metadata.

git commit time 可以伪造。包括 remote master 的 commit log , 一样可以伪造。

但是问题是如果有多个 clone,你改不了其他人的 clone 呀。
ngn999
2022-03-16 05:41:20 +08:00
简单来说,时间和时刻的意思不一样!
zinwalin
2022-03-16 08:51:03 +08:00
@gadfly3173 好的,我的意思就是改掉本地的时间。
zinwalin
2022-03-16 08:52:01 +08:00
@js8510 那我 push 到远程时,没有错误。别人同步时是不是就出错了?
zinwalin
2022-03-16 08:53:29 +08:00
@jinliming2 所以 git 的历史,只关心提交顺序?
julyclyde
2022-03-16 11:32:10 +08:00
@zinwalin git 其实是个逆向链表
从 branch/tag 指向 commit ,commit 再指向前一个 commit
detached
2022-03-16 14:21:14 +08:00
怎么感觉 OP 是在问,分布式系统中时间的同步问题?可以看下 Cam 这个 ppt ( cl.cam.ac.uk/teaching/0910/ConcDistS/10a-Time.pdf
zinwalin
2022-03-16 17:40:39 +08:00
@julyclyde 所以主要是看谁先提交成功?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/840634

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX