git status šliaužia per SSHFS su VPN: perkelkite darbą
Didelis failas nusikopijuoja greitai, o git status šliaužia. Jei medis yra SSHFS su VPN, kaina yra kelionės pirmyn ir atgal vienam failui, o ne pralaidumas. Perkelkite darbą.
Nukopijuokite 200 MB failą ir jis skrieja. Paleiskite git status tame pačiame kataloge ir laukimas bus toks ilgas, kad norėsis pereiti prie ko nors kito. Šie du pastebėjimai neprieštarauja vienas kitam, nes masinis perdavimas matuoja pralaidumą, o Git matuoja, kiek mažų failų sistemos klausimų jis gali užduoti per sekundę, ir prijungtas nuotolinis medis kiekvieną klausimą paverčia kelione pirmyn ir atgal. VPN derinimas nepataisys neteisingos formos darbo krūvio.
Kodėl status yra netinkamas matas
Git turi sužinoti apie daug failų: kurie pakeisti, kurie nėra sekami ir ar podėlyje esantys indekso duomenys dar atitinka tai, kas yra diske. Per SSHFS kiekvienas iš tų pastebėjimų gali būti tinklo operacija. Darbo vienetas čia yra failų skaičius, o ne megabaitai.
Štai kodėl pirmasis status po klonavimo lėtas, ir štai kodėl vėlesni gali būti dar lėtesni medyje, pilname kompiliavimo išvesties. Nesekamų failų skenavimas eina per katalogus, kurie jums galbūt nerūpi, ir kiekvienas žingsnis yra dar viena užklausa per ryšį. 40 ms kelyje medis su keliais tūkstančiais įrašų tampa keliais tūkstančiais kelionių pirmyn ir atgal. Šiai aritmetikai patvirtinti nereikia paketų fiksavimo.
Atsisiuntimo matas sako, kad ryšys geras; jis nieko nesako apie tai, ar tūkstantis mažų skaitymų baigsis šiandien po pietų.
Perkelkite darbo medį, o ne derinimo rankenėles
Vietinis klonas padeda darbo medį, indeksą ir Git operacijas į tą pačią mašiną. Pull tampa matomu tinklo žingsniu, o ne kiekvienas failo patikrinimas.
Tai tinka visada, kai kūrėjas gali laikyti reikiamą šaltinį vietoje, o taip būna dažniausiai. Tai taip pat paaštrina ribą tarp commit ir diegimo, nes vietinio failo redagavimas nebekeičia atsitiktinai veikiančios nuotolinės paslaugos; pakeitimą reikia išstumti ir įdiegti kaip viską kitą. Kaina yra tai, kad kodas egzistuoja dviejose vietose, todėl nuspręskite, kuri kopija yra įgaliota ir kaip skubus taisymas serveryje grįžta į saugyklą. Tas pokalbis pigesnis nei status komanda, kurios niekas nenori paleisti.
Jei darbo erdvė turi likti nuotolinė, paleiskite Git ten
Kartais darbo erdvės perkelti negalima: kompiliavimui reikia tos aplinkos, duomenys per dideli arba politika laiko šaltinį pagrindiniame kompiuteryje. Tada paleiskite Git ir atitinkamus kūrimo įrankius šalia failų, per patvirtintą nuotolinį apvalkalą arba nuotolinės kūrimo aplinkos terpę. Redaktorius gali likti nešiojamajame kompiuteryje, kol jo foninė dalis dirba prie darbo medžio.
Brangios operacijos tada vyksta vietoje nuotoliniame kompiuteryje, o tinklas gabena redaktoriaus srautą, o ne tūkstančius stat kvietimų. Tai tas pats pataisymas kaip vietinis klonas, išreikštas kaip diegimo pasirinkimas, o ne migracija.
Sinchronizavimas yra darbo eiga su savininkais, o ne podėlis
Sinchronizuota darbo erdvė gali sumažinti pasikartojančius nuotolinius skaitymus, bet tai nėra skaidrus podėlis. Jai reikia savininko kiekvienam pakeitimui, taisyklės konfliktams ir susitarimo dėl sugeneruotų failų, kuriuos abi pusės laiko savo. Be tų taisyklių tvarka sukuria nesutarimą, o ne patogumą.
Dvipusis sinchronizatorius be jų sukuria kitą problemą nei ta, kurią išsprendė, dažniausiai sujungimą, kurio niekas negali priskirti. Venkite paleisti du Git procesus viename bendrame darbo medyje, nebent suprantate, kaip jie derinasi.
Tada derinkite ir laikykite SSH protingą
Kai tvarka teisinga, du nustatymai keičia, apie kiek failų Git turi klausti: status.showUntrackedFiles ir nesekamų podėlis už core.untrackedCache. Nė vienas nekeičia to, kiek kainuoja kiekvienas klausimas per 40 ms; jie keičia tik tai, kiek klausimų yra. Pasukite rankenėlę tik tada, kai kelionės pirmyn ir atgal yra vietinės.
Matuokite laiką komandos, kuri jus erzina, o ne samprotaukite iš mato, kuris kopijuoja vieną didelį failą, ir palikite palaikomą SSH šifravimą ramybėje. Pasenęs šifras nesutrumpina kelionės pirmyn ir atgal; jis prideda antrą problemą, kuri pergyvena pirmąją. git status nuoroda verta vieno skaitymo, nes komanda atlieka daug daugiau darbo, nei rodo jos pavadinimas.