代码之家  ›  专栏  ›  技术社区  ›  Ben Blank Jarret Hardie

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

  •  4
  • Ben Blank Jarret Hardie  · 技术社区  · 16 年前

    像许多程序员一样,我也经常会有“灵感”的周期性发作,在这种情况下,我会突然看到光明,然后对代码进行大手术。通常情况下,这是可行的,但有时我后来发现,由于缺乏睡眠/咖啡因或仅仅是对问题的不完全理解,我做了一些非常愚蠢的事情。

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

    我想把我的工作环境设置得这样一种方式,我不必担心这个问题,但我从来没有提出一个完全令人满意的解决方案。理想的:

    1. 每次保存文件时都会创建一个新的、可恢复的版本。
    2. 这些“自动保存”的版本不会使主存储库混乱。(绝大多数都是完全无用的;我一分钟按几次ctrl-s。)
    3. “自动保存”的版本必须在本地保存,这样我就可以很快地浏览它们。当试图快速浏览数百个修订版时,一个具有3秒周转时间的存储库根本做不到。

    我考虑过的选择:

    • 即使代码可能被破坏,也只需在进行重大更改之前提交到主存储库。缺点:当“受到启发”的时候,我通常没有意识到这一点;破坏了构建。
    • 启用自动版本控制的本地托管的Subversion存储库,作为“Web文件夹”装入。缺点:不能很好地处理其他存储库的工作副本;在Windows中安装适当的WebDAV文件夹最多是痛苦的。
    • 和前面的方法一样,但是使用主存储库中的一个分支,并在通常手动提交时合并到主干。缺点:并不是所有的托管存储库都能启用自动版本控制;不满足上面的第2点和第3点;不能安全地从主干反向合并到分支。
    • 切换到DVC,并在推送时“组合”我所有的小承诺。缺点:我不知道DVCSE的第一件事;有时颠覆是唯一可用的工具;我不知道如何满足上述第1点。
    • 在版本控制的文件系统上存储工作副本。缺点:Windows有吗?如果是这样,谷歌也没能给我指路。

    有人知道一个工具或工具组合能让我得到我想要的吗?或者我是否提出了相互矛盾的要求?(我非常怀疑。)

    更新: 在更仔细地检查了工具之后,我 已经使用 (叹气),原来是我的 text editor 有一个 非常 很好的多备份功能,几乎完全满足我的需要。它不仅具有将所有备份存储在“隐藏”文件夹中的选项(然后可以将该文件夹添加到Global Ignores for VCSE中),还允许在编辑器中进行浏览,甚至与备份进行比较。

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

    4 回复  |  直到 15 年前
        1
  •  1
  •   Dingo    16 年前

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

        2
  •  3
  •   Deniz Dogan    15 年前

    分布式版本控制。(Mercurial、Git等…)

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

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

    想做彻底的实验改变吗?克隆存储库,在计算机上进行大量提交。如果成功了,将其推回;如果失败了,则只需回滚或丢弃回购。

        3
  •  1
  •   kay.one    16 年前

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

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

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

    它曾多次挑衅地救了我的命。

    Shadow Copy

        4
  •  0
  •   Martin v. Löwis    16 年前

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