使用wget“checkout”svn存储库

时间:2013-04-05 13:56:59

标签: bash svn wget

我有一个非常糟糕的svn存储库,我没有权限重新构建。有几个子项目分布在存储库根目录不同深度的仓库中。我想能够检查所有的中继(但不是任何分支或标签文件夹),无论它们的深度是多少。我认为这对于wget解决来说是一个很好的问题。我最初使用wget看起来像这样:

wget -r -X 'tags' -I "base/of/repo" "http://www.urlrepo.com/"

运行此命令时遇到的一些问题:

  1. 即使我认为-X标志应该排除它们,Wget仍然抓住了标签文件夹
  2. 下载的文件被放置在" base / of / repo"的文件夹中,这并不可怕,但不保存到此路径会很好
  3. 思想?

2 个答案:

答案 0 :(得分:3)

您可以使用稀疏结帐使用bashsvn递归执行此操作。

类似的东西:

svn co --depth immediates svn://repo/trunk

然后在每个子文件夹上,如果是'tags':

svn up --set-depth empty tags

否则:

svn up --set-depth infinity dirName

答案 1 :(得分:1)

虽然可能正常工作,但它依赖于不是100%保证的东西:当您使用httpd作为Subversion存储库服务器时,可以使用浏览器。

您可以在执行--depth时使用svn co上的--set-depth参数和svn update参数来限制结帐。这样您就可以只签出所需的文件夹和目录,而无需将所有内容都删除。这有时被称为稀疏结账。作为奖励,这是一个实际的结账。你可以做提交 - wget不允许你做的事情:

$ # I want to just checkout the immediate files under the URL:
$ svn co --set-depth=immediates $REPO/trunk/foo
A foo/first
A foo/second
A foo/third
# I want to checkout everything in first and third, but nothing in second:
$ cd foo
$ svn up --set-depth=none second #Removes directory second
$ svn up --set-depth=infinity first third

使用它应该适用于您的原始示例:

$ svn co --depth=none http://www.urlrepo.com/ workdir
$ cd workdir
$ svn up --set-depth=none base
$ cd base
$ svn up --set-depth=none of
$ cd of
$ svn up --set-depth=infinity repo