2012-01-11 13 views
10

Czy można manipulować właściwością subwersji, taką jak svn:externals tylko za pomocą adresu URL? (Czyli bez konieczności posiadania kopii roboczej.)Jak wykorzystać propozycję subversion do adresu URL?

Chciałbym skrypt szpilki svn:externals do konkretnej rewizji danego URL Subversion, ale to wydaje się być niemożliwe:

$ svn propset foo bar https://example.com/svn/myproject/trunk 
svn: Setting property on non-local target 'https://example.com/svn/myproject/trunk' needs a base revision 

$ svn propset foo bar -r HEAD https://example.com/svn/myproject/trunk 
svn: Try 'svn help' for more info 
svn: Cannot specify revision for setting versioned property 'foo' 

$ svn propset foo bar --revprop -r HEAD https://example.com/svn/myproject/trunk 
svn: DAV request failed; it's possible that the repository's pre-revprop-change hook either failed or is non-existent 
svn: At least one property change failed; repository is unchanged 
svn: Error setting property 'foo': 
could not remove a property 

(mam takie same wyniki, jeśli użyję rzeczywistego numeru wersji zamiast HEAD).

Odpowiedz

4

Nie. Zmiana właściwości pliku jest jak zmiana samego pliku - potrzebny jest katalog roboczy. Istnieje kilka poleceń Subversion, które zmieniają zatwierdzenie bez potrzeby wykonywania kopii roboczej: svn cp, svn mkdir i svn delete. Cała reszta wymaga katalogu roboczego w celu wprowadzenia zmian.

Przy okazji, możesz wprowadzić zmiany na rewizji właściwości bez kopii roboczej. Właściwości rewizji są takie jak komentarz zatwierdzenia (svn: log), identyfikator użytkownika (svn: author) i czas zatwierdzenia (svn: date).

+3

Obejście problemu wydaje się, że "svn checkout --depth = empty' w tymczasowy katalog z' mktemp' lub podobnym (jest to dość szybko), użyj 'svn propset', aby wprowadzić zmianę, zatwierdzić, a następnie usunąć katalog tymczasowy. – mjs

+2

Istnieje inna opcja: svnmucc, która jest dołączona do źródeł SVN, ale nie jest domyślnie wbudowana ani zainstalowana. Możesz przeczytać o tym na http://svnbook.red-bean.com/en/1.8/svn.ref.svnmucc.re.html. – trent

+0

Dodając do notatki przez @trent, TortoiseSVN dołącza teraz svnmucc z instalatorem od wersji 1.8.1 i nowszej https://sourceforge.net/p/tortoisesvn/tickets/496/ –

9

Tak, chociaż to trochę hack; svn propedit można zmienić URL cele:

svn propedit foo --editor-cmd "echo bar>" http://example.com/svn/myproject/trunk -m "Property changed"

+0

, to świetna sztuczka, ale lepiej jest określić wiadomość w linii komend za pośrednictwem flagi '-m' w przeciwnym razie edytor będzie również wywoływany dla wiadomości. –

+0

Masz rację, oczywiście. Edytowanie odpowiedzi. –

0

Opierając Willem na excellent answer, oto przykład pokazujący jak ustawić SVN auto-props dla needs-lock dla wszystkich plików i mime-type dla poszczególnych rozszerzeń korzystających URL:

svn propedit svn:auto-props --editor-cmd "echo \"* = svn:needs-lock=* 
*.os = svn:mime-type=application/octet-stream 
*.osproj = svn:mime-type=application/octet-stream\" >" http://example.com/svn/myproject/trunk -m "Setting auto-props." 
3

Można użyć polecenia svnmucc do nieinteraktywnego ustawiania właściwości adresu URL, na przykład svn:externals.

przykład:

$ svnmucc --root-url https://example.com/svn -m 'reference other/yap' \ 
    propset svn:externals "^/otherproject/tag/xyz other 
^/yetanother/tag/123 yap" myproject/trunk 

Należy zauważyć, że svnmucc obsługuje również innych komend oprócz propset i możliwe jest łańcuchem wielu poleceń w jednej rozmowy (stąd nazwa). Wynik to tylko jeden zestaw zmian.

Komenda svnmucc jest częścią pakietu źródłowego dla subversion i zwykle jest dostępna za pośrednictwem menedżera pakietów dystrybucji. Na przykład Fedora 25 zawiera go w pakiecie subversion-tools. OpenCSW zawiera go nawet w głównym pakiecie subversion.

+0

Twój wpis musi być oznaczony jako * Odpowiedź *. :) – bahrep