Já se snažím software vyvíjet tak, že jde kdykoliv vydat. Aplikace je po každém commitu stabilní a plně funkční. Tohle je obzvlášť důležité, pokud na projektu pracuje víc lidí. Pokud něco rozbijete, tak tím téměř vždy blokujete ostatní. Navíc můžete zapomenout na to, že jste něco ještě chtěli opravit.
Tohle pravidlo je velmi důležité u refaktoringu nebo při změně API. Měníte nějakou funkci, která je volaná z mnoha míst? Ve stejném commitu změňte i všechna volání. Je volání hodně a chcete commit rozdělit, aby byly změny přehlednější? To je chvályhodné. Rozdělte ho v tom případě na tři:
Pokud je měněná funkce veřejná a vy nemáte pod kontrolou všechna místa, ze kterých se volá, tak mezi prvním a třetím bodem může být třeba měsíc nebo rok. Často je pak lepší udělat změnu zpětně kompatibilní i za cenu kompromisu.
Pokud smažete všechna volání nějaké funkce, tak byste obvykle měli smazat i tuto funkci. Neplatí to vždy – pokud např. chcete mít metody, které z objektu vytáhnou jeho jednotlivé vlastnosti, tak metodu nesmažete jen proto, že ji zrovna nikdo nevolá. Zvažte ale, jestli takové metody opravdu pro všechny vlastnosti potřebujete.
Pravidlo samozřejmě platí nejenom pro PHP. Do HTML nesmíte přidat odkaz, který nikam nevede. V JavaScriptu nesmíte použít konstrukci, která nefunguje ve všech podporovaných prohlížečích.
Než někam jdete, tak odevzdejte změny, které jste provedli. Ostatní můžou váš kód potřebovat nebo ho chtít upravit. To může být v rozporu s požadavkem na udržení stabilního repozitáře. V tom případě změny commitněte do branche. Snažte se práci ale spíš organizovat tak, aby to byla posloupnost malých, snadno pochopitelných změn než jedna velká změna jednou za čas. I z velké změny se dá obvykle vyčlenit několik stabilních přípravných fází.
K dodržování tohoto pravidla mi mimojiné pomáhá to, že se před každým commitem podívám na diff toho, co odevzdávám. Občas si do kódu při vývoji přidám např. sleep(1)
, abych nasimuloval chování na pomalé síti, a diff mi pomáhá v tom, abych ho nezapomněl zase odstranit.
Diskuse je zrušena z důvodu spamu.