通常我会手动执行此操作:
mkdir -p folder1/foder2/folder3
cd folder1/foder2/folder3
svn export svn://127.0.0.1/svn/app1/branches/branch1/folder1/foder2/folder3/file1.txt
是否有一种方法或直接svn导出命令,我不需要执行步骤1和2?我希望有一个更简单的方法,svn将自动创建从SVN到我的本地机器的目录结构。
谢谢!
答案 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)