2017-01-04 1 views
1

Ich habe eine SVN Repo und irgendwo gibt es einige externe Ordner in ein und demselben Repo. Wenn ich den Ordner mit den Externals auschecke, holt Svn auch die Externals, aber ich habe herausgefunden, dass für die aktuelle Phase nur einige von ihnen benötigt werden.Wie kann man nur einen Teil der externen Dateien in einem SVN Repo auschecken?

Ich weiß, dass ein svn co urlA myFolder --depth empty tun und dann eine svn up fileA fileB nur diese Dateien sind in den myFolder (I habe gesucht here für das Verständnis --depth Option). Aber es scheint, dass es nicht für die Externen funktioniert ...

Ich habe dies getan (unter der Annahme der Urla 2 Ordner hat, ist FLD und ext, die die Externen hat):

$ svn co urlA fldA --depth empty 
    U fldA 
    Checked out revision 115 
$ svn up --set-depth empty fld ext 
    Updating 'fld': 
    A fld 
    Updated to revision 115. 
    Updating 'ext': 
    A External 
    Updated to revision 115. 
    Summary of updates: 
    Updated 'fld' to r115. 
    Updated 'ext' to r115. 
$ svn up --set-depth immediates fld ext 
    Updating 'fld': 
    Restored 'fld' 
    Restored 'fld/header.h' 
    Restored 'fld/source.cpp' 
    At revision 115. 
    Updating 'ext': 
    Restored 'ext' 
    At revision 115. 
    Summary of updates: 
    Updated 'fld' to r115. 
    Updated 'ext' to r115. 

Selbst wenn ich das propget wie here verwende, überprüft das Update die Dateien und Ordner in ext nicht. Mehr möchte ich nur ein paar Dateien im ext. Ist es möglich? Gibt es etwas, das mir fehlt? Kann mir bitte jemand helfen?

Antwort

0

Nach ein paar Recherchen habe ich einen Weg gefunden, es zum Laufen zu bringen. Ich habe ein Bash-Skript, das nur die benötigten Dateien ist checkouting:

#!/bin/bash 

EXTERNALS=$(svn propget svn:externals .) 

FILES=(header1.h source1.cpp header2.h source2.cpp header3.h header4.h source4.cpp) 

IS_URL=true 
for i in $EXTERNALS ; do 
    echo "==========" 
    if [ "$IS_URL" = true ] ; then 
     URL=$i 
     IS_URL=false 
    else 
     DIR=$i 
     IS_URL=true 
     svn co $URL $DIR --depth empty 
     LIST=$(svn list $DIR) 
     l2=" ${FILES[*]} " 
     for item in ${LIST[@]}; do 
      if [[ $l2 =~ " $item " ]] ; then 
       svn up $DIR/$item 
      fi 
     done 
     rm -rf $DIR/.svn 
    fi 
done 

exit 0 
Verwandte Themen