Lista wszystkich svn: externals recursively?

Jak mogę uzyskać listę wszystkich SVN:externals (rekurencyjnie)w katalogu? Czy jest do tego jakiś pożytek?

(używam Windows (i tortoise))

Mam kilka svn: externals linkowania do różnych wspólnych części mojego projektu i kiedy rozgałęziam to zwykle dość podatne na błędy znaleźć wszystkie zewnętrzne i zmienił je tak, że link do ścieżek w nowej gałęzi.

Author: daveb, 2009-03-25

6 answers

Wykonaj następujące czynności w katalogu głównym swojej kopii roboczej:

svn propget svn:externals -R

Jak omówiono w komentarzach poniżej, nie wymieniono elementów zewnętrznych w elementach zewnętrznych.

Uwaga dla użytkowników TortoiseSVN: w Instalatorze TortoiseSVN istnieje opcja instalacji klienta wiersza poleceń SVN. Ta opcja nie jest domyślnie włączona.

 127
Author: Wim Coenen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-07 15:49:09

Ręczna zmiana wszystkich tych zewnętrznych właściwości brzmi żmudnie. Czy przeglądałeś nową funkcjonalność dla zewnętrznych dodaną w Subversion 1.5?

Subversion 1.5 robi ogromny krok w łagodzeniu tych frustracji. Jak wspomniano wcześniej, adresy URL używane w nowym formacie definicji zewnętrznych mogą być względne, a Subversion zapewnia magię składni do określania wielu wariantów względności adresów URL.

../

Względem adresu URL katalog, w którym ustawiona jest właściwość svn:externals

^/

Względem katalogu głównego repozytorium, w którym właściwość svn:externals jest wersjonowana

//

Względem schematu adresu URL katalogu, na którym ustawiona jest właściwość svn:externals

/

Względem głównego adresu URL serwera, na którym jest wersjonowana właściwość svn:externals

Może któraś z nich pomoże? To chyba zależy od dokładnie jak się rozgałęziasz i jak wygląda struktura repozytorium.

 15
Author: Sebastian Celis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-03-25 17:03:06

Moje obejście TortoiseSVN:

Otwórz " gałąź/tag..."okno dialogowe z menu kontekstowego SVN. Dolne okno dialogowe pokazuje wszystkie elementy zewnętrzne, w tym zagnieżdżone.

 8
Author: DrRobotNinja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-15 14:59:05

Być może, jako obejście, mógłbyś zorganizować swój projekt w taki sposób, że wszystkie elementy zewnętrzne są ustawione w tym samym folderze, na przykład w folderze projektu tuż pod bagażnikiem. (Nie oznacza to, że wszystkie foldery zewnętrzne muszą być na tej samej głębokości przy okazji.) Następnie możesz kliknąć prawym przyciskiem myszy na folderze projektu, a następnie Właściwości..., następnie zakładka Subversion, następnie Properties... następnie kliknij dwukrotnie svn: externals.

 0
Author: Anonymous Coward,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-18 09:39:49

Użyłem odpowiedzi Wima Coenena i napisałem następujący skrypt, aby utworzyć listę wszystkich wersji:

getSvnRevs() {
  cd "$1"
  wcver="$(svnversion)"
  [ -n "$wcver" ] || panic "Unable to get version for $wcdir"
  echo "$1: $wcver"
  svn propget svn:externals -R | while read a b c d e; do
    [ -n "$a" ] || continue
    if [ "$b" = "-" ]; then
      wcparent="$a"
      wcdir="$wcparent/$c"
      [ -z "$e" ] || panic "Invalid format #1"
    else
      [ -n "$wcparent" ] || panic "Invalid format #2"
      wcdir="$wcparent/$a"
      [ -z "$c" ] || panic "Invalid format #3"
    fi
    [ -d "$wcdir" ] || panic "Invalid directory: $wcdir"
    wcver="$(svnversion "$wcdir")"
    [ -n "$wcver" ] || panic "Unable to get version for $wcdir"
    echo "$1/$wcdir: $wcver"
  done
}

Na szczęście nie mam zagnieżdżonych zewnętrznych, więc nie musiałem tego testować i chyba nie zadziała. Ale jeśli tego potrzebujesz, prawdopodobnie wystarczy wywołać tę funkcję rekurencyjnie. Ponadto, nigdy nie testowałem z nazwami plików, które wymagają ucieczki. To pewnie nie zadziała.

DISCLAIMER: wiem, że pierwotne pytanie dotyczyło Windowsa, a skrypt shell nie będzie tam działał chyba, że używasz Cygwina lub podobnego.

 0
Author: Daniel Alder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-13 11:52:22

Wziąłemodpowiedź Daniela Aldera , usunąłem wywołania svnversion i zrobiłem je rekurencyjnymi (Uwaga: read a b c d e nie działa, jeśli w źródle lub miejscu docelowym jest spacja). Jest to skrypt bash, więc albo będziesz potrzebował czegoś takiego jak Cygwin, albo użyj podsystemu Windows dla Linuksa .

getSvnExternals() {
  svnbase="$1"
  svnpath="$2"
  svn propget svn:externals -R "$svnbase/$svnpath" 2> /dev/null | while read a b c d e; do
    [ -n "$a" ] || continue
    if [ "$b" = "-" ]; then
      wcparent="$a"
      external="$c"
      wcdir=$(echo "$wcparent/$d" | sed s#^./##)
      [ -z "$e" ] || echo "WARNING: Invalid format #1. line='$a $b $c $d $e'"
    else
      [ -n "$wcparent" ] || echo "WARNING: Invalid format #2. wcparent=$wcparent"
      external="$a"
      wcdir=$(echo "$wcparent/$b" | sed s#^./##)
      [ -z "$c" ] || echo "WARNING: Invalid format #3. line='$a $b $c $d $e'"
    fi
    echo "$1/$wcdir: $external"
    ## recurse into external directory
    [ -d "$wcdir" ] && getSvnExternals "$1/$wcdir"
  done
}
 0
Author: paulie4,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-16 16:21:49