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.
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.
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.
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.
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.
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.
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
}
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