Dejme tomu bude potřeba udělat zásah do strého projektu, doma stáhnu, udělám opravy, push na GitHub. Ovšem v práci pak zjistím, že před X měsíci jsem tohle už taky řešil a jen nenahrál na server. Jde to sloučit, nebo jak na to Git upozorní - předpokládám, že zařve a je to rozumně řešitelné.
Záleží na tom, jestli tu změnu máte commitnutou nebo ne, v jakém branchi a jestli tam máte i jiné změny. Pokud vyvíjíte sám, asi nebudete moc používat branche, budete úpravy průběžně commitovat a průběžně synchronizovat s „centrálním“ repository – pak takovýhle případ nemůže nastat. Může nastat případ, že budete mít na obou místech různý poslední commit (nebo několik posledních commitů). Pak na jedné straně dáte push commitů do centrálního repository, na druhé straně dáte pull a řeknete, co se má udělat se změnami – buď rebase, který dá ty vaše commity bokem, stáhne branch ze vzdáleného repository a pak ty vaše commity, co dal bokem, přeskládá, jako by vznikly až na konci toho vzdáleného branche. A nebo zvolíte řešení změn pomocí merge, který ponechá ty dvě větve tak jak jsou, a na konci je jedním commitem spojí do jedné větve.
Nebylo by lepší na vývoj z domu mít druhý účet a skládat to jako od dvou vývojářů? Má to nějaké výhody, nebo je to úplný nesmysl?
Z hlediska workflow a práce s commity git nijak neřeší, zda je to od jednoho vývojáře nebo od více. Z pohledu gitu je to tak, že prostě máte dva různé commity, které chcete dostat do jednoho repository. Protože upravují ten stejný soubor, je potřeba vyřešit případné konflikty – jednoznačné věci git zvládne vyřešit sám, a pokud by tam byl skutečný konflikt, tj. různé varianty kódu, budete konflikt muset vyřešit ručně.
A nakonec, u webových projektů, se mi prostě nelíbí představa mamutí složky .git na webserveru. Jistě, můžu zakázat přístup do složky, ale... Navíc jak správně řešit když samostatně vyvíjím např. knihovnu pro DB, prezentační vrstvu (hromada SASSy šablon + kompilované styly), hodilo by se spíš řešit Git pro jednotlivé komponenty a pak jenom poskládat hotový projekt z aktuálních verzí. Jak k tomu přistupovat? Nebo prostě .git pro každý web a případné knihovny prostě kopírovat...
Na webovém serveru byste neměl vyvíjet, takže mít tam složku
.git je zbytečné. Ani byste neměl řešit aktualizaci zdrojáků na serveru přes git – aktualizace v gitu není atomická, tj. v průběhu aktualizace byste měl některé soubory nové a některé staré, takže by aplikace nejspíš nefungovala správně.
Lepší je mít v rámci vývoje nějakou fázi „sestavení aplikace“, která posbírá potřebné soubory, případně je upraví (mimifikuje, zkomprimuje, validuje apod.) a sestaví z toho distribuční balíček, který nahrajete na webový server. Balíček tam rozbalíte do nového adresáře a pak přesměrujete symbolický link ze staré verze na novou. Tím přesměrujete aplikaci atomicky ze staré verze na novou – v jednom okamžiku se ještě používá stará, v dalším nová. Samozřejmě to neřeší případ, kdy si webový prohlížeč stahuje různé soubory (může stáhnou jeden skript ze staré verze a další z nové), ale to se zase řeší jiným způsobem (obvykle verzováním skriptů a stylů). Díky tomu symlinku také máte možnost vrátit se hned zpět k předchozí verzi, pokud by se ukázalo, že v té nové je chyba.