Użyj rozproszonego systemu kontroli wersji, takiego jak git, i użyj komputera z folderami współdzielonymi do przechowywania repozytorium referencyjnego. Dlatego:
Każdy klon jest kopią zapasową
Jeśli dysk twardy serwera ulegnie awarii, każdy ma kopię gotową do wdrożenia na nowym dysku lub serwerze. Ponieważ Twoja firma nie traktuje poważnie kontroli wersji, przypuszczam, że może być prawie tak samo z kopiami zapasowymi.
Wspólne odniesienie
Posiadanie głównego repozytorium z odgałęzieniem głównym pozwala poznać wersję, która zawiera ostatnie słowo. To rozwiązuje problem: „Przetestowałeś swoje zmiany w stosunku do wersji Francka, ale czy miałeś też Johna? I jak je scaliłeś?”.
Dostarczaj bardziej komfortowo
Klient chce dziś wersji alfa? Możesz sprawdzić, czy mistrz jest wystarczająco stabilny i wysłać go. Jeśli tak nie jest i nie masz czasu, aby to naprawić, po prostu cofnij się w czasie i uzyskaj starszą, ale bardziej stabilną wersję. Nie możesz tego zrobić, jeśli masz tylko najnowszą wersję.
Cofnij się w czasie i napraw swoje błędy
Podczas ręcznego scalania wystąpiły problemy, które zobaczyłeś dopiero po kilku dniach, ale już zastąpiłeś zawartość folderów współdzielonych? Bez VSC nie masz historii, więc nie możesz łatwo wrócić do punktu, w którym możesz sprawdzić popełnione błędy i je naprawić. Kod nie jest jak obraz, jest jak film: ewoluuje w czasie. Możesz wyodrębnić zdjęcie z filmu. Nie można wyodrębnić filmu ze zdjęcia.
Łatwiejsze znajdowanie błędów
Pojawił się błąd, ale tak naprawdę nie zauważyłeś go w momencie jego wprowadzenia, więc nie możesz go naprawić, gdy kod jest „gorący”. Teraz tak naprawdę nie wiesz, która zmiana wprowadziła, więc może pochodzić z kilku różnych miejsc w kodzie. Zajmie to godziny, aby znaleźć, gdzie szukać. Dzięki git mogłeś właśnie opracować test, aby stwierdzić, czy błąd występuje w określonej wersji, i użyć, git bissect
aby znaleźć dokładne zatwierdzenie, które wprowadziło błąd. Zamiast szukać tysięcy wierszy kodu, wiesz teraz, że znajduje się on w 10 zmianach wiersza, i możesz zachować test w swoim pakiecie testowym, aby upewnić się, że błąd nie zostanie ponownie wprowadzony.
Każdy programista jest odpowiedzialny za swoją pracę
Jeśli jesteś liderem zespołu i nie masz VCS, najprawdopodobniej będziesz musiał wykonać brudną robotę, połączenia. Jeśli zrobisz to sam, prawdopodobnie nie wiesz wszystkiego o wszystkich zmianach i może wprowadzić błędy. Wręcz przeciwnie, jeśli zawsze prosisz osoby, które napisały kod, o zebranie się za każdym razem, gdy istnieje kod do scalenia, to czas, aby nie wykorzystały go do stworzenia nowego kodu.
Dzięki VCS, w prostym przepływie pracy, programista musi tylko zadbać o swoją pracę i jedno zewnętrzne źródło zmian: gałąź master. W głównej gałęzi może być 1 lub 100 osób, to samo. Aby móc wprowadzić zmiany, będzie musiał je dostosować do najnowszych zmian wprowadzonych przez innych. Wydawać by się mogło, że wypychanie kodu zajmuje więcej czasu, ale dzieje się tak, ponieważ wykonujesz scalanie, które i tak zajęłoby trochę czasu.
Różnica polega na tym, że scalanie jest wykonywane przez osobę, która dokonała zmian, która najlepiej zna ten kod, ponieważ go napisał.
Kto napisał ten kod?
Tutaj jest ten błąd, ale kto napisał ten konkretny wiersz kodu? Trudno to zapamiętać, zwłaszcza jeśli projekt trwa kilka miesięcy. git blame
powiedziałbym ci, kto i kiedy napisano ten wiersz, więc możesz zapytać właściwą osobę, a nie ma „Nie pamiętam, żeby to pisać”.
Projekt staje się większy
Klient chce więcej funkcji, a jesteś zespołem zbyt małym, potrzebujesz innego programisty. Jak zarządzać zwiększoną złożonością scalania bez VSC?
Pilne zmiany
Klient zadzwonił i poprosił o krytyczną naprawę błędu w produkcji, ale pracujesz nad nową funkcją. Po prostu git stash
odłóż zmiany na bok lub zatwierdz je w nowym oddziale i wypchnij zmiany, a będziesz gotowy do pracy nad pilną poprawką, bez obawy o utratę oczekującej pracy.
Działa 10 minut temu
Wprowadzasz jakieś zmiany lokalnie, a coś, co działało 10 minut temu, przestało działać. Bez VCS albo wpatrujesz się w kod, albo co najwyżej, wykonujesz kopię wersji referencyjnej i różnicujesz, aby zobaczyć, co zmieniasz. Och, czekaj, referencje zmieniły się, odkąd zacząłem działać, więc nie mogę już się różnić. I nie pomyślałem o zachowaniu nieskazitelnej kopii kodu, na którym oparłem swoje zmiany.
Dzięki VCS po prostu robisz coś takiego git diff
od razu, a Twoja zmiana jest porównywana z odpowiednią wersją kodu, na którym się opierasz.
Muszę przechowywać dzienniki debugowania
Jesteś złym facetem i nie używasz rejestrowania? Musiałeś posypać printf
wszystkie bazy kodem, dopóki nie znalazłeś wszystkich kawałków tego paskudnego robaka? Teraz znalazłeś jeden, naprawiłeś go, ale chcesz zachować starannie spreparowany kod debugowania, aby naprawić pozostałe problemy.
Bez VCS musisz skopiować pliki, usunąć kod debugowania (który może powodować błędy edycyjne), wypchnąć i odłożyć pliki z kopii zapasowej. Och, ale wygląda na to, że mimo to dostał się jakiś kod debugujący.
Dzięki git po prostu wybierasz git add --patch
kilka wierszy kodu, które chcesz umieścić w swoim zatwierdzeniu, i możesz zatwierdzić tylko to. Następnie wznawiasz pracę i nadal masz kod debugowania. Nie trzeba było dotykać kodu, więc nie wystąpił błąd kopiowania / wklejania.
Wielka kula błota
Bez VCS ludzie pracują po swojej stronie i wprowadzają wiele zmian, czasem niezwiązanych. Gdy jest za dużo kodu do sprawdzenia, trudno jest znaleźć błąd.
VCS pozwoli ci dokonywać małych, przyrostowych zmian i da ci dziennik zmian. Dziennik zmian jest niezbędny: ludzie muszą powiedzieć, dlaczego dokonują zmiany, a nie jaka jest zmiana (na jakie pytanie odpowiada sama zmiana kodu). Oznacza to, że na przykład podczas sprawdzania kodu nowej funkcji nie będziesz musiał czytać wielu niepowiązanych zmian mieszanych, takich jak niepowiązane poprawki błędów. Pomaga to skupić się na kodzie, na którym Ci zależy.
Jeśli dam ci 100 ziemniaków 1 na 1, a jeden jest zgniły, natychmiast go znajdziesz. Teraz, jeśli zrzucę 100 ziemniaków przed sobą i poproszę o znalezienie zgniłego, to nie to samo zadanie.
Wcięcie
Mam nadzieję, że masz dobrą politykę stylu kodowania, w przeciwnym razie zmiany wcięć doprowadzą Cię do szaleństwa, jeśli scalisz ręcznie. Jasne, możesz zignorować białe znaki w zmianach (ale nie w językach, w których liczy się wcięcie, takich jak Python). Ale wtedy trudno ci będzie odczytać dziwnie wyglądający kod.
Jesteś liderem projektu
Jeśli jesteś liderem, oznacza to, że obwinisz się, jeśli coś nie zadziała. Jeśli nie możesz pogodzić się z sytuacją, ponieważ twój szef wciąż nie rozumie, że warto użyć odpowiedniego narzędzia do właściwej pracy, to przynajmniej odmówiłbym zostania liderem przewidywalnej porażki.