Niektóre tła:git pojedynczy programista w/wielu maszynach - rebase i zobowiązuje pojawiać się dwukrotnie
- Jestem samotną deweloper pracuje w jednym miejscu.
- Używam git do kontroli wersji.
- Mam kilka komputerów, z którymi pracuję od: biura, domu i laptop
Obecnie mam centralny, gołego repozytorium na moim serwerze. Każdy komputer klonuje i przesyła zmiany do tego repozytorium. Obecnie posiadam Master oddziału i deweloper oddziału. Cała praca jest wykonywana w oddziale dev. Master to zawsze aktualny, stabilny kod produkcyjny. Zmiany mogą być zastosowane do Master w dowolnym momencie wraz ze zmianami, które zachodzą w dev.
Mój codzienny obieg składa się z:
git checkout dev
//pull in changes from remote
git pull
//make and commit changes as need throughout the day
git add -u
git commit
//these steps only happens when I know master has changed
git checkout master
git pull
git checkout dev
git rebase master //to get changes to master into dev branch
//push changes to central remote at end of day
git push
Wierzę, że to powinno być dość standardowy przepływ pracy dla jednego dewelopera.
Teraz wszystko, co jest na uboczu, w celu mojego pytania. Niedawno natknąłem się na sytuację, w której nie jestem pewien, jak właściwie postępować i jak temu zapobiec w przyszłości. Obecnie moja gałąź dev jest długotrwałą gałęzią dev, która jest głównym przeróbką części strony. W związku z tym trwa już od kilku miesięcy. Kiedy robię tę pracę, robię także małe zmiany/poprawki błędów w Master. Kiedy skończę jedną ze zmian w Master, ponownie ustawię dev na Master, aby uzyskać zmiany, a następnie popchnę je do centralnego repo. To działa dobrze.
Jednak kilka dni temu dokonałem zmiany na Mistrza - pierwsza taka zmiana za około miesiąc. Kiedy poszedłem do rebase, całe piekło wydawało się rozpaść. Konflikty scalania występowały w plikach, które nie istniały w programie Master, i ciągle otrzymywałem te same konflikty w tych samych plikach. Po spędzeniu większej części dnia próbując rozwiązać wszystkie konflikty, w końcu się poddałem.
Dziś rano poszedłem spróbować jeszcze raz, ale zanim zacząłem, przejrzałem historię projektów i odkryłem coś dziwnego. Zauważyłem, że około 15 zgłoszeń zostało powtórzonych. Pokazano wszystkie zatwierdzenia od 07.12.2012 - 08/2/2012. Potem znowu miałem te same poprawki, wszystkie z różnymi hashe SHA. Nie zauważyłem tego, dopóki nie zobaczyłem, że daty zatwierdzeń zostały wymienione w porządku chronologicznym, jak można się było spodziewać, ale potem nagle znowu wskoczył w przeszłość.
Aby rozwiązać problem, zrobiłem kolejny rebase, ale pominąłem duplikaty commitów. Kiedy to zrobiłem, wszystko działało dokładnie tak, jak oczekiwałbym bez żadnych konfliktów.
Moje pytanie brzmi: jak to się stało, że te dwa razy doszło do tego, aby zostać zrobione dwa razy i jak mogę zapobiec ponownemu wystąpieniu tego koszmaru w przyszłości? Jak sugeruje tytuł pytania, zakładam, że problem ma coś wspólnego z moim używaniem rebaseingu i pchania gałęzi opartej na rebase. Ale tak naprawdę zgaduję. Potrzebuję tylko pomocy w ustaleniu, co zrobiłem źle.
Dzięki za ten link. Jeśli rozumiem cię i link, poprawnie, ponieważ pracuję w tej samej gałęzi na wszystkich komputerach, powinienem scalać zmiany z Master zamiast przekierowywać? Czy powinienem się martwić o regularne łączenie zmian z Master? Czy powinienem to zachować, póki nie będę gotowy do połączenia oddziału dev z mistrzem? – adear11
Nie ma za co. –
Tak rozumiem ten link. To nie jedyne podejście, ale wydaje się, że działa dobrze. Gdzie używam tego podejścia, scalam dość regularnie. Wolę to, ponieważ rozwiązywanie konfliktów jest łatwiejsze, gdy chodzi o kilka drobnych konfliktów niż o jedno duże rozwiązanie konfliktu, które zwykle jest bliskie zbliżającemu się terminowi. –