我有一组文件,代表我想在存储库中管理的“项目”(txt,cfg,手工编辑的二进制文件,脚本等)。我想在我家的Windows机器上安装存储库和服务器(如果需要),并能够远程和本地访问它。
我已经设置了VisualSVN服务器和TortiseSVN客户端,除了一个主要的挂断之外它都完美无缺;文件时间戳。当我将文件添加到存储库时,SVN会清除最后修改日期并将其更改为提交日期。
我的文件的日期跨越过去4年,保留这些时间戳对我来说非常重要。我已经搜索过了,但还没有找到解决这个问题的方法(尽管似乎很多其他人都要求同样的行为)。
所以我的问题是,是否有免费的VCS允许捕获原始文件时间戳并符合我的其他一般使用标准?我瞥了一眼GIT,但它似乎没有,我不确定CVS。
感谢您的帮助,
罗布
答案 0 :(得分:4)
Mercurial有extension可自动保存文件时间戳。我试过了它似乎运作良好。为了使其正常工作,您必须执行以下操作:
下载并安装扩展程序。
初始化要保留时间戳的存储库,添加文件,但尚未提交。
生成时间戳文件。我认为你必须在提交文件之前这样做,但我没有尝试过两种方式来确定。
hg timestamp_mod -s
执行初始提交以使用适当的时间戳将文件存储在存储库中。
答案 1 :(得分:3)
真正保留每个文件的时间戳并不是一种可以很好地扩展的方法
我应该知道,这样做的一个CVCS(集中式VCS)是...... ClearCase! (见checkin -ptime
option)
它是sloooooow :)
另外,作为manojlds mentions,有thread against this idea for Git。
仍有一项针对SVN的研究,用于保存时间戳:
来自Building with a Version Control Audit Trail的Alec Clews,github/svnbuilding中的示例
还有github/gitbuilding的类似研究
在这两种情况下,它都是关于将信息记录在一个单独的文件中,甚至不是关于恢复日期和时间...
因此,如果您需要此信息:
a /它最好是所有您放入VCS的文件(特别是免费的或任何DVCS)
b /你可以,用Git:
答案 2 :(得分:2)
这对于VCS来说是一个坏主意,某些人可能会有一些有效的用例 - 但它们会非常模糊,而与软件无关。所有VCS系统都会跟踪这些元数据,您的构建脚本可以查询它,然后回溯您的文件。
出于好奇,你为什么要做这样的事情?我认为阐述你所遇到的问题并寻求解决方案会比询问如何实施你所抓住的解决方案产生更好的结果。
答案 3 :(得分:2)
这可能无济于事,但RCS会这样做。
签入文件时,ci -d
会将签到日期和时间设置为工作文件的上次修改时间。
签出文件时,co -M
将新工作文件的修改时间设置为检索到的修订日期。注意:co(1)
手册页说
小心使用此选项;它可以混淆make(1)。
当然,RCS可能缺少您需要的许多其他功能,例如远程访问。
答案 4 :(得分:1)
我不确定这是否是您想要的,但以下内容使用了提交时间。如果你想在第一次提交时保留时间戳,我没有看到任何方法,除非可以在svn属性中添加它。
您可以将它添加到您的svn配置中,它应该使用提交时间:
[miscellany]
use-commit-times = yes
当时间戳更改为旧日期时,可能会导致一些问题/混淆,因此请使用它了解后果是什么。
这与像Git这样的DVCS相同或更差。 Linus在时间戳的帖子中回复:
对不起如果你没有看到它如何错误地将日期戳回到 会使一个简单的“make”错误编译你的源代码树的东西, 我不知道你所说的“错误”的定义是什么。它的 错误。这很傻。实施它是完全不可能的。
答案 5 :(得分:0)
我想出了一个替代方法
谢谢大家的意见。我找到了一个解决方法,允许我继续使用我当前的SVN设置。我只是存档我希望保留原始日期的预先存在的文件和文件夹。存档本身在第一次提交时将日期更改为当前,但扩展时存档中的文件保留其原始日期。然后当/如果它们被更新,我将它们从存档中删除并将它们直接添加到存储库中。
这有点好事,但对我有用。我认为如果SVN可以自动捕获属性中的时间戳并且在客户端中有一个选项来抓取它并在结账时修改时间戳,那将是很好的。显然它不是默认行为,但我认为没有任何损害。
答案 6 :(得分:0)
CVS可以做到。您必须最初使用cvs import -d添加文件...之后,初始结帐将创建具有原始时间戳的文件。任何类型的后续更新都会将工作副本中的时间戳更改为当前时间,以免混淆make或类似工具。只有初步结账才能获得原始时间。我很喜欢这种行为,因为它可以让你准确地记录历史。
我目前正在寻找自己如何使用git执行此操作,但似乎没有。
答案 7 :(得分:-1)
这在TortoiseSVN中有效,可以保留原始时间戳。 创建新项目后并首次签出后 a)使用TotalCommander之类的工具手动设置或更正时间戳 b)只需使用原始时间戳复制/替换原始位置中的所有文件 到TortoiseSVN结帐的工作副本。替换所有文件。现在他们有了 再次使用原始时间戳记。 TortoiseSVN会检测到文件没有更改,请不要理会它们。
注意: 仅适用于个人/单用户用例。 如果签出文件,TortoiseSVN将再次使用提交或当前时间戳。 但是,只要您只使用SVN到单个用户的用例签,会被罚款。