Pri hraní s git
, Niekedy vyskúšam veci a potom zruším príkazy, ktoré trvajú príliš dlho (napr. Niektoré git svn
príkazy, ktoré visia počas problémov so sieťou). Toto ma prinútilo premýšľať:
Je vždy bezpečné násilne zrušiť príkaz (Ctrl-C alebo kill
)? Čo ak dôjde k zlyhaniu príkazu (nedostatok pamäte, chyba, problém so sieťou / FS)? Sú zmeny úložiska „transakčné“ v tom zmysle, že neúplné zmeny sa „vrátia späť“ (napríklad v súborovom systéme verzovania)? Alebo v takom prípade riskujem poškodenie úložiska?
Som si istý, že inteligentní ľudia pracujúci na gite to museli vziať do úvahy, napriek tomu som v gitovej príručke ani online nenašiel žiadne informácie.
odpovede:
9 pre odpoveď č. 1Úložisko je úplne transakčné, áno.
Pracovný strom je takmer transakčný, ale existujeje rohový prípad, ktorý sa nedá ľahko vyriešiť. Služba Checkout vykoná všetky potrebné kontroly a zapíše nový obsah do dočasných súborov a v priebehu času sa nič nezmení, ak ho prerušíte. Potom sa však súbory premenujú na strom. jeden po druhom a nakoniec aktualizuje HEAD odkaz a prerušenie v tejto fáze vás môže nechať s čiastočnými zmenami v strome. Neexistuje žiadne hromadné premenovanie, ktoré by to umožňovalo atómovo.