我只是将我的git文件从存储库克隆到新计算机上。现在他们都说他们被修改/创建今天,而不是旧计算机的实际日期。
我怎样才能恢复"这些时间戳是批量的吗?
在我的旧工作站上:
~/MyWork.git
有一个存储库,我用作集中存储库:该存储库的任何克隆从/向该存储库提取/推送。 ~/MyWork
获得了该存储库的本地克隆。这是我的工作存储库"。 在我的新工作站上:
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
,递归地,在OldDir
和NewDir
中,将NewDir/File
的时间戳设置为{{1}的时间戳1}}"
答案 0 :(得分:0)
Filesystem timestamps记录上次写入文件的时间。在你的情况下,那就是你复制到它们中的时候。
如果您想要文件的最后提交时间戳,请执行以下操作: git log -1 --pretty=%cd -- $thefile
或git blame @ $thefile
获取其中每行的最后提交时间戳。
使用文件系统时间戳的方式是一个容易犯的新手错误。任何依赖文件系统时间戳来与当前源同步其他内容的系统都将失败。破坏通常是最糟糕的类型:你做的任何类型的编译的结果都不会反映它们的来源,所有外观都是由生成的,因为检查这些日期的工具会看到结果是在生成之后产生的该文件最后更改。如果你在这里做了什么,那将是一个谎言。
即使只是偶尔做一些你要求的事情,只有当你最经常使用的时候,才会失败。保持语义简单:filesystem timestamp = time-filesystem-written,commit timestamp = time-commit-written,一切正常。
相信我们:你真的真的不想要惊喜语义。