【问题标题】:Committing existing files to existing Git repository, while preserving timestamps将现有文件提交到现有 Git 存储库,同时保留时间戳
【发布时间】:2015-04-23 22:30:30
【问题描述】:

情况是这样的:我有一堆很久以前的文件(那时我还没有使用任何类型的源代码控制),我很想将它们放到现代 Git 存储库中。

我为此找到了一个工具 - file-fast-export。它获取现有文件并吐出一个可以提供给git fast-import 的文件。到目前为止还不错。

唯一的问题是 fast-import 对输入格式有点挑剔,而 file-fast-export 不是一个特别完善的程序 - 它假设文件正在被导入新的存储库。

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

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

【问题讨论】:

  • 创建新提交时可以手动指定提交日期;例如,参见stackoverflow.com/q/28090026/2541573
  • 可能没有两个文件具有完全相同的时间戳。这是否意味着,您希望每次提交只有一个文件的历史记录?与一个包含所有文件的提交相比有什么优势?
  • 是的,我知道可以在git commit 中手动指定日期,但我需要手动提交每个文件。我只是想知道是否已经有一个完善的工具可以一举为整个子目录执行此操作。这样做而不是单个提交的优点是,这样,每个文件都有以标准方式记录的修改日期。我知道一种方法是在提交日志中附加ls -lR 进行一次提交,但这并不完全优雅......
  • @wwwwolf 你可以为此编写一个 shell 脚本。但是,我不明白您为什么要为每个文件创建一个提交。这违背了 Git 提交的语义,它旨在表示工作单元,无论是在一个文件还是多个文件上。
  • 但是对于有问题的文件,“工作单元”可以解释为“大致同时修改的文件组”,所以我认为它不违背 Git语义。不过,您是对的,脚本始终是一种解决方案——我只是想知道是否有脚本已经完成了所有这些工作。

标签: git git-fast-import


【解决方案1】:

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

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

这对您的情况可能会有所帮助。

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

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

签字人:Elijah Newren

存在多个具有随机、无效时区的存储库。

最值得注意的是来自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 格式,在这些其他无效的时区上不会出错,以便可以导入此类现有存储库。

【讨论】:

    猜你喜欢
    • 2018-06-01
    • 2018-10-08
    • 2021-04-11
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多