将现有文件提交到现有Git存储库,同时保留时间戳

时间:2015-02-22 15:27:25

标签: git git-fast-import

情况是这样的:我有很多年前的文件(当我没有使用任何类型的源代码控制时),我很乐意将它放到现代Git存储库中。

我找到了一个工具 - file-fast-export。它需要现有文件并吐出一个可以提供给git fast-import的文件。好到目前为止。

唯一的问题是快速导入对输入格式有点挑剔,而文件快速导出不是一个特别优秀的程序 - 它假定文件正被导入新的存储库。

所以我的用例是这样的:我有一个git存储库。我发现了一个以前缺少的子目录。有文件修改时间。我需要在当前存储库历史记录之上提交每个文件,以便提交时间戳对应于修改时间。据我所知,Git并没有强制提交按时间顺序连续的时间戳,只有提交相互跟随。如果我能git log xxxxx.txt并查看文件历史记录,我很高兴。

我确信有些工具可以做到这一点。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

唯一的问题是快速导入对输入格式有些挑剔

实际上...在Git 2.28(2020年第三季度)中,一些野外存储库的提交记录了废话提交者时区(例如rails.git); git fast-import”学到了一个选项,可以完整地传递这些废话时间戳,以允许按原样重新创建现有存储库。

这可能对您有帮助。

请参见commit d42a2fbElijah Newren (newren)(2020年5月30日)。
(由Junio C Hamano -- gitster --commit 5404183中合并,2020年6月2日)

fast-import:添加新的--date-format=raw-permissive格式

签名人:伊利亚·纽伦

在野外有多个存储库,它们具有随机的,无效的时区。

最明显的是来自rails.git with a timezone of "+051800"的提交。

一些搜索也会找到具有相同无效时区的其他存储库。

此外,Peff报告了GitHub relaxed their fsck checks in August 2011 to accept any timezone value,并且有filter-repo关于fast-import crashing while trying to import their existing repositories since they had timezone values such as "-[7349423]" and "-[43455309]"的多个报告。

fast-import中现有的时区值检查可能对手工或使用新脚本编写快速导入输入的人有用。

对于他们来说,检查可以帮助他们避免意外记录无效日期。

(请注意,此检查相当简单,快速导入不检查的无效日期仍然有多种形式:将来的日期,时区值(不能被15整除的分钟数)和时区值(可以被分钟数整除)等于或大于60。)
尽管此简单的检查可能对那些用户有价值,但其他用户或工具将希望按原样导入现有存储库。
提供一种--date-format=raw-permissive格式,该格式不会在这些否则无效的时区上出错,以便可以导入这些现有存储库。