我想重新定位我的本地機器上檢出多個SVN目錄,因爲我們的SVN服務器已移動,現在有不同的IP地址。相反,通過像的SmartSVN或TortoiseSVN的的工具這樣做的,我想用一個腳本來執行的目錄中一個橫掃。如何SVN重定位多個目錄
每個目錄都包含不同的工作副本 - 所以不管是不同的項目或有時也不同分支或標記,所以我不能只是做在根目錄下的搬遷。
我想重新定位我的本地機器上檢出多個SVN目錄,因爲我們的SVN服務器已移動,現在有不同的IP地址。相反,通過像的SmartSVN或TortoiseSVN的的工具這樣做的,我想用一個腳本來執行的目錄中一個橫掃。如何SVN重定位多個目錄
每個目錄都包含不同的工作副本 - 所以不管是不同的項目或有時也不同分支或標記,所以我不能只是做在根目錄下的搬遷。
我找到了部分解決方案here,並在評論的改進版本,但我想清理一下,這裏的其他人提供它,以及
的IP地址都是虛構的,需要調整到本地設置。
該腳本遍歷SVN管理的所有目錄並使用舊位置,然後使用每個位置的重定位選項調用svn switch
命令。
#!/bin/bash
OLD_REPO=http://127.0.0.1/svn/
NEW_REPO=http://192.168.0.17/svn/
for dir in `ls -1 */.svn/entries | xargs grep -H -l $OLD_REPO | grep -E -o ^[^\/]+`; do
echo Switching sandbox $dir from $OLD_REPO to $NEW_REPO;
OLD_ROOT=`svn info $dir | grep ^Repository\ Root | cut -f 3 -d ' '`
NEW_ROOT=`echo $OLD_ROOT | sed "s|$OLD_REPO|$NEW_REPO|"`
svn switch --relocate $OLD_ROOT $NEW_ROOT $dir;
done
如果你也想改變而重新定位的用戶,可以很容易地添加類似--username $USERNAME
參數的命令,並在腳本頂部定義$USERNAME
。
由於我的版本grep
不支持選項-o
(Msys中的grep 2.4.2),因此@nwinkler的解決方案無法在我的機器上運行。
我想出了這也有如下改進這個其他的解決方案:
代碼是更長的時間,而不是優雅,但它的伎倆。
腳本應該從包含本地存儲庫的目錄運行。
#!/bin/bash
#Change separator to support directories with space
SAVEIFS=$IFS
IFS=$(echo -en "\n\b")
#URL of new
NEW_REPO=http://newserver:8080/svn/
#List of potential old repositories
OLD_REPOS[0]=http://oldserver:8080/svn/
OLD_REPOS[1]=http://oldserver.domain.com:8080/svn/
OLD_REPOS[2]=http://127.0.0.1:8080/svn/
for dir in `ls -d1 *`; do
#Check directory and skip if needed
if ! [ -d "$dir/.svn" ]; then
continue;
fi
#Relocate
OLD_ROOT=`svn info $dir | grep ^Repository\ Root | cut -f 3 -d ' '`
if [ "`echo $OLD_ROOT | grep $NEW_REPO`" == "$OLD_ROOT" ]; then
echo "Skipped repository '$dir' (already relocated)";
else
for OLD_REPO in ${OLD_REPOS[*]}; do
NEW_ROOT=`echo $OLD_ROOT | sed "s|$OLD_REPO|$NEW_REPO|"`;
if [ "$OLD_ROOT" != "$NEW_ROOT" ]; then
echo "Switching repository '$dir' from $OLD_REPO to $NEW_REPO";
svn switch --relocate $OLD_ROOT $NEW_ROOT $dir;
echo "=> done";
continue 2;
fi
done
echo "Repository '$dir' does not match any old repository identified";
fi
done
#Restore separator
IFS=$SAVEIFS
#--END--#
的方法略有不同:
的部分解決方案的URL似乎鏈接到一個空白頁...怪異。 – 2016-08-11 11:31:27