Narzędzia pochodzące ze strony Tigris.org są bardzo przydatne w pracy programisty. Szczególnie pod systemem Windows, gdzie mamy do wyboru kilka związanych z kontrolą wersji. Od kilku lat używam programu TortoiseSVN – klienta Subversion, który w bardzo wygodny dla użytkownika sposób integruje się z menu kontekstowym plików i katalogów dostępnym pod prawym przyciskiem myszy, pokazując także status danego elementu w formie nałożonego obrazka. Czasem jednak informacja ta jest przekłamana – w dzisiejszym wpisie chciałbym przedstawić kilka możliwości, za pomocą których można sobie z tym problemem poradzić.
Fotografia: rooneg, CC-BY.
TortoiseSVN: Problem z odświeżaniem ikon statusu.
Jeśli tak jak ja używaliście TortoiseSVNa przez dłuższy okres czasu, na pewno zauważyliście, że bardzo często po niektórych akcjach, takich, jak:
- commit,
- update,
- checkout,
wyświetlany w katalogu status poszczególnych elementów nie pokrywa się z faktycznym stanem w repozytorium. Dzieje się tak dlatego, że system Windows nie odświeża wszystkich katalogów na bieżąco, ale dopiero wtedy, kiedy stwierdzi, że „coś się tam zmieniło”. Ze względu na fakt, że SVN nie zmienia nic samodzielnie, a jedynie aktualizuje swoją własną bazę informacji w podkatalogu .svn, występuje sytuacja, kiedy zamiast poprawnego statusu wyświetlany jest zapisany w cache stary stan, albo nie ma żadnej ikony.
W niniejszym wpisie chciałbym zebrać wszystkie metody i rozwiązania, jakie udało mi się znaleźć w Internecie. Część z nich stosowałem już wcześniej, część była dla mnie nowa, aczkolwiek każdą z nich przynajmniej przez chwilę przetestowałem. Mam nadzieję, że dzięki temu uda się w jednym miejscu zebrać w miarę kompletne studium problemu i wskazać kilka pomysłów na to, jak sobie z nim poradzić.
Rozwiązań: jest wiele.
Nie ma dobrej i jednoznacznej metody rozwiązania tego problemu, aczkolwiek jest kilka sposobów, na które możemy próbować zmusić TortoiseSVNa / Windowsa do wykonania tego, co „nam się należy”:
- kliknąć kilka razy klawisz [F5],
Jest to trywialne rozwiązanie, ale w większości przypadków pomaga. Po prostu program potrzebuje kilku sekund na przebudowanie cache’u i potem wszystko działa bez problemu.
- zamknąć i otworzyć okno Explorera [tzn. okno widoku katalogu, a nie przeglądarki IE ;]], ew. przejść do innego katalogu i wrócić ponownie do starego,
W moim przypadku zazwyczaj rozwiązuje problem z niedziałającym [F5]. Jeśli przechodzenie do innego katalogu nie rozwiąże problemu, zamknięcie i otwarcie jego okna powinno już coś w tej kwestii poprawić.
- wykonać operację „cleanup” na problematycznym katalogu,
Wtedy system Windows powinien wykryć zmiany w katalogu i samodzielnie odświeżyć jego dane. Jeśli w repozytorium nie ma aktualnie żadnych locków ani konfliktów prawdopodobnie nie zadziała.
- wykonać operację „SVN check for modifications” z menu kontekstowego TortoiseSVN,
Kilka razy mi pomogło, aczkolwiek z reguły jest to raczej opcja „na pokaz” niż faktycznie działająca.
- zmienić ustawienie „Status Cache” w „TortoiseSVN -> Settings -> Icon Overlays” z „Default” na „Shell”
Spowoduje, że zamiast w cache katalogu, ikony będą zapisywane w cache systemu, ale tylko dla aktualnie przeglądanego katalogu, co oznacza, że ich odświeżanie może być powolne dla dużych repozytoriów.
- w tym samym oknie ustawień wykluczyć wszystkie ścieżki poza naszymi repozytoriami – pole „Exclude paths” wypełnić kolejnymi liniami wykluczającymi partycje nie zawierające projektów, np. „C:*”.
Zależnie od tego, jak trzymamy dane na dysku [ja mam oddzielne miejsce na projekty] potrafi nieznacznie przyśpieszyć działanie TortoiseSVN [albo wywołać efekt placebo ;]]. Nie wiem, po co to narzędzie skanuje inne katalogi niż te z repozytoriami, ale cóż – zawsze kolejna możliwość zmiany tego zachowania.
Czy macie inne pomysły na to, jak rozwiązać postawiony w tytule wpisu problem?
Warto przeczytać.
Trwa ładowanie…
Czemu nie Git? SVN ssie.
Kwiecień
Ależ Gita też używam – tylko mniej. ;] No i nie wiem, czy TortoiseGit nie ma podobnego problemu, na razie nie zauważyłem.
Co do krytyki SVNa – zarówno w idei, jak i ogólnej pracy git faktycznie wydaje się być lepszy. Jakiś czas temu jednak byłem na konferencji 4Developers [o czym zresztą pisałem] i uczestniczyłem w panelu dyskusyjnym dotyczącym „scentralizowanych vs rozproszonych VCSów”. Po drugiej stronie stołu siedział taki jeden człowiek, który tak zaciekle bronił SVNa, argumentując, że ludzie po prostu nie umieją z niego korzystać, że aż zastanawiającym było to, że nikt nie mógł jakoś specjalnie go przegadać. Nawet Jarek Potiuk – prowadzący panel, którego znam i wiem, że „zjadł zęby” na różnych VCSach – podawał różne przykłady, gdzie „SVN ssie”, a tamten odpowiadał jak z automatu o tym, jak to powinno być realizowane w SVNie.
Także ja bym nic nie przesądzał. ;]
PHP- Sprawdzanie istnienia adresu email
Notabene podobna sytuacja jest z gitem – niektórzy sądzą, że to taki „lepszy SVN” i również nie używają go poprawnie, ale to już jest grubszy temat. Btw tortoise-git ma ten sam problem…
GIT- Windows i wielkość liter
Próbowałeś może tych moich „sztuczek” w TortoiseGit? Tutaj pewnie jest bardziej problem z samym Windowsem niż z którymś z VCSów – ale tutaj akurat nic nie poradzimy.
Co do gita – on wnosi ze sobą całą ideologię, której SVN w większości był pozbawiony, dlatego tak się dzieje. Ideologię SVNa łapało się „w biegu”, a tutaj jednak trzeba zrozumieć co to jest „zmiana” i dlaczego „zmiana to nie rewizja”.
PHP- Sprawdzanie istnienia adresu email
Wiesz, często upraszczam swoje myśli do „X ssie”, pozwól więc, że sprecyzuję:
dla mnie argument, że „po prostu nie umiesz korzystać z X” w przypadku SVN jest niedorzeczny. To prawda, przyznam szczerze, ja nie umiem korzystać z SVN, ale jeśli Git ma niezaprzeczalne zalety (takie jak: lokalna kopia jest rzeczywistym repo, szybkość, znacznie lepsze gałęzie, tak niesamowicie zajebisty hosting jak GitHub), a do tego nie wymusza na mnie dogłębnej „umiejętności korzystania”, to dlaczego miałbym w ogóle rozważać zainteresowanie svn?
Tak więc, przyznaję — nie umiem SVN, mam z nim złe doświadczenia, natomiast Git działał dla mnie świetnie i nie miałem z nim większych problemów. Ot, tyle. ;)
Kwiecień
Ależ nikt Ci nie mówi, że wina jest po Twojej stronie, spokojnie. Każdy korzysta z takich narzędzi, jakie jest mu wygodnie obsłużyć – np. ja siedzę na Windowsie, pomimo tego, że cały czas mocno używam Cygwina, a bardzo bym chciał używać Linuksa, tylko się przekonać nie mogę. A dla nas, programistów chyba jasnym jest, który system jest lepszy. ;]
Jeśli chodzi o kwestię Git vs SVN, to sytuacja jest bardzo prosta – ja korzystam z tego drugiego do projektów, gdzie jest mało osób – wtedy cała przewaga Gita po prostu ginie, bo nie jest potrzebna tam, gdzie „ktoś sobie coś doda” raz na jakiś czas. W momencie, kiedy jednak sam chcę się przyłączyć do większego projektu, od razu przeskakuję te kilka pól niżej w menu kontekstowym, bo git to jedyna możliwość. Lepsze wrogiem dobrego, ale dopóki dobre funkcjonuje jak należy, to ja nie widzę potrzeby przesiadki. ;]
PHP- Sprawdzanie istnienia adresu email
„dla nas, programistów chyba jasnym jest, który system jest lepszy. ;]”
OS X? A tak na poważnie: dokładnie, każdy używa takich narzędzi jakie wygodnie mu obsługiwać. Albo raczej, ja bym powiedział: takich narzędzi, jakie przyjemnie mu obsługiwać. Właśnie dlatego „przepłaciłem” dużo pieniędzy kupując Maka, właśnie dlatego używam Gita zamiast SVN, właśnie dlatego coraz bardziej ciągnie mnie do Ruby i właśnie dlatego nie mam najmniejszego zainteresowania w np. Javie.
Pewnie, mógłbym pracować na Windowsie pisząc enterprise software w Javie wspomagając się CVS-em. Ale jaka z tego przyjemność? Potrzebuję korzystać z przyjemnych, kreatywnych narzędzi jeśli mam tworzyć przyjemny i kreatywny software.
Nie będę za bardzo hejtował Subversion, ale trochę Ciebie nie rozumiem — skoro sam twierdzisz, że Git jest „lepszy”, to czemu korzystasz z „dobrego” SVN ;) ?
PS. Wybacz mi, że po raz kolejny zrobiłem długi offtopic :)
Kwiecień
Miałem na myśli raczej Linuksa. OSXa traktuję jak Linuksa dla leniwych, którym nie chce się posiedzieć nad dobrą konfiguracją swojego środowiska i wolą gotowe rozwiązanie. Oczywiście moja opinia może być stronnicza, ale mnie właśnie odrzuca od Apple 1) Cena 2) Sprzęt, jaki dostaję za tą cenę i porównywalna rakieta, jaką mógłbym złożyć w zwykłym PC 3) To, że ktoś decyduje za mnie, jakie ustawienia są wygodniejsze. Aczkolwiek niech będzie kompromis – każdy korzysta z tego, co mu się podoba i kropka. Co do porównania Git vs SVN – ja skłaniałbym się raczej w stronę tego, że są to „inne” VCSy, nie lepsze, ani gorsze. Po prostu mają zupełnie inne przeznaczenie, o czym już pisałem.
Praca na Windowsie nie jest aż taka straszna – instalujesz Cygwina i da się żyć. ;] No i nie przesadzaj – Java z CVSem to chyba za karę. ;] No i przy okazji – każde narzędzie jest kreatywne, zależy to tylko od użytkownika.
Jeśli chodzi o offtopic – nie ma problemu, od tego są właśnie komentarze, żeby dyskutować. Przecież nikt Cię tu nie zbanuje za wypowiadanie własnych, nawet kontrowersyjnych opinii. Oczywiście dyskusja musi prezentować pewien poziom, ale o to się z Twojej strony nie martwię. ;]
TortoiseSVN- Problem z odświeżaniem ikon statusu
Ja także zauważyłem, że mało kto dobrze zna SVN a większość problemów jest wywołana jego nieznajomością. Co do gita to spróbuj się pobawić z rebase na commitach pobranych przez resztę zespołu, będzie chaos 2x większy niż ten możliwy w SVN. Co do szybkości tworzenia branchy, to tak po prawdzie różnica pomiędzy 10s a 30s nie jest zbyt duża…
Największym plusem Gita jest szybkość działania (tak wiem, powyżej napisałem że nie jest aż tak duża) oraz lokalne repozytorium, niestety nie jestem jakimś ekspertem od Git, przynajmniej na razie :) Ciągle nie natrafiłem w praktyce na różicę pomiędzy rewizją a ‘zmianą’.
PS. prywatnie też korzystam z GIT. Zacząłem z niego korzystać gdyż SVN w konsoli za bardzo mnie irytował. Po jakimś czasie, odkryłem ^/ w SVN dzięki czemu narzekam na ten system naprawdę dużo mniej :)
Czyli przyjmujesz podobną postawę do mnie – ja korzystam z SVN do własnych projektów, nie widzę problemu z Gitem dla większych / bardziej zespołowych.
BTW. Co masz na myśli pisząc o „^/”? Nie pamiętam, co to oznaczało, a nie za bardzo chce mi się googlać. ;]
Konferencja Falsy Values 2011