2009-12-11 11 views
12

Potrzebuję wyjaśnienia na temat zachowania "przełącznika svn". Używam wersji SVN 1.6.5.Czy "svn switch" usuwa kiedykolwiek pliki dodane lokalnie?

Po przeczytaniu podręcznika moje zrozumienie zachowania jest takie, że lokalne zmiany zostaną zachowane. Tak więc oczekiwałbym, że lokalnie dodany plik nadal będzie istniał w moim katalogu roboczym po svn switch.

Jednak moi koledzy i ja widzieliśmy kilka przypadków, w których nowe pliki są usuwane przez przełącznik. Niestety, nie możemy wymyślić, jak to powtórzyć.

Czy jest jakaś okoliczność (albo funkcja lub znany błąd), pod którym svn switch usuwa pliki dodane lokalnie?

Odpowiedz

11

Myślę, że to zły pomysł, aby zmienić, gdy masz niezatwierdzone zmiany. Najpierw zrób lokalne zmiany w oddziale z svn cp . <branch URL>, a następnie przełącz. Mogą pojawić się trudne sytuacje, które można uzyskać w inny sposób.

Wyobraź sobie, że w wersji, do której się przełączasz, pliki dodane lokalnie już istnieją i są zupełnie inne. Albo, co jeśli dodałeś cały katalog plików, których nie można odpowiednio scalić z plikami w wersji, na którą się przełączasz. Czy naprawdę chcesz tego jednego wielkiego konfliktu?

Istnieje stan "S" przedstawiony przez svn status, co oznacza, że ​​różne części drzewa źródłowego mają różne wersje. Dzieje się tak, gdy SVN jest mylony z lokalnymi zmianami podczas przełączania. Po prostu pęka w środku przełącznika, a potem wraca do bólu w szyi. Zdarzyło mi się kilka razy. Dlatego zawsze upewniam się, że moja kopia robocza nie ma lokalnych modyfikacji, zanim uruchomię svn sw.

+0

Dzięki Ivan. Kiedy mówisz "commit your local changes do oddziału z svn cp", prawdopodobnie powinienem użyć tymczasowej, specyficznej dla programisty gałęzi? tj. nie ten, na który ostatecznie chcę się przestawić, ponieważ moje zmiany jeszcze się nie zakończyły. –

+0

Tak. To byłby rodzaj twojej osobistej gałęzi "praca w toku". –

+0

To naprawdę nie działa, jeśli zmieniła się ścieżka do twojego projektu w repozytorium (ze względu na to, że administrator go przenosił), ponieważ powodem, dla którego się zmieniasz, jest sprawdzenie Twojej pracy. – badbod99

6

Nie powinien usuwać plików dodanych lokalnie ani plików bez wersji. Przypadki skrajne to miejsca, w których katalog jest przenoszony lub usuwany przez przełącznik, ale w takim przypadku powinien wystąpić konflikt drzewa.

To, co często robię, jeśli wydaje mi się, że mogą wystąpić konflikty drzew, to zapisać poprawkę bieżących zmian. Wtedy wiem, że mogę wymazać swoją kopię roboczą i zacząć od nowa, jeśli to konieczne, bez utraty pracy.

svn diff > ../somewhere/safe/save.diff 
# Break stuff 
patch -p0 < ../somewhere/safe/save.diff 
+0

nie pomyślał o tym :) – Pondidum

+0

Dzięki Andrew. Próbowałem tego w przeszłości, ale ograniczeniem svn diff jest to, że nie pokazuje nowych plików - tylko te zmodyfikowane. –

+3

Jeśli 'svn add' plik, pojawi się w pliku różnic, nawet zanim go zaznaczysz. –

0

Zachowanie svn switch jest bardzo podobna do svn update: Jeśli cel przełącznika to ścieżka, w której jakiś plik brakuje w stosunku do kopii roboczej, pliki te zostaną usunięte z kopii roboczej.

Tak jak powiedział Ivan, powinieneś zatwierdzić swoje zmiany, a następnie się przełączyć.

Powiązane problemy