2013-02-06 43 views
3

通常我這樣做手工:如何通過自動創建相對目錄/路徑來導出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

有沒有一種方法或直SVN導出命令,我並不需要做的步驟1和2 ?我希望有一個更簡單的方法,SVN會自動創建從SVN到我的本地機器的目錄結構。

謝謝!

+0

我是一個PHP人,會說你可以用Phing來達到這個效果。 – Ankur

回答

0

如果情況下,庫稱爲硬編碼路徑 - 是的,只是寫在出口目的地的路徑(用手)

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

在動態變化的相對路徑的情況下 - 不,你有不是內部預製的選項。但是,如果您從存儲庫導出修訂版本的內容,則可以使用svnlook子命令和代碼中的自己邏輯來實現它。

+0

謝謝!這隻適用於很少的文件,但我需要將所有提交的文件導出到可以很多並且來自不同路徑的分支。 – spock

+0

@spock - ok,給**詳細描述** business-task **:「所有提交」只是從樹根中導出樹,「所有在修訂範圍內提交」是另一個導出,從Working導出複製是第三個,從服務器與本地FS上的存儲庫導出 - 第四個。所有人都使用不同的技巧 –

0

好吧,現在我想出了一個創建相對路徑的bash腳本。 我對bash腳本沒有深入的瞭解,所以這有點難看。請原諒我。 但希望這可以激起一個想法。

svn_export.sh

#!/bin/sh 
for var in "[email protected]" 
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. 

所以基本上,你只需要在sed的參數中修改這個字符串file:\/\/\/usr\/share\/svn\/,無論你的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 

希望這有助於!

0

似乎沒有等同於svn export/checkoutmkdir一個-p,最好的辦法就是讓一個函數在.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將h andle子目錄,但有副作用,如自動覆蓋。所以,如果你不關心那個,那麼你可以只是做

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" 
} 
0

我試着用SVN UI做這做那工作的罰款。

可以說我有一個文件夾'abc'。我想導出文件夾'build'(不存在)文件。

Image showing source url and destination directory

這個導出文件創建build文件夾後成功。至於命令行選項,我嘗試了所有可能的方法。它不會自己創建一個新文件夾。該文件夾需要已經存在。