2012-05-12 12 views
28

Chciałbym, jeśli ktoś mógłby podać mi więcej szczegółów dotyczących pracy z git i zdalnymi repozytoriami. Nie pracowałem jeszcze ze zdalnymi repozytoriami.Czy naciskasz każdy pojedynczy commit?

Do lokalnego repozytorium wprowadzane są mniejsze zmiany, które mogą nie być zbyt niszczące. Co jest przekazywane do zdalnego repozytorium? Każde lokalne zatwierdzenie? Albo ogólną pracę, która została wykonana, a następnie połączona z ogólnymi pracami innych? Myślę, że dziennik zdalnego repozytorium musi być mylący, jeśli każdy popycha każde zatwierdzenie.

+2

Inną dużą zaletą zdalnego repozytorium (lub scentralizowanego, jeśli nie korzysta z Git) jest tworzenie kopii zapasowych - w przypadku uszkodzenia lokalnej pamięci masowej. Z perspektywy tworzenia kopii zapasowej częste wypychania minimalizują potencjalną utratę danych. –

Odpowiedz

25

Przesuwanie i przeciąganie ze zdalnego repozytorium nie jest tak ważne jak lokalne zatwierdzenia. Zazwyczaj wystarczy popychanie i ciągnięcie kilka razy dziennie. Jak powiedział @earlonrails, częstsze wypychania oznacza mniejsze prawdopodobieństwo sprzecznych zmian, ale zazwyczaj nie jest to wielka sprawa.

Pomyśl o tym w ten sposób, zobowiązując się do lokalnego repozytorium, mówisz w zasadzie "Ufam temu kodowi, jest kompletny, działa, przetestowałem go, jestem gotowy, aby inni mogli go zobaczyć". Jeśli po każdym zatwierdzeniu chcesz wysłać do zdalnego reagowania, to jest w porządku, ale tak długo, jak robisz to regularnie, tak naprawdę nie ma to znaczenia.

Lokalne repozytoria mają na celu śledzenie zmian w celu ochrony wykonywanej pracy. Zdalne repozytoria służą dystrybucji pracy wszystkim członkom zespołu i śledzeniu zmian wszystkich osób. Twoi koledzy z drużyny potrzebują dostępu do twojego kodu, ale zazwyczaj nie jest to pilne i możesz czekać do końca dnia lub kiedy masz ochotę na pushowanie.

+11

Nie zgadzam się z twoim oświadczeniem o integralności lokalnych zatwierdzeń. Często zdarza się, że praca w toku działa lokalnie w moim oddziale, lub w ad-hoc, z zamiarem ponownego rozłożenia i oczyszczenia (zgniatanie, reword, reorder, itp.) Mojego oddziału przed wypychaniem. IMHO to twój push do pilota, który wyraża zaangażowanie w jakość i finalizację twojego zestawu zmian. –

+5

Co się stanie, jeśli komputer deweloperski z lokalnym repo wystąpi? –

+0

W dawnych czasach przed githubem uważam, że najlepszą praktyką było często wprowadzanie kontroli wersji. Zapobiega to również utracie kodu, jeśli komputer/laptop ulegnie awarii. ale tak. Nie naciskałem tak często, odkąd zacząłem używać gita. –

14

Możesz naciskać, aby zdalnie obsługiwać telefon. Jedynym problemem związanym z przepychaniem wiązki w tym samym czasie jest to, że konieczne może być scalenie większej liczby konfliktów z bardziej dotkniętymi plikami. Jeśli jesteś nowy w git, polecam git ready.

Remotes działają tak samo jak lokalne repozytorium, ale trzeba grać dobrze z innymi. Jeśli inne osoby naciskają na zdalne, zanim popchniesz. Potem ich zmiany będą musiały zostać wyciągnięte przez ciebie, zanim będziesz mógł naciskać. Jeśli oboje dotkniecie tego samego pliku, ponieważ ich zmiana była na początku, musicie scalić obie zmiany razem.

+2

"musisz grać dobrze z innymi" - Rozumiem, to jest sedno tego tematu. Niewiele osób jest zainteresowanych widząc każdą niewielką zmianę, którą wprowadziłem. – rynd

+0

Na razie polecam narzędzie do sprawdzania kodu, git diff, lub gitx i gitk. Oto post na temat narzędzi do przeglądu kodu dla git. http://stackoverflow.com/questions/3713103/best-code-review-tool-for-git/10434975#10434975 – earlonrails

7

Próbuję przesłać każdy lokalny commit, jak to tylko możliwe (używam Git). Rzadko mam lokalnie 2 lub więcej zatwierdzeń. W przeciwnym razie istnieje ryzyko konfliktu, który nie jest tak przyjemny do rozwiązania.

Wolę używać rebase zamiast scalania, aby historia była bardziej linearna. Jeśli mam 2 zatwierdzenia A i B (B jest starsze) lokalnie, a B jest w konflikcie z nadchodzącymi zmianami, po rozwiązaniu problemów z przebiciem muszę sprawdzić B, sprawdzić kompilację, może przeprowadzić testy, a dopiero potem przełączyć się na A i pchnąć to wszystko .

Dlatego wolę wypchnąć wszystko, co mam, tak szybko jak to możliwe.

+0

Czy * naprawdę * zawsze pracujesz nad tym samym kodem co inni, tak, że wystarczy jedno lub dwa zatwierdzenia, aby wprowadzić konflikt, który musisz rozwiązać? –

+1

Nie zawsze, ale okresowo taka sytuacja ma miejsce (nie mogę tego powiedzieć bardzo często), a to jest denerwujące, więc wolę tego unikać. 90% wszystkich konfliktów spowodowanych jest importem java. –