如何签出SVN存储库,覆盖非版本化的本地目录?

时间:2012-01-17 17:16:32

标签: svn

说我的SVN存储库看起来像:

project/
    trunk/
        README
        foo/
            bar.sh

我有一个本地的无版本目录,如下所示:

svn/
    project/
        trunk/
            README
            foo/
                hum.sh

如果我的cwd是svn而我svn checkout http://...project/我得到以下内容:

svn: Failed to add directory 'project/trunk': an unversioned directory of the same name already exists

足够公平。因此:svn checkout --force http://...project/ 检查存储库,但保留现有文件(并为现有文件报告E。)

是否可以签出存储库,将存储库视为任何冲突文件的“首选”版本?即在上面的例子中,我最终应该:

svn/
    project/
        trunk/
            README
            foo/
                bar.sh
                hum.sh

其中trunk/READMEtrunk/foo/bar.sh是存储库中的版本,但trunk/foo/hum.sh是本地版本。我希望后续svn status报告:

?    trunk/foo/hum.sh

更新

提示:我可能从错误的'方向'接近这个'我打赌明智地使用cp将存储库'检查到一边'会做我想要的事情,但我可以我不太理解它......

2 个答案:

答案 0 :(得分:5)

是的,你几乎和你的svn checkout --force在一起。要完成,请对其执行svn revert -R。这将丢弃本地修改(但不删除新文件)。

编辑:如果您想使用cp执行此操作,-n, --no/clobber选项应该为您执行此操作:

$ svn co https://…/FOO their-foo
$ cp -rn my-foo/* their-foo
$ cd their-foo; svn stat

应该只显示新文件。

答案 1 :(得分:4)

您可以使用svn revert -R命令以递归方式将所有文件还原到存储库的版本(如果存在)。 hum.sh仍为?,但所有其他文件,无论是本地更改还是E xisting,都将恢复到存储库版本。

您还可以使用svn update --accept theirs-full选项,该选项还应覆盖标记为现有的文件。