Kā Git paraugprakse man ietaupīja vairākas stundas ilgas pārstrukturēšanas

Nesen es strādāju pie uzdevuma, lai uzlabotu sertifikātu NodeJS lietojumprogrammai. Pēdējoreiz tas tika skarts pirms diviem gadiem, lai uzlabotu funkciju. Jebkurai šai lietotnei aktuālajai problēmai būs nepieciešama tūlītēja uzmanība, lai gan lietotne tika izmantota tikai iekšēji.

Lietotne ir veca. Core-NodeJS-Infra moduļi nav atjaunināti vairāk nekā divus gadus. Pakārtotie pakalpojumi ir novecojuši. Tiek mainīts veids, kā mēs saucam pakārtotos pakalpojumus. Stingrais termiņš ir ķirsis uz kūkas. Es zināju, ka tas būs jābrauc ar amerikāņu kalniņiem.

Trīs dienas pavadīju, lai palaistu lietotni.

Infra moduļi ir atjaunināti? Pārbaudiet.

Pakārtotie pakalpojumi darbojas labi? Pārbaudiet.

UI plūsmas darbojas labi? Pārbaudiet.

Kāds no mūsu komandas biedriem pirms gada bija pieskāries jaunināšanas lietotnei. Viņš norādīja, ka repo, no kurienes es dakšņoju, pats ir dakšveida repo. Kāda cita komanda bija strādājusi pie šī repo, un pēc tam mūsu komanda strādāja pie sākotnējā repo, sākot no šī brīža, bet mans komandas loceklis nezina, no kura brīža. Tātad tas bija mazliet haoss!

Mums ir rīks “Īpašumtiesības”, kas parāda pareizo repo, un tas man “meloja”. Tātad situācija bija šāda:

Forkception

Jā, tā bija Forkception! WTF un FML bija pirmās divas domas, kas man ienāca prātā. Man vajadzēja strādāt pie tiešā repo, bet tā vietā es strādāju pie dakšas, kas bija apstājusies. Cik stulbi no manis!

Pirmā doma - manas trīs darba dienas ir izšķērdētas, un man jāsāk svaigi.

Otrā doma? Ļaujiet man pajautāt vecajam draugam Git. Viņš man ļoti ilgi palīdzēja.

Es - “Ei Git? Es esmu dziļas nepatikšanās, un man ir nepieciešama jūsu palīdzība, lai atrisinātu šo problēmu. ”

Git - “Ei! Ok, tāpēc mums jāsāk no tā, kas notiek tiešraidē. Izveidojiet jaunu filiāli, ko sauc par jaunināšanu, un norādiet šo filiāli uz aktīvo kodu. Šim nolūkam varat izmantot atiestatīšanu. ”

Es - “Labi, es darīšu”.

Šobrīd situācija izskatās šāda.

Git funkciju izmantošana

Git - “Mums jāzina, kas mainījās starp attīstību un jaunināšanu. Vai varat uzskaitīt failus, kas atšķiras no jaunināšanas un izstrādes? Pārbaudiet šos failus atsevišķi un noskaidrojiet, kādas izmaiņas tur bija. ”

Es - “Forši. Es redzu trīs veidu izmaiņas. Ir pakalpojums S1, uz kuru man jāzvana savādāk. Ir pakalpojums S2, kas man jāzvana, izmantojot citu parametru. Ir pakalpojums S3, kurš man jāzvana, izmantojot dažādus parametrus. Es arī redzu, ka jaunināšanas filiālē ir fails pack.json, kurā ir jau daži jauninātie pakotnes. Tāpēc jāmaina tikai daži iepakojumi. ”

Git - “Satriecoši, ka jūs nodalījāt izmaiņas. Tagad parādiet man jūsu attīstītās nozares Git žurnālu. Es ceru, ka esat ievērojis dažas pamata Git prakses, piemēram, vienmēr katrā versijā ir iebūvēts kods. Apņemšanās ziņojumā jāattēlo tas, ko esat mainījis. ”

Git log on attīstīt filiāli

Es - “Jā, man ir pavisam četras saistības attīstības nozarē. Viena apņemšanās bija padarīt projektu būvējamu. Katram no trim pakalpojumu zvaniem ir viens. ”

Git - “perfekti! Liekas, ka jūs esat pareizi ievērojis labāko praksi. Sāksim ar projekta stabilizēšanu, atjauninot paketijs.json. Izrakstīšanās uz jaunināšanas atzaru un izgatavot package.json - pack-copy.json dublikātu. Tagad, izmantojot Git aizstāt, jauniniet / package.json ar jaunattīstības / package.json un palaidiet diferenciāli starp package.json un package-copy.json. Tā kā tiešajā kodā daži no pakotnēm jau ir mainīti, un tam ir dažādas versijas, jums būs jāveic jaunināšana, apskatot dif.

Projekta uzlabošana

Es - “Ļaujiet man izmēģināt to. Ok, tā tiek būvēta un darbojas. ”

Git - “Satriecoši! Tagad darbosimies pie pakalpojumu zvaniem. Es redzu, ka jums ir viena apņemšanās par visām pakalpojumu zvana izmaiņām izstrādes nozarē. Laiks ķiršu izvēlēties. Izvēlieties no vissarežģītākā dienesta zvana līdz vissarežģītākajam servisa zvanam. Izvēlieties, apvienojiet un risiniet konfliktus. Pēc katras ķiršu izvēles un pirms katras saistības pārliecinieties, vai projekts ir būvējams. ”

Es - “S1 izdarīts. S2 izdarīts. S3 darīts. Paldies, Git ”

Git - “Jūs esat laipni gaidīti. Bet jūs esat palīdzējuši sev, sekojot Git izdarīšanas praksei un neuzskatu Git par vienkāršu kodu glabāšanu. ”

Ko es šeit izdarīju?

Apņemties veikt izmaiņas

Uz brīdi paņemiet pauzi un padomājiet, vai šīm izmaiņām vajadzētu būt saistībām. Apņemšanās, kas saka, ka “pārmaiņas: service-s1 galapunkti” un service-s2 izmaiņas, radītu tikai neskaidrības.

Neuzņemieties daļēji paveikto darbu

Mēs bieži esam dzirdējuši mantru “apņemieties agri, apņemieties bieži”. Iepriekš minētajā piemērā vienam un tam pašam pakalpojumam var būt viena saistība dažādiem parametriem. To sauc par desu gatavošanu.

Tomēr es personīgi skvošu savas mazās saistības, izmantojot interaktīvo režīmu git rebase. Tas man palīdz veikt vienas loģiskas izmaiņas, kuras var sertificēt, un tas palīdz arī uzticamam komisāram pārskatīt jūsu kodu. Tas ir daudz vēlams liela mēroga projektiem.

Pirms apņemšanās pārbaudiet savu kodu

Mums vajadzētu domāt par Git kā par valsts mašīnu, un jebkurai mašīnai jebkurā stāvoklī jābūt būvējamā stāvoklī.

Rakstiet labas saistības saistības

Šī ir vissvarīgākā daļa. Es vienmēr uz brīdi apstājos un domāju, vai pēc trim mēnešiem es varēšu saprast, kādas ir šīs saistības izmaiņas, vienkārši aplūkojot apņemšanās ziņojumu.

Secinājums

Es varēju ātri atrisināt putru. Es varētu iznākt no šī WTF un FML brīža tikai tāpēc, ka ievēroju labu praksi. Tie pastāv kāda iemesla dēļ un ir kā sāls pārtikā - to vērtību jūs apzināties tikai tad, kad tie netiek izmantoti.

Kļūdas agrāk vai vēlāk notiks neapzināti. Bet pārliecinieties, ka jūs apzināti ievērojat dažas prakses ap Gitu.

Esmu Git semantisko ziņojumu ziņojuma cienītājs, kas palīdz pārvietoties Git vēsturē. Tā kā būsim godīgi, jūs nevarat gaidīt, ka visi katram saistību ziņojumam izmantos tos pašus vārdus. Tomēr var gaidīt ziņojuma veidu.

Tas palīdz pārliecināties, ka pēc katras apņemšanās jūsu projekts var tikt uzbūvēts - tas ir patiešām noderīgi.

VSCode ir slims atbalsts Git. Ir ļoti viegli redzēt konfliktus un tos atrisināt, dažreiz veicot tikai vienu klikšķi. Skatīt zemāk redzamo piemēru

Atsauces

  • Git paraugprakse
  • Īpaši satriecoša versiju kontroles integrācija VSCode
  • Git Semantic Commit Messages
  • Git Padoms: Kā “sapludināt” noteiktus failus no citas filiāles
  • Git padoms: Git - git-cherry-pick dokumentācija
  • Git padoms: Git - git-reset dokumentācija

Īpašs paldies maniem draugiem Saurabh Rajani un Anish Dhargalkar, kuri man palīdzēja pilnveidot saturu.