Setarea contextului
Ropensci organizează ore lunare de colaborare pe o varietate de subiecte. Dar constanta este calitatea discuției care rezultă și energia reînnoită care provine din ea.
Ședința de coworking din noiembrie a salutat-o pe Stefanie Butland de la OpenCapes ca co-gazdă. Ea a împărtășit abordarea lui OpenScapes despre „Furking ca viziune asupra lumii”. Furcile din lumea software-ului open-source se referă la copii ale unui proiect open-source existent, care își adaugă propriile modificări în partea de sus a bazei de code originale. OpenCapes extinde această interpretare clasică de dezvoltare a software -ului într -o filozofie și mai deschisă de încurajare a oamenilor să ia orice lucru care funcționează în locuri noi. Lucruri precum valoarea partajării, reutilizării și remixului Cum lucrămpe lângă munca în sine. Ștefanie a invitat participanții să -și împărtășească experiențele în furculiță pentru a se adapta sau a se baza pe proiecte existente și am revenit la unele provocări practice ale forjei.
Diferitele tipuri de furci
Am identificat două tipuri diferite de furci, care au loc în contexte diferite și vor avea relații diferite cu depozitul lor din amonte pe termen lung:
-
Furcile pot fi utilizate ca punct de plecare pentru un nou proiect divergent, mai degrabă decât să pornească de la zero. În această situație, autorul furcii nu intenționează să se sincronizeze cu depozitul din amonte după furculița inițială. Prin urmare, acest tip de furculiță poate lipsi de noile caracteristici dezvoltate în amonte. Acest tip de furculiță se va întâmpla adesea atunci când copiați un șablon pentru un site web personal (un exemplu partajat de Will GEAGETY în discuțiile noastre) sau când reutilizați un proiect existent al dvs. ca placă de cazan pentru a vă construi noul proiect.
-
Furcile pot fi, de asemenea, utilizate pentru a personaliza sau regla proiectul original, într -un mod în care amonte nu poate sau nu are capacitate de abordare. În acest tip de furci, de obicei, încercăm să nu diversăm prea mult de la amonte pentru a beneficia de noi funcții și ne sincronizăm în mod regulat cu ele. Un dezavantaj major este faptul că sincronizarea va veni adesea cu conflicte git. Un exemplu în acest sens este diverse organizații care afectează bancul de lucru Carpentries pentru a personaliza aspectul materialelor lor de instruire în stilul carpentries. Persoanele care lucrează în sisteme de operare Linux, precum Debian, pot recunoaște, de asemenea, acest lucru se întâmplă atunci când proiectele open-source sunt ambalate de sistemul de operare. Pachetele Debian Debian modifică adesea unele setări sau fac modificări minore de cod pentru a îmbunătăți integrarea cu restul sistemului.
Facilitarea polenizării încrucișate între furci și în amonte
În această secțiune, ne concentrăm pe al doilea tip de furci, unde autorul furcii dorește să rămână în sincronizare cu depozitul din amonte. Am menționat că conflictele au fost un dezavantaj major al acestei abordări.
Care sunt strategiile pentru a minimiza conflictele? Și de ce este în interesul tuturor (nu numai proprietarii furculiței, ci și întreținătorii din amonte) să le minimizeze?
Simplificarea sincronizării și reducerea conflictelor GIT
Revenind la exemplul organizațiilor care a dat peste carpentries Workbench, Hugo a furnizat bancul de lucru pentru a personaliza lecțiile Epiverse-TRACE cu propriul brand. Într-adevăr, bancul de lucru Carpentries oferă un sistem de gestionare a învățării complet gratuite și open-source, care are caracteristici de accesibilitate și cele mai bune practici pedagogice încorporate. Are sens ca organizațiile externe, dincolo de tâmplăria în sine, să folosească banca de lucru ca infrastructură pentru a -și construi și găzdui materialele lor de instruire.
Cu toate acestea, în momentul scrierii acestei postări, bancul de lucru nu permite utilizatorilor să personalizeze tema și să adopte o marcă diferită de cea oficială de Carpentries. Modul recomandat de a face acest lucru este de a forța bancul de lucru și de a regla șabloanele HTML la nevoile dvs.
Cu toate acestea, depozitul din amonte primește în mod regulat actualizări cu corecții de erori sau noi funcții de care Forks ar putea dori să beneficieze. Acest lucru necesită furculița să se sincronizeze cu în mod regulat în amonte.
Pentru furculița Epiverse Carpentries, primele câteva luni au fost dureroase din cauza conflictelor care au apărut la sincronizarea cu amonte. Dar câteva modificări recente în amonte au redus foarte mult probabilitatea de conflicte.
Pe scurt, în amonte poate facilita să rămână în sincronizare prin reducerea numărului de fișiere pe care trebuie să le modifice o furculiță și prin izolarea acestor modificări în anumite locații.
În practică, acest lucru se poate face, de exemplu, folosind fișiere de configurare și variabile. Aceasta servește dublul scop de a fi mai uscat și de a separa modificările pe care o furculiță poate dori să le implementeze de la codul de bază, o furculiță este probabil să se modifice.
Deși aceste modificări trebuie să aibă loc în depozitul din amonte, nu înseamnă neapărat că întreținătorii din amonte sunt responsabili de efectuarea acestor modificări. Menținerea furcii sunt atât beneficiarii, cât și cei mai bine plasați pentru a identifica modificările necesare și ar trebui încurajați să depună cereri de tragere la amonte pentru a face aceste modificări.
În exemplul bancului de lucru Carpentries, Hugo a trimis o cerere de tragere pentru a implementa o variabilă SASS pentru definirea fontului, eliminând nevoia de a o schimba în mai multe locații.
Din partea furcii, unele alte tehnici pot face, de asemenea, rezolvarea conflictelor. O locație majoră a conflictelor sunt modificări sau fișiere generate automate. În exemplul Workbench, acesta este fișierele CSS concatenate și minificate. Acestea tind să concentreze conflictele, deoarece regrupează modificările din mai multe fișiere și sunt minificate pe o singură linie, ceea ce înseamnă că Git nu poate distinge ceea ce a fost schimbat.
Dar puteți automatiza rezolvarea conflictelor pentru aceste cazuri. Cheia este de a face modificări automate într -un angajament separat. Atunci când acest comite conflicte, puteți re-rula scriptul care generează fișierul și să comită rezultatul, fără a fi nevoie să vă gândiți la ceea ce ar trebui să fie păstrat sau nu.
În mod alternativ, în amonte poate opri uneori urmărirea fișierelor generate automate de la GIT și, în schimb, le poate reda în zbor la ora de construire.
În contextul pachetelor R, fișierele comune generate automate sunt .Rd fișiere de documentare, care sunt adesea generate automate din comentariile Roxygen2 din .R fișiere. Izolarea acestor schimbări într -un angajament separat poate facilita, de asemenea, rezolvarea conflictelor.
Integrarea furcii se schimbă în amonte
Secțiunea anterioară a evidențiat cât de multă muncă merge în menținerea unei furculițe. Și în timp ce am împărtășit tehnici pentru a atenua o parte din această lucrare, este încă necesară o sincronizare regulată, iar conflictele vor apărea în continuare din când în când. Deci, poate este posibil să integrăm caracteristicile în amonte și să evităm să mențineți o furculiță cu totul?
Furcile sunt uneori destinate de la început ca de scurtă durată. Acestea există doar până când PR -ul în amonte nu va fi contopit atunci când utilizatorul nu poate aștepta să se contopească PR -ul, mai ales dacă în amonte este lent să revizuiască PRS.
Dar, în alte cazuri, furculițele încep ca o modalitate de a personaliza un proiect și de a acumula noi caracteristici, fără a fi neapărat intenția de a le contribui înapoi inițial. Dar este posibil ca întreținerea furcii să se răzgândească în orice moment și să decidă să contribuie înapoi. De fapt, acesta poate fi un scenariu de contribuție de mare succes. Furcile pot fi într -adevăr o modalitate excelentă de a pilota noi caracteristici și de a arăta valoarea acestor caracteristici pentru a le motiva integrarea. De asemenea, poate construi încredere pentru a arăta că ați folosit această caracteristică de ceva vreme fără probleme.
În ecosistemul Furcilor de bancă de lucru Carpentries, un bun exemplu este un contribuabil care explorează suportul Python în propria furculiță și contribuie la el înapoi la amonte.
Rețineți că nu este întotdeauna posibil să vă integrați modificările, deoarece în amonte poate avea un domeniu de aplicare restricționat sau resurse limitate pentru întreținere.
Când contribuie înapoi, fiecare cerere de tragere ar trebui să se concentreze pe o singură caracteristică sau o remediere a erorilor, în loc să împingă toate modificările pe care le -a acumulat furculița.
Este nevoie de două la tango
Obținerea de furci să contribuie înapoi este posibilă numai dacă pot rămâne în contact cu amonte. Într -adevăr, furculițele care s -au abătut prea mult din amonte vor avea greutăți să contribuie înapoi și să facă cereri plăcute plăcute. Cu alte cuvinte, comunicarea și, dacă este posibil, urmarea pașilor prezentate în secțiunea „Simplificarea sincronizării și reducerea conflictelor GIT” de mai sus sunt esențiale pentru a se asigura că furculițele pot rămâne mai ușor în sincronizare.
În schimb, furculițele beneficiază de contribuția la amonte, deoarece le poate reduce povara de întreținere. Acestea pot face mai ușor sincronizarea prin reducerea numărului de modificări necesare pentru a -și implementa personalizările, fie pot face chiar și caracteristicile lor personalizate să facă parte din depozitul din amonte.
Acest lucru evidențiază relația simbiotică care poate exista între furculițe și depozite din amonte, atunci când ambele părți sunt dispuse să depună eforturi.
Concluzie
Deși uneori sunt prezentate ca o fractură, furculițele sunt o parte integrantă a ecosistemului open-source. Acestea oferă o modalitate de a se baza pe proiecte existente, de a adăuga funcții suplimentare fără a crește sarcina de întreținere a depozitului din amonte și pentru a pilota noi funcții. Acestea pot fi greu de întreținut, dar este posibil, de asemenea, ca furculița și întreținătorii din amonte să lucreze împreună pentru a face procesul mai neted.
Ne -ar plăcea să auzim de la tine dacă te -ai prăbușit sau dacă te gândești să faci un proiect. Care au fost motivațiile tale? Plănuiești să încerci să contribuie înapoi la în amonte? Cu ce provocări v -ați confruntat? Ce tehnici ați găsit utile pentru a vă menține furculița?
Vă mulțumim lui Daniel Morillo, John Ellis, Mark Padgham, Pablo Serrati, Richard Litt, Sergio Cabrera, Will Gearty și Yanina Bellini Saibene pentru ideile lor în timpul sesiunii de coworking și comentariile lor în timpul producției acestei postări.
