【问题标题】:Force an SVN checkout command to overwrite current files强制 SVN 签出命令覆盖当前文件
【发布时间】:2010-09-23 16:08:32
【问题描述】:

我正在向 SVN 添加一个现有网站。

这些文件已经存在于网络服务器上,现在相同的副本(- 配置文件)存在于存储库中。

我想将 webserver 目录转换为 SVN 工作副本,但是当我运行时:

svn checkout http://path.to/svn/repo/httpdocs .

我得到错误:

svn: 添加文件''失败: 同名对象已经存在

我如何告诉 SVN 只覆盖那些内容相同的文件?

【问题讨论】:

  • 标题误导,应该是结帐命令,而不是更新命令

标签: svn


【解决方案1】:

svn checkout --force svn://repo website.dir

然后

svn revert -R website.dir

将检出 website.dir 中现有文件的顶部,但不会覆盖它们。然后还原将覆盖它们。这样您就不需要关闭网站来完成它。

【讨论】:

    【解决方案2】:

    试试--force 选项。 svn help checkout 提供详细信息。

    【讨论】:

    • 我的 SVN (1.3.1) 版本似乎没有 --force 选项。这是什么时候添加的?
    • 1.4,我想,虽然我相信你会像我一样擅长检查发行说明......你有什么理由落后吗? SVN 项目在向后兼容性方面运行良好,因此无需担心升级。
    • 是的 - 托管服务器正在运行 Ubuntu 6.0.6;它具有 svn 1.3 作为标准安装。谢谢
    • 这个选项是在 Subversion 1.5 中添加的。如果您想强制更新冲突,它还添加了 --accept theirs-full。 (你可能想在构建服务器上)
    • 注意,这仅在没有 .svn 目录存在时有效。
    【解决方案3】:

    这很容易做到。我所做的只是将现有目录(不受版本控制)移动到临时目录。然后我将SVN版本检查到我正确的目录名,将临时目录中的文件复制到SVN目录中,并恢复SVN目录中的文件。如果这没有意义,下面有一个例子:

    /usr/local/www
    
    mv www temp_www
    svn co http://www.yourrepo.com/therepo www
    cp -pR ./temp_www/* ./www
    svn revert -R ./www/*
    svn update
    

    我希望这会有所帮助,但我不确定为什么只是简单的 SVN 更新没有将文件改回来?

    【讨论】:

      【解决方案4】:

      我没有可用的 1.5,因为我无法控制计算机。导致我出现问题的文件恰好是 lib 目录中的 .jar 文件。这是我为解决问题所做的:

      rm -rf lib
      svn up
      

      这建立在 Ned 的回答之上。也就是说:我只是删除了导致我出现问题的子目录,而不是整个存储库。

      【讨论】:

        【解决方案5】:

        从存储库拉到一个新目录,然后将旧目录重命名为old_crufty,将新目录重命名为my_real_webserver_directory,一切顺利。

        如果您的意图是每个文件都在 SVN 中,那么这是测试您的理论的好方法。如果您的意图是某些文件不在 SVN 中,请使用 Brian 的复制/粘贴技术。

        【讨论】:

          猜你喜欢
          • 2011-08-16
          • 2014-05-26
          • 2017-09-22
          • 1970-01-01
          • 2016-07-22
          • 1970-01-01
          • 1970-01-01
          • 2017-04-06
          • 2019-11-20
          相关资源
          最近更新 更多