4

通常我手动执行此操作:

  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

有没有我不需要执行第 1 步和第 2 步的方法或直接 svn export 命令?我希望有一种更简单的方法,svn 会自动创建从 SVN 到我的本地机器的目录结构。

谢谢!

4

4 回答 4

1

好的,现在我想出了一个创建相对路径的 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.

所以基本上,你只需要将's 参数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

希望这可以帮助!

于 2013-02-07T08:13:45.873 回答
0

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

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

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

于 2013-02-07T02:26:19.640 回答
0

在as in 中似乎没有-p等价物,你最好的选择是在你的svn export/checkoutmkdir.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"
}
于 2016-07-05T03:55:19.647 回答
0

我尝试使用 SVN UI 执行此操作,效果很好。

假设我有一个文件夹'abc'。我想在文件夹'build'(不存在)中导出一个文件。

显示源 url 和目标目录的图像

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

于 2017-11-02T07:51:35.313 回答