在不提交存储库的情况下获得无限的“撤消堆栈”?

时间:2009-07-09 00:55:26

标签: windows version-control

像许多程序员一样,我很容易定期出现“灵感”,我会突然看到The Light并对我的代码进行大手术。通常情况下,这很好,但有时我后来发现 - 由于缺乏睡眠/咖啡因或仅仅是对问题的不完全理解 - 我做了一些非常愚蠢的事情。

当发生这种情况时,下一步是扭转伤害。最容易的是,这意味着我的编辑器中的撤销堆栈......除非我在某个时候关闭了文件。接下来是版本控制,但是如果我在最近的提交(我习惯性地不提交打破构建的代码)和灵感时刻之间进行了更改,那么它们就会丢失。它不在存储库中,因此代码从未存在过。

我想以这样的方式设置我的工作环境,我不必担心这一点,但我从来没有想出一个完全令人满意的解决方案。理想的情况是:

  1. 每次保存文件时都会创建一个新的可恢复版本。
  2. 这些“自动保存”版本不会使主存储库混乱。 (绝大多数都是完全没用的;我每分钟都会按Ctrl-S几次。)
  3. “自动保存”版本必须位于本地,以便我可以非常快速地浏览它们。当尝试快速扫描数百个修订版时,只有3秒钟周转时间的存储库无法完成。
  4. 我考虑的选项:

    • 在进行大的更改之前,只需提交到主存储库,即使代码可能已损坏。缺点:当“受到启发”时,我通常没有心灵的存在;打破了构建。
    • 启用了自动版本控制的本地托管的Subversion存储库,作为“Web文件夹”安装。缺点:与其他存储库的工作副本不兼容;在Windows中安装适当的WebDAV文件夹充其量是痛苦的。
    • 与上一个方法一样,但是在主存储库中使用分支而是在我通常手动提交时合并到trunk。缺点:并非所有托管存储库都可以启用自动版本控制;不符合上述第2点和第3点;无法安全地从主干到分支进行反向合并。
    • 切换到DVCS并在推送时“合并”我所有的小提交。缺点:我不知道关于DVCS的第一件事;有时Subversion是唯一可用的工具;我不知道如何满足上述第1点。
    • 将工作副本存储在版本化文件系统上。缺点:这些是否适用于Windows?如果是这样,谷歌就没有给我指路。

    有没有人知道可以让我得到我想要的工具或工具组合?或者我是否满足于相互矛盾的要求? (我非常怀疑。)

    更新:仔细检查我已经使用(叹气)的工具后,结果发现我的text editor非常漂亮的多备份功能,几乎完美地满足了我的需求。它不仅可以选择将所有备份存储在“隐藏”文件夹中(然后可以将其添加到VCS的全局忽略中),还可以在编辑器中进行浏览甚至差异备份。

    问题解决了。感谢您的建议,伙计们!

4 个答案:

答案 0 :(得分:3)

分布式版本控制。 (mercurial,git等......)

故事的要点是没有结账,只有存储库的克隆。

只有在您将其提交回主分支之前,您的提交才可见。

想做彻底的实验改变吗?克隆存储库,在您的计算机上进行大量提交。如果它工作,推回去;如果没有,那么只需回滚或废弃回购。

答案 1 :(得分:1)

如果您使用Windows Vista,7或Windows Server 2003或更高版本,则可以使用卷影复制。基本上,文件的属性窗口将有一个新选项卡“以前的版本”,用于跟踪文件的先前版本。

服务应该自动生成快照,但为了安全起见,您可以在“灵感”时刻之后立即运行以下命令

'vssadmin create shadow /for=c:\My Project\'

它肆无忌惮地拯救了我的屁股几次。

Shadow Copy

答案 2 :(得分:1)

大多数编辑器会在保存到备份文件之前存储文件的最新版本。您可以自定义该过程以附加修订号而不是正常的波浪号。每次保存时,您都会获得该文件的副本。如果这会占用太多磁盘空间,您可以选择为每个更改创建差异,并自定义编辑器以按顺序应用补丁,直到达到所需的修订。

答案 3 :(得分:0)

我认为是时候切换编辑了。 Emacs有一个变量版本控制,它确定Emacs在保存时是否会自动为文件创建多个备份,命名为foo .~1~,foo .~2~等。其他变量决定要保留多少备份副本。 / p>