Svn 复制受版本控制的目录

Svn 复制受版本控制的目录,svn,version-control,dvcs,bazaar,Svn,Version Control,Dvcs,Bazaar,我很好奇是否可以复制一个受版本控制的目录并开始处理这两个副本 我知道不同的风投可能会有所不同,但我故意不指定任何风投,因为我对不同的案例很好奇 我最近和一位同事谈过在SVN做这件事。我认为应该可以,但我仍然不是100%确定,因为我不知道SVN在工作副本中到底存储了什么 然而,如果我们谈论DVCS世界,事情可能会更加不清楚,因为每个工作副本本身就是一个存储库。现在在bzr中面临这样的问题,我决定提出这个问题 稍后编辑: 有人问我为什么要这么做。以下是整个故事: 在SVN的案例中,这是因为不在办公室

我很好奇是否可以复制一个受版本控制的目录并开始处理这两个副本

我知道不同的风投可能会有所不同,但我故意不指定任何风投,因为我对不同的案例很好奇

我最近和一位同事谈过在SVN做这件事。我认为应该可以,但我仍然不是100%确定,因为我不知道SVN在工作副本中到底存储了什么

然而,如果我们谈论DVCS世界,事情可能会更加不清楚,因为每个工作副本本身就是一个存储库。现在在bzr中面临这样的问题,我决定提出这个问题

稍后编辑:

有人问我为什么要这么做。以下是整个故事:

在SVN的案例中,这是因为不在办公室,与SVN服务器的连接非常慢,所以我和我的同事决定只检查一次源代码,并制作一个本地副本。这就是我们所做的,它工作得很好,但我仍然想知道它是否保证工作,或者它只是发生了


在bzr的案例中,我计划将“主”回购移动到另一台服务器。所以我想复制一下,然后开始考虑主回购协议。不过,我想最安全的方法是制作一个克隆。

我建议不要这样做,因为这是在规避源代码管理机制


但也许你可以解释“为什么”?

你也可以检查两个工作副本(至少使用SVN)来表示work/copy1和work/copy2,并并行处理这两个版本


我不知道你想达到什么目的,因为复制可能不是解决你问题的最佳方法。

这取决于风险投资。我知道在CVS中,它在每个版本控制的目录中存储(隐藏)目录。当然,这些文件将与该目录的任何副本一起复制


通常情况下,您不希望复制这些隐藏的文件,因此rsync工具会提供一个选项(-C),以与CVS相同的方式忽略这些文件

我在SVN中偶尔会这样做,我没有遇到任何问题。我相信在SVN中,存储的只是目录的原始状态和指向它来自的存储库目录的指针

所以基本上它是按照你认为应该的方式工作的

  • 如果Copy1中的File1发生更改,Copy2中的File2发生更改,则两者都可以提交
  • 如果Copy1中的File1发生更改,而Copy2中的File1发生更改,则第二个提交的人将出现错误,并且必须首先更新/合并

对于那些好奇我为什么要复制的人来说,当我第一次签出一个更大的项目时,我遇到了通过网络签出速度非常慢的问题。相比之下,简单地从另一台计算机复制似乎给我提供了所有相同的好处。

在svn中,这没有问题。您可以像第二次结账一样处理副本


不过,我建议你再去看看。如果您想要一个没有.svn文件的副本,svn export将创建一个。

当我从Visual Studio中重新组织文件夹布局时,我对svn有些头疼。在解决方案中移动的文件夹实际上会移动文件系统中的文件夹,包括隐藏的
.svn
文件夹。这会导致提交问题,因为
.svn
数据与旧路径关联,而我还没有找到重新关联到其新路径的方法。SVN
clean-up
运行正常,但未修复任何问题。SVN
开关
不允许您在移动文件夹后对其进行更改。我只能通过删除已移动文件夹及其子文件夹中的所有
.svn
文件夹,然后重新添加文件夹来修复此问题

这个修复程序的问题是,您丢失了这些文件的版本跟踪,因为SVN将其视为全新的。此外,它也无法通过存储与以前版本的差异来高效地存储文件内容


根据SVN文档,建议允许
SVN
客户端执行所有文件夹移动/创建/删除操作,以便在下次提交时保持同步。这在VisualStudio中并不总是可以接受的。幸运的是,大多数问题案例都是在提交时发现的,特别是如果您使用TortoiseSVN。

在Subversion中,每个.svn文件夹都有包含文件夹所需的内容。由于所有本地路径都存储为相对路径,因此在原始签出树之外复制整个或部分树时是安全的。他们将继续在新家里工作

我经常从主干外部复制子树,将新副本切换到其他分支/标记,并在“克隆”本地副本上执行任何必要的操作。这样,如果出于任何原因,我需要返回主干并在主干中执行某些操作,我在原始位置有一个未受干扰的主干副本


另一方面,将受源代码管理的目录复制到其他受源代码管理的树中是不安全的。如果要覆盖任何.svn文件夹,很可能会损坏目标副本。

对于svn,这通常会像其他人所说的那样起作用

如果你在机器之间进行复制,你可能会遇到麻烦。例如,如果您使用file://repository URL访问您的SVN repo,那么很可能会出现问题。这同样适用于服务器访问可能不同的http://或svn://URL


为了安全起见,我只想在新地点结账。如果您希望在新的工作目录中有很多未注释的更改(通常是一个坏主意),那么您可以使用rsync在不引入.svn目录的情况下复制源代码。

对于bzr,如果您只是将.bzr目录复制到另一个位置,它就会工作。它不存储任何有关其所在路径或所在主机的信息,因此您可以将其复制到任何位置,并期望其正常运行