如何通过自动创建相对目录/路径来导出svn?

时间:2013-02-06 23:04:24

标签: svn

通常我会手动执行此操作:

  1. mkdir -p folder1/foder2/folder3
  2. cd folder1/foder2/folder3
  3. svn export svn://127.0.0.1/svn/app1/branches/branch1/folder1/foder2/folder3/file1.txt
  4. 是否有一种方法或直接svn导出命令,我不需要执行步骤1和2?我希望有一个更简单的方法,svn将自动创建从SVN到我的本地机器的目录结构。

    谢谢!

4 个答案:

答案 0 :(得分:0)

如果存储库中已知的硬编码路径的情况 - 是的,只需在导出中写入目标路径(手动)

svn export svn://127.0.0.1/svn/app1/branches/branch1/folder1/foder2/folder3/file1.txt folder1/foder2/folder3/file1.txt

如果动态可变的相对路径 - 不,您没有内部预制选项。但是,如果从存储库导出修订内容,则可以使用svnlook子命令和代码中的逻辑来实现它

答案 1 :(得分:0)

好的,现在我想出了一个创建相对路径的bash脚本。 我对bash脚本没有深入的了解,所以这有点难看。请原谅我。 但希望这会激起一个想法。

<强> svn_export.sh

#!/bin/sh
for var in "$@"
do
    svnArg1=$var;
    svnArg2=`echo "$svnArg1" | sed -e 's/file:\/\/\/usr\/share\/svn\///'`;

    tempDir=`dirname $svnArg2`;
    tempFile=`basename $svnArg2`;
    if [ -n "$tempFile" ]; then

        if [ ! -d "$tempDir" ]; then
            echo "mkdir -p $tempDir";
            echo `mkdir -p $tempDir`;
        fi    

        echo "svn export $svnArg1 $svnArg2";
        echo `svn export $svnArg1 $svnArg2`;

    fi

done

exit 0;

<强>用法:

sudo svn diff -r 1:HEAD --summarize file:///usr/share/svn/TestRepository/ | awk '{print $2}' | xargs ./svn_export.sh

<强>输出

A TestRepository/trunk/test2.txt Export complete.
A TestRepository/trunk/test3.txt Export complete.
A TestRepository/trunk/test.txt Export complete.

所以基本上,你只需要在file:\/\/\/usr\/share\/svn\/的参数中修改此字符串sed即可修改你的svn URL。

示例:svn:\/\/127.0.0.1\/svn\/project1\/branches\/

现在,用法如下:

svn diff -r 1540:HEAD --summarize svn://172.0.0.1/svn/project1/branches/branch1 | awk '{print $2}' | xargs ./svn_export.sh

希望这有帮助!

答案 2 :(得分:0)

-p中的svn export/checkout似乎与mkdir不同,您最好的选择是在.bashrc

中创建一个函数
function svnExport() {
    mkdir -p "$(dirname "$1")" && svn export "$0$1" "$1"
}

所以你的具体例子是

svnExport 'svn://127.0.0.1/svn/app1/branches/branch1/' 'folder1/foder2/folder3/file1.txt'

编辑:结果--force将处理子目录,但有副作用,如自动覆盖。所以如果你不关心那么你可以做到

svn export --force 'svn://127.0.0.1/svn/app1/branches/branch1/folder1/foder2/folder3/file1.txt' 'folder1/foder2/folder3/file1.txt'

function svnExport() {
    svn export --force "$0$1" "$1"
}

答案 3 :(得分:0)

我尝试使用SVN UI这样做,并且工作正常。

假设我有一个文件夹&#39; abc&#39;。我想导出文件夹&#39; build&#39; (不存在)文件。

Image showing source url and destination directory

在创建构建文件夹后成功导出文件。至于命令行选项,我尝试了所有可能的方法。它本身并不创建新文件夹。该文件夹已经存在。