在使用DVCS近两年后,似乎一个固有的“缺陷”是意外的数据丢失:我丢失了不是推送的代码,我知道其他人也是这样。
我能看到这样做的几个原因:没有内置异地数据复制(即,“提交必须转到远程主机”),存储库与代码位于同一目录中,并且“黑客”的概念很流行,直到你有东西要发布……但这不是重点。
我很好奇:您是否经历过与DVCS相关的数据丢失?或者您是否一直在使用DVCS而没有遇到问题?而且,与此相关的是,除了“记得经常推”之外,还有什么可以做的来将风险降到最低吗?
发布于 2009-07-25 02:04:29
我在一个集中的VCS中处理未提交的更改,然后决定我确实需要它们,这比我在DVCS中做的任何事情都要多。部分原因是我已经使用CVS快十年了,而git还不到一年,所以我有更多的机会遇到集中式模型的麻烦,但这两种模型之间的工作流属性的差异也是主要的因素。
有趣的是,大多数原因归结为“因为它更容易丢弃数据,我更有可能保留它,直到我确定我不想要它”。(丢弃数据和丢失数据之间的唯一区别是您打算丢弃它。)最大的因素可能是我的工作流习惯的怪癖-当我使用DVCS时,我的“工作副本”通常是分布在多台计算机上的几个不同的副本,所以在一个存储库中损坏或丢失,甚至是我一直在处理的计算机上的灾难性数据丢失,都不太可能破坏数据的唯一副本。(能够做到这一点是分布式模型相对于集中式模型的一大胜利-当每次提交都成为存储库的永久部分时,复制试探性更改的心理障碍要高得多。)
就最小化风险而言,养成将风险最小化的习惯是可能的,但你必须养成这些习惯。这里有两个一般原则:
只有在不同位置存在
发布于 2009-07-24 15:18:30
我从DVCS中丢失了数据,这既是因为删除了树和存储库(不记得它有重要的信息),也是因为使用DVCS命令行(在特定情况下是git)的错误:一些旨在恢复我所做的更改的操作实际上从存储库中删除了许多已经提交的修订。
发布于 2009-07-25 02:29:00
在分发和确保所有内容都“保存”之间存在内在的紧张关系(潜在的假设是保存就意味着备份到其他地方)。
如果您同时在多台计算机上的同一行工作(或者更确切地说,是几个存储库:例如,我经常需要在同一台计算机上的多个VM之间共享更改),这才是一个真正的问题。在这种情况下,“集中式”工作流将是理想的:您将设置一个临时服务器,并在某些给定的分支上使用集中式工作流。据我所知,目前的DVCS (git/bzr/hg)都不能很好地支持这一点。不过,这将是一个很好的特性。
https://stackoverflow.com/questions/1178325
复制相似问题