V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
zinwalin
V2EX  ›  git

git 是如何确保时间同步?

  •  
  •   zinwalin · 109 天前 · 2157 次点击
    这是一个创建于 109 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    23 条回复    2022-03-18 10:24:37 +08:00
    CEBBCAT
        1
    CEBBCAT  
       109 天前 via iPhone
    没看明白,但 git 时间戳是有时区的,这个一搜便知
    XiLingHost
        2
    XiLingHost  
       109 天前   ❤️ 1
    时间戳是从 1970 年 1 月 1 日 00:00(GMT+0)开始所经过的秒数,不考虑闰秒,和时区无关
    zinwalin
        3
    zinwalin  
    OP
       109 天前
    时间戳不也是根据本地计算机来算吗?
    Explr
        4
    Explr  
       109 天前 via Android
    git 应该不保证提交时间不能伪造吧,应该只是简单的直接使用本地时间。git commit 命令甚至有一个参数--date 用来指定 author date 。
    gadfly3173
        5
    gadfly3173  
       109 天前 via Android
    更改时区并不会影响本地时间,得同时改掉时间。以及 git 的时间就是以本地为准,你甚至可以通过 force push 来完全伪造全部的提交记录。所以是否被篡改只能拉过代码的人自己根据日志去看
    msg7086
        6
    msg7086  
       109 天前   ❤️ 1
    时间戳是本地计算的呀。
    如果只是改时区的话,时间戳本身是不变的。
    如果你要改时间戳的话,当然是可以的,完全可以新建一个十年前或者十年后的提交,没有问题。
    szzhiyang
        7
    szzhiyang  
       109 天前   ❤️ 2
    Git 的同步依据不是时间,而是链表结点的顺序。
    Vegetable
        8
    Vegetable  
       109 天前   ❤️ 2
    两个问题
    1.时间戳与时区无关
    2.git 提交记录的时间毫无意义
    dingwen07
        9
    dingwen07  
       109 天前   ❤️ 1
    @gadfly3173 #5
    是否被原作者之外的人篡改应该通过验证 GPG 签名来进行验证
    SoloCompany
        10
    SoloCompany  
       109 天前
    git 是去中心化数据库, 请自动朗读三遍
    jinliming2
        11
    jinliming2  
       109 天前
    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
        12
    jiangzm  
       109 天前   ❤️ 1
    同一个时间点可以用不同的时区表示形式,假如你本地改成了东九区时刻会比北京时间快一小时但是时间点是一样的。

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

    git commit 不管你的时间点,只和 commit 的顺序有关系。
    js8510
        13
    js8510  
       109 天前   ❤️ 1
    git commit time, author, email 通通可以改。。(但是改时区没有用,因为 UTC 不变)。就是一个 metadata.

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

    但是问题是如果有多个 clone,你改不了其他人的 clone 呀。
    ngn999
        14
    ngn999  
       108 天前 via iPhone
    简单来说,时间和时刻的意思不一样!
    zinwalin
        15
    zinwalin  
    OP
       108 天前
    @gadfly3173 好的,我的意思就是改掉本地的时间。
    zinwalin
        16
    zinwalin  
    OP
       108 天前
    @js8510 那我 push 到远程时,没有错误。别人同步时是不是就出错了?
    zinwalin
        17
    zinwalin  
    OP
       108 天前
    @jinliming2 所以 git 的历史,只关心提交顺序?
    julyclyde
        18
    julyclyde  
       108 天前   ❤️ 1
    @zinwalin git 其实是个逆向链表
    从 branch/tag 指向 commit ,commit 再指向前一个 commit
    detached
        19
    detached  
       108 天前   ❤️ 1
    怎么感觉 OP 是在问,分布式系统中时间的同步问题?可以看下 Cam 这个 ppt ( cl.cam.ac.uk/teaching/0910/ConcDistS/10a-Time.pdf
    zinwalin
        20
    zinwalin  
    OP
       108 天前
    @julyclyde 所以主要是看谁先提交成功?
    jinliming2
        21
    jinliming2  
       108 天前
    @zinwalin git 除了创世 commit 外,其他的 commit 都是基于上一个 commit 的变化而来、或者多个 commit 合并而来。
    因此说只关心顺序倒也没啥问题。只不过这个顺序指的是 commit 历史的相对顺序,而不是时间顺序。
    zinwalin
        22
    zinwalin  
    OP
       107 天前
    @jinliming2 谢谢分享
    julyclyde
        23
    julyclyde  
       106 天前
    @zinwalin 如果分叉提交,那你 push 不上去(除非--force )
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1035 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 20ms · UTC 21:15 · PVG 05:15 · LAX 14:15 · JFK 17:15
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.