Postaram się przekazać kilka wskazówek popartych moim osobistym doświadczeniem.
Jeden z moich kolegów z zespołu, choć ma doświadczenie, tak naprawdę nie rozumie SVN. Oczywiście puste obszary na jego mapie mentalnej przedstawiające oceany SVN powodują, że przyjmuje raczej dziwne wzorce użytkowania.
Na przykład zadeklarował zasadę „1 zatwierdzenie SVN dziennie na programistę”, ponieważ w przeciwnym razie „serwerowi wkrótce zabraknie miejsca na dysku”. Kiedy wyjaśniłem mu, że SVN to delty, a nie pełne kopie, odpowiedział wątpliwie i nawet dzisiaj nie jestem całkowicie pewien, czy rozumie, co to znaczy.
Nawet jeśli miejsce na dysku stanowi problem, zawsze możesz zatwierdzić wiele plików naraz, więc myślę, że sugeruje niewłaściwe rozwiązanie. Co więcej, można marnować dużo miejsca, sprawdzając duże pliki binarne, ponieważ SVN nie przechowuje delt dla plików binarnych. Jedno zameldowanie dziennie jest również złe, ponieważ zmusza do dokonania zmian, które nie pasują do siebie, np. W przypadku naprawy więcej niż jednego błędu dziennie.
Rozwiązaniem, które przyjęliśmy w naszej firmie, jest filtr odrzucający wszelkie zatwierdzenia zawierające pliki binarne. Możemy wymusić zatwierdzenie, używając specjalnego słowa kluczowego w komentarzu do zameldowania (musimy pokazać SVN, że wiemy, co robimy). Raz na rok lub dwa kierownik projektu archiwizuje stare oddziały i usuwa je z repozytorium. Dzięki tej strategii nie mamy problemów z przestrzenią, o których wiem (nasze repozytorium obsługuje kilka różnych projektów i zawiera ponad 100 000 wersji).
Podsumowując, możesz mu powiedzieć, że zgadzasz się z nim, że miejsce na dysku jest ważną kwestią, ale z drugiej strony
- znaczenie meldowań związanych z funkcjami zamiast jednego monolitycznego codziennego meldowania;
- fakt, że wpisując jeden duży plik binarny dziennie, i tak można zapełnić dysk.
Następnie możesz zasugerować spotkanie (ewentualnie z innymi programistami lub administratorami systemu), aby omówić strategie kontrolowania wykorzystania miejsca na dysku (np. Filtry plików binarnych, regularne tworzenie kopii zapasowych i czyszczenie starych nieużywanych gałęzi).
Mieliśmy również ostry spór o to, czy dołączyć konfigurację Eclipse .project do SVN. Mój kolega z drużyny nalegał, że powinniśmy, chociaż spowodowało to wiele bezcelowych konfliktów. Byłem przeciwny przechowywaniu indywidualnych plików konfiguracyjnych programistów w SVN. W końcu okazało się, że mój kolega z zespołu miał praktykę ponownego sprawdzania całego drzewa źródłowego po każdym zatwierdzeniu, aby upewnić się, że „kod przypisany do repozytorium działa”. Z tego powodu był tak nieugięty w utrzymywaniu konfiguracji projektu w SVN - więc łatwo byłoby ponownie zaimportować projekt. Kiedy wyjaśniłem, że zatwierdzanie synchronizuje kopię roboczą ze zdalnym bajtem po bajcie, co sprawia, że ponowne sprawdzanie nie jest konieczne, mój kolega z zespołu ponownie odpowiedział wątpliwości i ostatecznie zignorował cały problem jako nieznaczący.
Moim zdaniem nasz zespół marnuje czas, rozwiązując konflikty SVN w plikach konfiguracyjnych projektu, które zawierają tylko ustawienia specyficzne dla programistów, których wcale nie trzeba udostępniać SCM. Cały ten bałagan, ponieważ ktoś dostosował proces wokół błędnych założeń.
Czy korzystasz z serwera kompilacji? Mamy serwer kompilacji, który sprawdza kompletny projekt i kompiluje go co noc. Następnego ranka testerzy mają gotowego do przetestowania instalatora produktu (jeśli kompilacja główna działała poprawnie), a my (programiści) mamy raport kompilacji ze wszystkimi ostrzeżeniami (i ewentualnymi błędami). Oczywiście musisz skonfigurować standardowe pliki konfiguracyjne dla serwera kompilacji i zarejestrować je. Każdy programista może następnie sprawdzić je wraz z resztą projektu, ale nie mogą wprowadzać żadnych zmian lokalnych.
W tym scenariuszu zasygnalizowałeś jego potrzebę sprawdzenia kompletnego projektu i zbudowania go w dowolnym momencie. Unikasz także spędzania czasu na scalaniu zmian, które nie powinny były być sprawdzane przede wszystkim, ponieważ nie są one częścią produktu: produkt jest kompilacją główną i należy go utrzymywać w czystości. Jeśli ktoś zepsuje kompilację główną (np. Sprawdzając własny plik .project), możesz cofnąć zmiany lub zmusić programistę do rozwiązania problemu.
Może jeśli ponownie poruszy ten problem, możesz ponownie zasugerować spotkanie (być może z innymi programistami) i znaleźć wspólną strategię.
Jak przekonać członka drużyny, który uważa się za starszego, aby lepiej zrozumieć podstawy SVN?
Myślę, że najlepszą strategią byłoby uniknięcie sprowadzania konfliktu na poziom osobisty, a raczej omawianie bieżących problemów i możliwych rozwiązań. Jeśli masz wrażenie, że szuka on osobistej konfrontacji, oto kilka sugestii (ponownie z własnego doświadczenia):
- Jaka jest dynamika twojego zespołu? Czy twoi inni koledzy mają podobne doświadczenia z tym kolegą z zespołu? Istnieje wiele małych, niezbyt wyraźnych wskazówek, które zespół może przekazać jednemu ze swoich członków, aby zniechęcić do pewnych zachowań (małe dowcipy lub spostrzeżenia) i zachęcić do konstruktywnej konfrontacji (proponowanie spotkania lub nieformalne poruszenie tematu podczas przerwy na kawę ). Czasami dobry zespół może szybko odizolować niepokojący element i przywrócić go do normy.
- Jak dobre jest zarządzanie personelem? W naszej firmie mieliśmy jeden konflikt, a szef personelu musiał interweniować, aby wyjaśnić sytuację. Nie było miło, ale czasami atmosfera pracy pogarsza się tak bardzo, że sama się nie poprawi. Mam nadzieję, że to nie twoja sprawa (nie mam wrażenia, że do tej pory doszło tak daleko), ale zawsze dobrze jest wiedzieć, czy masz dobrą administrację personelu lub czy musisz samodzielnie rozwiązywać konflikty.
Dlaczego to piszę? Mówisz, że chcesz „przekonać członka drużyny, który uważa się za seniora, aby lepiej zrozumieć podstawy SVN”. Wydaje mi się, że konflikt może być zbyt osobisty. Niektórzy psychologowie utrzymują, że 70% naszej komunikacji odbywa się na poziomie emocjonalnym, jeśli ten poziom nie działa, ludzie przestają mówić o faktach, ponieważ są zbyt zajęci radzeniem sobie z emocjami.
Więc oprócz wyjaśnienia swoich punktów, możesz również spróbować zrobić coś, aby poprawić komunikację. Zaproszenie na kawę lub wspólną przerwę na lunch, krótka rozmowa na temat niezwiązany z pracą itp. Może poprawić komunikację i przywrócić uwagę kolegi na ważne fakty , które powinien zrozumieć. Jeśli zaakceptuje tego rodzaju komunikację, być może konflikty, które do tej pory miałeś, były związane z faktem, że nie znacie się dobrze i były pewne małe nieporozumienia, ale prawdopodobnie jest on otwarty na budowanie konstruktywnej współpracy. Jeśli odmówi, może być po jego stronie głębsza wrogość.
W tym przypadku myślę, że powinieneś poczekać, aż twoje role staną się jaśniejsze. Jeśli twój kolega z drużyny nie ma oficjalnie wyższej rangi niż twoja, nie ma sensu denerwować się twoimi próbami poprawy. Z czasem będzie musiał to zaakceptować lub zrobić z siebie głupca, jeśli będzie próbował pokazać, że wie lepiej. Jeśli ma wyższą rangę, powinieneś znaleźć sposób, aby uświadomić mu, że nie jest to przedmiotem dyskusji: twoje obserwacje mają na celu poprawę wydajności, a nie osłabienie jego pozycji, musi to być w 100% jasne. Kiedy role zostaną wyjaśnione, jeśli nadal nie może zaakceptować konstruktywnych sugestii lub krytyki, to naprawdę musi mieć problem z samooceną lub coś w tym rodzaju.
Więc jeśli wszystkie powyższe strategie zawiodą i nadal czujesz się (bardzo) sfrustrowany, obawiam się, że jedyną rozsądną rzeczą do zrobienia jest spakowanie swoich rzeczy i poszukiwanie lepszego miejsca. Doświadczyłem tego trzy lata temu i znalazłem lepszą firmę, w której jestem teraz bardzo zadowolony. Może to nie twój przypadek (mam nadzieję, że nie), ale spróbuj też zrozumieć ten punkt.
Tylko moje 2 centy.