如何将Git存储库中的时间戳设置为其他相同存储库中的时间戳?

时间:2017-06-02 22:01:44

标签: git bash macos timestamp

我只是将我的git文件从存储库克隆到新计算机上。现在他们都说他们被修改/创建今天,而不是旧计算机的实际日期。

我怎样才能恢复"这些时间戳是批量的吗?

这就是我所做的:

在我的旧工作站上:

  • 我在~/MyWork.git有一个存储库,我用作集中存储库:该存储库的任何克隆从/向该存储库提取/推送。
  • 我在~/MyWork获得了该存储库的本地克隆。这是我的工作存储库"。

在我的新工作站上:

  • 我将旧硬盘安装到`/ Volumes / OldComputer'
  • 我将集中存储库从旧硬盘复制到新硬盘: cp /Volumes/OldComputer/Users/Me/MyWork.git ~/MyWorkNew.git。 (现在它将成为我的集中存储库。)
  • 我在新计算机上创建了一个新文件夹mkdir ~/MyWorkNew,成为我新的"工作存储库"。
  • 我将新的集中式存储库克隆到新的工作存储库:git clone ~/MyWorkNew.git ~/MyWorkNew/

我觉得应该有一个很好的方法使用git来做到这一点,而不是直接复制所有内容,例如cp -rp /Volumes/OldComputer/Users/Me/MyWork ~/MyWorkNew ......但也许我错了?

替代解决方案

如果没有简单地复制所有文件,有没有办法以编程方式将所有时间戳从一个存储库复制到另一个存储库(#ScriptFu)?两个存储库之间的整个目录结构和文件名应该相同。它似乎可以通过递归完成:"对于每个File,递归地,在OldDirNewDir中,将NewDir/File的时间戳设置为{{1}的时间戳1}}"

1 个答案:

答案 0 :(得分:0)

Filesystem timestamps记录上次写入文件的时间。在你的情况下,那就是你复制到它们中的时候。

如果您想要文件的最后提交时间戳,请执行以下操作: git log -1 --pretty=%cd -- $thefilegit blame @ $thefile获取其中每行的最后提交时间戳。

使用文件系统时间戳的方式是一个容易犯的新手错误。任何依赖文件系统时间戳来与当前源同步其他内容的系统都将失败。破坏通常是最糟糕的类型:你做的任何类型的编译的结果都不会反映它们的来源,所有外观都是由生成的,因为检查这些日期的工具会看到结果是在生成之后产生的该文件最后更改。如果你在这里做了什么,那将是一个谎言。

即使只是偶尔做一些你要求的事情,只有当你最经常使用的时候,才会失败。保持语义简单:filesystem timestamp = time-filesystem-written,commit timestamp = time-commit-written,一切正常。

相信我们:你真的真的不想要惊喜语义。