说我的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/README
和trunk/foo/bar.sh
是存储库中的版本,但trunk/foo/hum.sh
是本地版本。我希望后续svn status
到仅报告:
? trunk/foo/hum.sh
更新
提示:我可能从错误的'方向'接近这个'我打赌明智地使用cp
将存储库'检查到一边'会做我想要的事情,但我可以我不太理解它......
答案 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
选项,该选项还应覆盖标记为现有的文件。