Kopirajte fajl od 200 MB i leti. Pokrenite git status u istom direktoriju i čekanje je dovoljno dugo da prebacite pažnju na nešto drugo. Ta dva zapažanja nisu proturječna, jer masovni prijenos mjeri propusnost, a Git mjeri koliko malih pitanja o datotečnom sistemu može postaviti u sekundi, i montirano udaljeno stablo pretvara svako pitanje u kružno putovanje. Podešavanje VPN-a neće popraviti pogrešno oblikovan posao.

Zašto je status pogrešno mjerilo

Git mora saznati za mnogo fajlova: koji su izmijenjeni, koji nisu praćeni i da li keširani podaci indeksa još odgovaraju onome što je na disku. Preko SSHFS-a svako od tih zapažanja može biti mrežna operacija. Jedinica rada ovdje je broj fajlova, ne megabajti.

Zato je prvi status nakon kloniranja spor i zato kasniji mogu biti još sporiji u stablu punom izlaza iz gradnje. Skeniranje nepraćenih fajlova prolazi kroz direktorije koji vas možda ne zanimaju, a svaki korak je još jedan zahtjev preko veze. Na putu od 40 ms stablo s nekoliko hiljada unosa postaje nekoliko hiljada kružnih putovanja. Nije potrebno hvatanje paketa da se potvrdi ta aritmetika.

Test brzine preuzimanja kaže da je veza dobra; ništa ne kaže o tome hoće li hiljadu malih čitanja završiti danas poslijepodne.

Premjestite radno stablo, ne dugmiće za podešavanje

Lokalni klon stavlja radno stablo, indeks i Git operacije na istu mašinu. Pull postaje vidljiv mrežni korak, umjesto da to postane svaka provjera fajla.

To odgovara kad god programer može držati potrebni izvor lokalno, a to je u većini slučajeva. Ono i izoštrava granicu između commita i objavljivanja, jer uređivanje lokalnog fajla više ne mijenja slučajno aktivnu udaljenu uslugu; promjena se mora poslati i objaviti kao i sve drugo. Cijena je da kod postoji na dva mjesta, pa odlučite koja je kopija mjerodavna i kako brza popravka na serveru vraća u repozitorij. Taj razgovor je jeftiniji od status komande koju niko ne želi pokrenuti.

Ako radni prostor mora ostati udaljen, pokrenite Git tamo

Ponekad se radni prostor ne može premjestiti: gradnja treba to okruženje, podaci su preveliki ili politika drži izvor na hostu. Tada pokrenite Git i relevantne razvojne alate pored fajlova, kroz odobreni udaljeni shell ili okruženje za udaljeni razvoj. Editor može ostati na laptopu dok njegov backend radi pored radnog stabla.

Skupi poslovi se tada događaju lokalno na udaljenom hostu, a mreža nosi saobraćaj editora umjesto hiljada stat poziva. To je isto rješenje kao lokalni klon, izraženo kao izbor objavljivanja, a ne kao migracija.

Sinhronizacija je tok rada s vlasnicima, ne keš

Sinhronizovani radni prostor može smanjiti ponovljena udaljena čitanja, ali nije prozirni keš. Potreban mu je vlasnik za svaku promjenu, pravilo za sukobe i dogovor o generisanim fajlovima koje obje strane smatraju svojim. Bez tih pravila rješenje stvara nesporazum, a ne udobnost.

Dvosmjerni sinhronizator bez njih stvara drugačiji problem od onog koji je riješio, obično spajanje koje niko ne može pripisati. Izbjegavajte pokretanje dva Git procesa nad jednim dijeljenim radnim stablom, osim ako razumijete kako se koordiniraju.

Zatim podesite i održite SSH razumnim

Kad je raspored ispravan, dvije postavke mijenjaju o koliko fajlova Git mora pitati: status.showUntrackedFiles i keš nepraćenih iza core.untrackedCache. Nijedna ne mijenja cijenu svakog pitanja kroz 40 ms; mijenjaju samo koliko pitanja ima. Okrenite dugme tek kad kružna putovanja postanu lokalna.

Izmjerite vrijeme komande koja vas nervira umjesto da zaključujete iz testa koji kopira jedan veliki fajl, i ostavite podržano SSH šifriranje na miru. Zastarjeli šifar ne skraćuje kružno putovanje; dodaje drugi problem koji nadživljava prvi. Referenca za git status vrijedi jedno čitanje, jer komanda radi mnogo više posla nego što njeno ime sugeriše.

Povezani članci