如何在不执行结帐的情况下更新SVN文件?

ccp*_*ava 17 svn

我正在编写一些脚本,用更新版本的xml文件更新Linux机器的SVN仓库.回购巨大,并且在同一个盒子上没有结帐版本.我们的想法是在没有工作副本的情况下更新xml.这是可能的还是我需要签到临时文件夹,复制/覆盖,签入和删除临时文件夹?

编辑:非常感谢您到目前为止的答案.

我知道你可以用API和代码来做,不确定是否有任何SVN命令这样做......

非常感谢.

Dav*_* W. 28

问题是你不想打算结账,或者因为你担心如果你结账,你将需要结账很多文件?

你必须在Subversion中结帐.如果没有工作副本,您不能简单地提交更改.(并非完全如此,你可以做svn delete,并svn mkdir没有结帐.)

但是,您可以限制使用--depth交换机检出的文件数量.例如,您可以执行以下操作:

$ svn co --depth=empty http://myserver/myrepos/mydirectory
Run Code Online (Sandbox Code Playgroud)

这将检出目录,但不包含任何文件.然后,您可以svn update只执行要修改的文件,然后提交这些更改:

$ cd mydirectory            #Enter the empty working copy just checked out
$ svn update fileToChange   #Adds file you want to change to your working dir
$ edit fileToChange.xml
$ svn commit -m "Modified 'fileToChange.xml' with latest version"
Run Code Online (Sandbox Code Playgroud)

这将允许您更改文件fileToChange.xml而无需签出整个目录.


man*_*lds 6

有一种方法可以在没有工作目录的情况下"更新"文件,但这取决于你想要做什么.在很多情况下,我会像这样做一些自动检查,我发现这个解决方案足够好了:

您可以使用svn import更新文件

就像是:

svn import -m "updating the xml" local.xml http://server/path/to/repo/server.xml
Run Code Online (Sandbox Code Playgroud)

Catch是您无法导入已存在的文件,因此您必须发出删除然后导入:

svn delete -m "deleting for update" http://server/path/to/repo/server.xml
Run Code Online (Sandbox Code Playgroud)

您丢失了历史记录,但它是一种非常简单且轻量级的更新文件方式,完全取决于您正在执行的操作.如果您对删除和丢失历史记录感到不舒服,则必须使用其他答案建议的方法.