复制受版本控制的目录
我很好奇是否可以复制受版本控制的目录并开始在两个副本上工作。
我知道从一个VCS到另一个VCS可能会有所不同,但是我故意不指定任何VCS,因为我对不同的情况感到好奇。
我最近正在与一位同事谈论在SVN中执行此操作。我认为应该可以,但是我仍然不能100%地确定,因为我不知道SVN确切存储在工作副本中。
但是,如果我们谈论DVCS的世界,事情可能会更加不清楚,因为每个工作副本本身就是一个存储库。面对现在要在bzr中执行此操作,我决定提出这个问题。
以后编辑:
有人问我为什么要这么做。这是整个故事:
就SVN而言,这是因为不在办公室,与SVN服务器的连接速度非常慢,所以我和我的同事决定只检查一次源并制作本地副本。那就是我们所做的,并且工作正常,但是我仍然想知道它是否可以保证正常工作,或者它只是发生了。
在bzr情况下,我打算将"主"存储库移至另一台服务器。所以我在考虑将其复制到那里,然后开始考虑主要的仓库。我猜最安全的方法是克隆一个。
解决方案
回答
我建议不要这样做,因为我们正在绕过源代码控制机制。
但是也许我们可以解释"为什么"?
回答
我们也可以只签出两个工作副本(至少使用SVN),说出work / copy1和work / copy2并并行处理两个版本。
我想知道我们试图实现的目标是什么,因为复制可能不是解决问题的最佳方法。
回答
这将取决于VCS。我在CVS中知道它在每个受版本控制的目录中存储(隐藏)目录。当然,这些文件将与该目录的任何副本一起复制。
这种情况经常发生,我们不想复制那些隐藏文件,因此rsync工具附带一个选项(-C)来忽略这些文件,就像CVS一样。
回答
我偶尔在SVN中这样做,但没有遇到任何问题。我相信,在SVN中,所有存储的内容是目录的原始状态以及指向其来源的存储库目录的指针。
因此,基本上它可以按我们认为的那样工作。
- 如果Copy1中的File1更改并且Copy2中的File2更改都可以提交
- 如果Copy1中的File1更改而Copy2中的File1更改,则第二个提交的人都会出错,并且必须先进行更新/合并。
对于那些为什么要复制的原因感到好奇的是,当我第一次检出我们较大的项目之一时,我的网络检出速度很慢。相比之下,简单地从另一台计算机进行复制似乎可以为我提供所有相同的好处。
回答
在svn中,这没问题。我们可以像处理第二次结帐一样使用副本。
不过,我建议我们第二次退房。如果我们想要一个不带.svn文件的副本,则svn export将创建一个副本。
回答
当我从Visual Studio中重新组织文件夹布局时,我对SVN感到头疼。在解决方案中移动的文件夹实际上将在文件系统中移动该文件夹,包括隐藏的.svn
文件夹。这会导致提交问题,因为.svn
数据与旧路径相关联,而我还没有找到重新与新路径相关联的方法。 SVNcleanup
运行正常,但未解决任何问题。文件夹移动后,SVNswitch
不允许我们更改它。我只能通过删除已移动文件夹及其子文件夹中的所有.svn
文件夹,然后重新添加该文件夹来解决此问题。
我与此修复程序有关的问题是,由于SVN将其视为全新文件,因此我们丢失了这些文件的版本记录。而且,它不能通过存储与先前版本的差异来有效地存储文件内容。
根据SVN文档,建议允许svn
客户端执行所有文件夹移动/创建/删除操作,以使下一次提交的所有内容保持同步。 Visual Studio并不总是可以接受的。幸运的是,大多数问题案例都是在提交期间捕获的,特别是如果我们使用TortoiseSVN。
回答
在Subversion中,每个.svn文件夹都具有包含文件夹所必需的内容。并且由于所有本地路径都存储为相对路径,因此在复制原始签出树之外的整个树或者部分树时,我们是安全的。他们将继续在新家中工作。
我经常从外面的主干复制子树,将新副本切换到其他分支/标签,然后对"克隆的"本地副本进行必要的操作。这样,如果出于任何原因需要返回到后备箱中执行某些操作,则原始位置的主箱副本不受干扰。
另一方面,将源代码控制的目录复制到其他源代码控制的树中是不安全的。如果要覆盖任何.svn文件夹,则很可能会破坏目标副本。
回答
对于SVN,这通常可以像其他人所说的那样工作。
如果在计算机之间进行复制,则可能会遇到麻烦。例如,如果我们正在使用file://存储库URL访问SVN存储库,则很有可能会发生问题。对于服务器访问可能不同的http://或者svn:// URL,也是如此。
为了安全起见,我只想在新地点结帐。如果要在新的工作目录中进行很多未完成的更改(通常是个坏主意),则可以使用rsync在不引入.svn目录的情况下复制源代码。
回答
对于bzr,如果仅将.bzr目录复制到另一个位置,则它将起作用。它不存储有关其所在路径或者所在主机的任何信息,因此我们可以将其复制到任何地方,并期望它可以正常运行。
回答
对我来说,就像GIT可能也可以满足需求,正如我们提到的断开连接或者连接断开。 GIT还具有非常好的SVN支持,因此两者是相辅相成的,我们最终将获得一个不错的版本化文件系统。