簡體   English   中英

如何在cvs2git / cvs2svn中生成提交時間戳?

[英]How are the commit timestamps generated in cvs2git/cvs2svn?

我正在通過Cygwin使用cvs2git將一個非常古老且龐大的CVS存儲庫轉換為Git。 它工作正常,我開始測試新的存儲庫。 我沒有發現更大的特點。 但是我不知道如何確定提交/更改集的時間戳。

到目前為止,我確定,某些CVS版本之間的時間戳相差1或2個小時加上x,其中x是從幾秒鍾或幾分鍾(大多數情況下)到兩個15分鍾的時間。 許多時間戳僅相差整小時(x = 0)。

我想這與我發現是cvs2svn功能( http://www.mcs.anl.gov/~jacob/cvs2svn/features.html )的“時間戳錯誤校正”有一定關系。 也許也與時區有關。

我的測試結果表明,更改集中只有一個文件的所有提交在整個小時內都不同。 那支持我的“時區假說”。 但這也使我想到一個問題,即如何確定包含多個文件的變更集的時間戳。

我嘗試遍歷代碼,並在Google的幫助下發現cvs2svn_lib的config.py中有一個“ COMMIT_THRESHOLD”。 我猜,它用於在CVS中對基於文件的提交進行模糊測試。 盡管代碼看起來寫得不錯,但是由於我對CVS,SVN和Git修訂版存儲缺乏技術了解,這使我很難理解。

因此,如果有人可以回答以下問題,我將不勝感激:

  • cvs2svn / cvs2git如何確定具有多個文件的變更集的提交時間戳?
  • “時間戳錯誤糾正” cvs2svn / cvs2git如何工作? (對我來說,功能背景比技術背景更重要。)

親切的問候

編輯:

有人認為這個問題“太廣泛了”,恐怕我的觀點還不夠清楚。 因此,我想舉一個具體的(虛構的)示例:

cvs2git發現1個變更集有3個文件變更。 他們是在同一天提交的(例如,2016年2月30日)。 但是他們的時代不同:

  • 檔案1:12:34:56
  • 文件2:12:35:38
  • 文件3:12:36:09

如果只是文件1,我會認為cvs2git使用2016-02-30T12:34:56作為Git提交的時間戳。 但是,當所有3個文件的提交都屬於一個變更集時,選擇哪個時間戳記?

與此相關的是,在轉換我的存儲庫時,時間似乎也恰好調整了1或2個小時。 當變更集中只有一個文件時,也會發生這種情況。 我想這是某種時區調整。 因此,我想知道為什么“時間戳錯誤更正”更改了我的時間戳,以檢查我是否接受這些更改。 我對轉換后的Git存儲庫進行了一些統計,從原則上來說,提交時間對我來說似乎還不錯; 但這對我來說還不夠。

您問兩個問題:

  1. 如何為涉及多個文件的提交生成時間戳?

    對於修改文件的提交,cvs2svn / cvs2git從構成提交的文件級提交中獲取最新的時間戳。 但是,如果該時間戳記早於上一次提交的時間戳記,或者比轉換時間晚了一天以上,那么它將選擇一個比上一次提交的時間戳記晚一秒的時間戳記。

    對於涉及分支或標記的提交(CVS根本不記錄時間戳),將時間戳設置為上一次提交的時間戳之后的一秒鍾。

  2. 為什么有時時間戳會偏離整數小時?

    CVS在UTC中記錄時間戳而不記錄時區,而cvs2svn / cvs2git照原樣使用這些時間戳,而無需嘗試猜測時區。 因此,時間戳記應該正確,但以UTC表示。

    git log具有--date選項,可用於要求在本地時區中顯示日期。

cvs2svn項目文件doc/design-notes.txt詳細介紹了cvs2svn / cvs2git使用的算法。

暫無
暫無

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

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