簡體   English   中英

git 如何告訴遠程倉庫提交的時間?

[英]How does git tell the remote repository the time of the commit?

If you look at times of each commit on GitHub, and then run git log , you will see that the times of the commits between the remote and local repos are the exact same, even if you ran git push a few minutes after git commit . git 如何告訴存儲庫所述提交的時間?

只要您為該提交運行git commit ,就會記錄時間。 推送僅使用您的本地提交更新 github,因此不會保留推送時間。

編輯:如果您詢問具體機制,時間只是隨着提交以及更改、您的消息和作者/貢獻者一起傳遞。

讓我們看看一個實際的提交。 這是 Git 存儲庫中 Git 本身的提交:

$ git cat-file -p HEAD | sed 's/@/ /'
tree 8f78544663a8f3e9e3d4ee9125cf54a863498bfb
parent b4e245a17adc1b336269f7350e88eede6e713157
author Junio C Hamano <gitster pobox.com> 1605735205 -0800
committer Junio C Hamano <gitster pobox.com> 1605735205 -0800

Sixth batch

Signed-off-by: Junio C Hamano <gitster pobox.com>

任何提交的組成部分是:

  • 每個文件的完整快照:這是通過tree線間接存儲的;
  • 元數據,包括編寫提交的人的姓名:在這里,我們在author行中看到一些元數據,在提交者行中看到一些元數據。

元數據包括提交的父級的原始 hash ID; 在這里,有一位父母,其 hash ID 出現在(單) parent行上。 元數據可以包括額外的 header 行,但在這里,在標准treeparentauthorcommitter之后,我們只看到主題( Sixth batch )和正文,由第一組 header 行之后的空行隔開。

(間接存儲tree的一個原因是 Git 然后可以重用它。例如,不更改任何內容的合並提交,或撤消前一個提交的還原,將創建一個與前一個快照完全匹配的新快照。在這里,Git 可以存儲新提交,而無需添加新提交以外的任何內容 object。)

正如kevin-robb 所說,日期和時間戳是提交本身的一部分。 這些編碼有點奇怪:它們采用自 1970 年 1 月 1 日 00:00:00 UTC 以來的秒數形式。 在這里,從那時起是1605735205秒,或者Wed Nov 18 21:33:25 UTC 2020 我們還得到一個時區偏移量: -0800 這以小時和分鍾表示,十進制,每個兩位數字,因此偏移量是格林威治以西 8 小時或太平洋標准時間。 從晚上 9:33 開始花費 8 小時,我們得到了下午 1:33,這確實是git log顯示的內容:

$ git log -n 1 | sed 's/@/ /'
commit faefdd61ec7c7f6f3c8c9907891465ac9a2a1475
Author: Junio C Hamano <gitster pobox.com>
Date:   Wed Nov 18 13:33:25 2020 -0800

    Sixth batch
    
    Signed-off-by: Junio C Hamano <gitster pobox.com>

因為上面並且將永遠是hash ID 為faefdd61ec7c7f6f3c8c9907891465ac9a2a1475的提交的確切數據,該提交的時間戳必須是我們剛剛看到的值:

$ (printf 'commit 279\0'; git cat-file -p HEAD) | shasum
faefdd61ec7c7f6f3c8c9907891465ac9a2a1475  -

(279 是提交數據中的字節數,由git cat-file -p HEAD | wc -c找到)。

如果我們接受這個提交並將其更改為保存一些其他日期和時間戳,並通過 Git 的 object 哈希器運行它,我們將獲得一些其他哈希 - 一個其 hash ID不是faefdd61ec7c7f6f3c8c9907891465ac9a2a1475的提交提交faefdd61ec7c7f6f3c8c9907891465ac9a2a1475的日期為1605735205 -0800 因此,任何具有提交faefdd61ec7c7f6f3c8c9907891465ac9a2a1475的 Git 存儲庫都具有該日期和時間,沒有其他。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM