Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Svn 有没有办法修复Subversion中已删除和已读取的主干?_Svn_Version Control - Fatal编程技术网

Svn 有没有办法修复Subversion中已删除和已读取的主干?

Svn 有没有办法修复Subversion中已删除和已读取的主干?,svn,version-control,Svn,Version Control,我们有一个混乱的subversion存储库。想知道是否有什么聪明的方法可以解决它 根据subversion日志,基本上是这样的: …古老的历史 删除主干 创建主干 将所有文件重新添加到主干(进行新的更改/移动/添加/删除以获得良好效果) 更多更改/移动/添加/删除 更 这意味着我们失去了第1点到第4点之间的所有历史记录。这里有什么可以做的吗?还是最好让每个人都忽略并继续前进?您总是可以在删除之前恢复旧主干,合并该分支上新主干的更改,然后使nwe主干能够检索第1点和第2点中的内容 为此,请按照以下

我们有一个混乱的subversion存储库。想知道是否有什么聪明的方法可以解决它

根据subversion日志,基本上是这样的:

  • …古老的历史
  • 删除主干
  • 创建主干
  • 将所有文件重新添加到主干(进行新的更改/移动/添加/删除以获得良好效果)
  • 更多更改/移动/添加/删除

  • 这意味着我们失去了第1点到第4点之间的所有历史记录。这里有什么可以做的吗?还是最好让每个人都忽略并继续前进?

    您总是可以在删除之前恢复旧主干,合并该分支上新主干的更改,然后使nwe主干能够检索第1点和第2点中的内容

    为此,请按照以下步骤操作

    在存在“trunk”的地方,可以恢复到第2点之前的版本。恢复后,应再次将其提交到SVN中


    这样,所有以前的历史记录都将恢复,不会丢失。

    因为这涉及URL的更改,所以您确实无法使用合并。你需要做的是找到旧行李箱的位置。这并不难做到。您可以在删除旧主干时看到Subversion版本号。它在svn日志中。之前的修订是你想要的。比如说12345版本是旧行李箱被拆除的时候。我们有兴趣恢复12344版

    让我们把新的行李箱移开:

    $ svn mv -m"Getting the 'new trunk' out of the way" $REPO_URL/trunk $REPO_URL/funky_trunk
    
    这样可以使新的行李箱不碍事,但如果您确实需要什么东西,可以方便地取用

    现在,让我们恢复旧主干:

    $ svn cp -m"Restore the original trunk" -r12344 $REPO_URL/trunk@12344 $REPO_URL/trunk
    
    主干在版本12345中被删除,所以我从版本12344复制它。
    -r12344
    是文件查看版本12344的方式。
    @12344
    是12344版本中存储库的结构

    这将使您的行李箱回到列表中的第1步。就好像旧的主干从未被删除过一样

    现在,您需要执行步骤5、6等中的更改。您可能能够使用合并工具,但前提是您使用了
    --忽略祖先
    标志。这是因为尽管旧的主干文件
    $REPO\u URL/trunk/dir/foo.txt
    和新的主干文件
    $REPO\u URL/trunk/dir/foo.txt
    在我们凡人眼里看起来是同一个文件,但Subversion将它们视为两个不同的文件,因为它们有着完全不同的历史。这就是我们在ClearCase中称之为邪恶孪生兄弟的问题。这是当你把目录也升级时得到的


    真正的问题是为什么要这样做,为什么肇事者没有被枪杀,扔在快速行驶的公共汽车下,被大象践踏,然后开枪

    我怀疑你的网站使用的是原始主干方法。这是主干从未被处理过的地方,因为它看起来就像上次发布的版本一样。这就是标签的作用

    发生这种情况是因为假设有人将上一个版本放在主干上,如果您有一个非常复杂的分支策略而没有定期遵循,那么执行到主干的合并可能是一个混乱的过程。例如,假设您要分支、合并到主干并从主干重新分支,但大多数情况下,人们会从分支分支分支。你有一个分支中的一个分支中的一个分支几次,你不能把它合并回主干

    那么,那个人是做什么的?他们删除主干,然后将分支复制到主干!嘿,上一个版本是在trunk上发布的,我只花了几秒钟的时间,而不是几个小时或者合并和比较

    我也从你对颠覆合并的不信任中得到了这一点。如果合并两个直接相关的分支,并且不进行混乱的重构,Subversion合并将非常有效。(重构问题可以在Subversion 1.9中解决,其中Subversion将跟踪移动和重命名,作为实际的移动和重命名,而不是复制和删除)

    如果您试图合并两个不相关的分支,或者是远相关的分支,那么Subversion合并就会出现问题,如果您试图将主干仅用于最终版本,就会发生这种情况。使用标记标记发布

    在Subversion中有几种处理分支的策略。不稳定的主干由大量参与持续集成的站点使用

    敏捷站点更喜欢将每个用户故事、缺陷或任务放在自己的分支上,但您必须尽早将这些分支合并,并经常返回到某个集成分支


    如果您坚持主干必须只包含发行版,请创建一个集成分支,并将其用于您的主要工作。从主干分支集成分支,并且仅在完成后将集成分支合并到主干。所有其他分支都应该来自集成分支。

    问题是我对subversion的合并功能没有任何信任。特别是当涉及到移动的文件时。您没有丢失任何历史记录,只是更难获取at&4和1之间的链接已断开。