Am petrecut acum ceva mai mult de o luna lucrand cu Git. Pot spune sincer ca, desi sunt multe lucruri care imi plac la Git, sunt la fel de multe lucruri pe care personal le consider o durere in fund.

Submodulele au reusit in mod special sa fie un ghimpe in partea mea in multe ocazii. In timp ce conceptul de submodule este simplu, a intelege cum sa lucrezi cu ele poate fi o corvoada. Spun „sa-ti dau seama” pentru ca nu totul despre lucrul cu submodule este bine documentat. Voi acoperi doua dintre lucrurile mai dificile de descoperit: eliminarea si actualizarea submodulelor din depozitul dvs.

Ce sunt Submodulele?

Conceptul de submodule este genial. In esenta, va permite sa atasati un depozit extern in alt depozit la o anumita cale. Pentru a ilustra valoarea submodulelor, imi va fi probabil util sa explic modul in care le folosesc.

Profesiunea mea lucreaza cu teme WordPress. Practic, dezvolt imbunatatiri ale functiilor la teme. Dezvolt codul pentru aceste imbunatatiri in module care sunt complet continute in propriul folder. Aceasta permite adaugarea cu usurinta a codului la alte teme si, de asemenea, simplifica actualizarile / imbunatatirile codului, deoarece codul pentru caracteristici specifice este consecvent in toate temele care utilizeaza acel modul specific.

Fiecare tema pe care o producem este pastrata in propriul sau depozit Git. In plus, am creat un depozit separat pentru fiecare din aceste module de caracteristici. Decat sa pun efectiv codul modulului de functii direct in depozitele tematice, adaug pur si simplu depozitele de module de functii necesare ca submodule.

De exemplu, avem o tema numita FlexxBold. FlexxBold include in prezent un total de sapte submodule: panou publicitar, contact-page-plugin, imagini prezentate, feedburner-widget, file-utilitate, flexx-layout-editor si tutoriale. Din moment ce folosesc submodule, codul poate fi extras direct din depozitele relevante ale submodulelor, in loc sa solicite actualizarea manuala a fiecarui depozit tematic individual.

Dupa cum am mentionat anterior, nu totul in Git este usor de lucrat. Exista patru functii principale pe care va trebui sa le intelegeti pentru a lucra cu submodule Git. Pentru a va trebui sa stiti cum sa adaugati, sa folositi, sa eliminati si sa actualizati submodulele. Voi acoperi fiecare dintre aceste utilizari de mai jos.

Adaugarea submodulelor la un Git Repository

Din fericire, adaugarea unei submodule intr-un depozit git este de fapt destul de simpla. De exemplu, daca ma aflu in directorul de lucru al depozitului pentru o noua tema numita SampleTheme si trebuie sa adaug depozitul de panou la calea lib / billboard, pot face acest lucru cu urmatoarea comanda:

[user @ office SampleTheme] $ git submodule add git @ mygithost: billboard lib / billboard Initializat gol Git depozit in ~ / git_dev / SampleTheme / lib / billboard / .git / remote: Numararea obiectelor: 1006, facut. telecomanda: Comprimarea obiectelor: 100% (978/978), realizata. telecomanda: Total 1006 (delta 631), refolosit 0 (delta 0) Obiecte primitoare: 100% (1006/1006), 408,22 KiB, realizate. Rezolvare delte: 100% (631/631), facut.

Exista trei parti principale pentru aceasta comanda:

  • git submodule add – Acest lucru ii spune simplu lui Git ca adaugam un submodul. Aceasta sintaxa va ramane mereu aceeasi.
  • git @ mygithost: billboard – Acesta este depozitul extern care urmeaza sa fie adaugat sub forma de submodule. Sintaxa exacta va varia in functie de configurarea depozitului Git la care va conectati. Trebuie sa va asigurati ca aveti capacitatea de a clona depozitul dat.
  • lib / billboard – Aceasta este calea in care depozitul de submodule va fi adaugat la depozitul principal.

Sa verificam cum functioneaza depozitul.

[user @ office SampleTheme] $ git status # In filiala master # Modificari care urmeaza sa fie comise: # (utilizati „git reset HEAD <file> …” pentru a se dezlipi) # # new file: .gitmodules # new file: lib / billboard #

Observati cum a fost creata calea furnizata si adaugata la modificarile care urmeaza sa fie comise. In plus, a fost creat un nou fisier numit .gitmodules. Acest nou fisier contine detaliile furnizate despre noul submodul. Din curiozitate, sa vedem continutul acelui nou fisier:

[user @ office SampleTheme] $ cat .gitmodules [submodule “lib / billboard”] path = lib / billboard url = git @ mygithost: billboard

Posibilitatea de a modifica acest fisier mai tarziu va fi util mai tarziu.

Tot ce mai ramane de facut acum este sa efectuati modificarile, apoi sa impingeti angajarea pe un sistem de la distanta, daca este necesar.

Utilizarea submodulelor

A avea submodule intr-un depozit este excelent, dar daca ma uit in depozitul meu, tot ce am este un folder gol, mai degraba decat continutul real al depozitului submodulului. Pentru a completa calea submodulului cu fisierele din depozitul extern, trebuie sa initializati mai intai submodulele si apoi sa le actualizati.

Nota: Aceasta s-a schimbat in versiunile mai noi de Git. Acum, depozitul submodulului va fi clonat cu master check out. Daca acel depozit are si submodule, atunci submodulele tale vor trebui populate urmand pasii de mai jos din directorul submodulelor proiectului dvs. (confuz inca?).

De exemplu, daca lucrati in proiectul numit aplicatie telefonica, adaugati un submodul numit graphic-lib, iar graphic-lib are o submodula numita randator, cand adaugati graphic-lib in aplicatia telefonica, aplicatia telefonica / grafica- directorul lib va ​​fi populat ca repo clonat, dar directorul telefon-app / graphic-lib / renderer va fi gol. Pentru a popula telefon-app / graphic-lib / renderer, mai intai schimbati directoarele in phone-app / graphics-lib si urmati instructiunile de mai jos.

In primul rand, trebuie sa initializam submodulul (ele). Putem face asta cu urmatoarea comanda:

[user @ office SampleTheme] $ git submodule init Submodul ‘lib / billboard’ (git @ mygithost: panou) inregistrat pentru calea ‘lib / billboard’

Apoi, trebuie sa rulam actualizarea pentru a elimina fisierele.

[user @ office SampleTheme] $ git actualizare submodule Initializat depozit gol gol Git in ~ / git_dev / SampleTheme / lib / billboard / .git / remote: Numararea obiectelor: 26, facut. telecomanda: Comprimarea obiectelor: 100% (22/22), realizata. telecomanda: Total 26 (delta 5), ​​refolosit 0 (delta 0) Obiecte primitoare: 100% (26/26), 17,37 KiB, realizate. Rezolvare delte: 100% (5/5), facut. Calea submodulului ‘lib / billboard’: verificat ‘1c407cb2315z0847facb57d79d680f88ca004332’

Cautarea in directorul lib / billboard arata acum o lista placuta a fisierelor necesare.

Scoaterea submodulelor

Ce se intampla daca trebuie sa eliminam un submodul? Poate am facut o greseala. Ar putea fi, de asemenea, ca proiectul proiectului sa schimbat, iar submodulele trebuie sa se schimbe odata cu acesta. Nicio problema, voi rula pur si simplu git submodule rm [calea submodulului] si totul va fi grozav, nu?

[user @ office SampleTheme] $ git submodule rm lib / eroare de panou: pathpec ‘rm’ nu a corespuns cu niciun fisier (e) cunoscut (e) de git. Ai uitat sa „git adaugi”? b8ff8f68eb56938b9b4bf993619218fa848c5848 lib / panou publicitar (1.2.25)

Din pacate, acest lucru este gresit. Git nu are un mod construit pentru a elimina submodulele. Speram ca acest lucru se va rezolva in viitor, deoarece acum trebuie sa facem manual eliminarea submodulelor.

Lipind exemplul, vom elimina modulul lib / billboard din SampleTheme. Toate instructiunile vor fi rulate din directorul de lucru al depozitului SampleTheme. Pentru a face acest lucru, trebuie sa facem urmatoarele:

  1. Eliminati intrarea submodulului in fisierul .gitmodules. Intrucat lib / billboard este singurul submodule din depozitul SampleTheme, putem elimina pur si simplu fisierul ruland git rm .gitmodules. Daca lib / billboard nu este singurul submodule, fisierul .gitmodules va trebui modificat manual. Deschideti-l in vi sau editorul de text preferat si eliminati cele trei linii relevante pentru submodulul care este eliminat. In acest caz, aceste linii vor fi eliminate: [submodula “lib / billboard”] calea = lib / billboard url = git @ mygithost: billboard
  2. Eliminati intrarea submodulului in .git / config. Acest pas nu este strict necesar, dar pastreaza fisierul de configuratie ordonat si va ajuta la prevenirea problemelor in viitor. Intrarea submodulului in .git / config va fi prezenta numai daca ati executat git submodule init in depozit. Daca nu ai facut-o, poti sari peste acest pas. In acest exemplu, urmatoarele linii vor fi eliminate: [submodula “panou publicitar”] url = git @ mygithost: panou
  3. Eliminati calea creata pentru submodul. Acesta este usor. Pur si simplu rulati git rm – cached [calea pluginului]. In acest exemplu, voi rula git rm – cached lib / billboard. Dupa cum am observat in alta parte, nu puneti o tablita, deoarece comanda nu va reusi. De exemplu, daca rulez git rm – cached lib / billboard /, am o eroare: fatal: pathpec ‘lib / billboard /’ nu se potriveste cu niciun fisier. [user @ office SampleTheme] $ git rm – lib in cache / billboard rm ‘lib / billboard’

Actualizarea submodulelor

Exista un aspect despre submodulele pe care unii ar putea sa nu le realizeze atunci cand lucreaza prima data cu submodulele Git. Cand adaugati submodulul, cea mai recenta angajare a submodulului este stocata in indexul depozitului principal. Asta inseamna ca, pe masura ce codul din depozitul submodulului se actualizeaza, acelasi cod va fi totusi tras pe depozite bazandu-se pe submodul.

Acest lucru are mult sens atunci cand luati in considerare modul in care codul dvs. va fi testat si verificat (sau cel putin ar trebui sa fie) fata de o versiune specifica a codului submodulului, dar este posibil ca codul depozitului principal sa nu functioneze bine cu noi actualizari ale submodulului inainte de modificari sunt testate.

Din pacate, cum ar fi eliminarea submodulelor, Git nu explica modul de actualizare a unui submodul la un angajament ulterior. Din fericire, insa, nu este atat de greu.

  1. Initializeaza submodulele depozitului executand init submodule git urmata de actualizarea submodulelor git. [user @ office SampleTheme] $ git submodule init Submodulul ‘lib / billboard’ (git @ mygithost: billboard) inregistrat pentru calea ‘lib / billboard’ [user @ office SampleTheme] $ git actualizare a submodulului Initializat depozitul gol Git in ~ / git_dev / SampleTheme / lib / billboard / .git / remote: Numararea obiectelor: 26, realizata. telecomanda: Comprimarea obiectelor: 100% (22/22), realizata. telecomanda: Total 26 (delta 5), ​​refolosit 0 (delta 0) Obiecte primitoare: 100% (26/26), 17,37 KiB, realizate. Rezolvare delte: 100% (5/5), facut. Calea submodulului ‘lib / billboard’: verificat ‘1c407cb2315z0847facb57d79d680f88ca004332’
  2. Modificati in directorul submodulului. In acest exemplu, cd lib / billboard. [user @ office SampleTheme] $ cd lib / billboard [user @ office SampleTheme / lib / billboard] $
  3. Depozitele de submodule adaugate de actualizarea submodulului git sunt „fara cap”. Aceasta inseamna ca nu se afla pe o ramura actuala. Pentru a remedia acest lucru, trebuie doar sa trecem la o sucursala. In acest exemplu, aceasta ar fi ramura principala. Schimbam cu urmatoarea comanda: git checkout master. [user @ office SampleTheme / lib / billboard] $ git status # Nu exista in prezent in nicio sucursala. nimic de angajat (director de lucru curat) [user @ office SampleTheme / lib / billboard] $ git checkout master Pozitia anterioara HEAD a fost b8ff8f6 … redirectionare Comutat in filiala „master” Filiala dvs. este in spatele „origine / master” cu 8 se angajeaza si poate fi transmis mai rapid. [user @ office SampleTheme / lib / billboard] $ git status # In cadrul comandantului filialei # Filiala dvs. se afla in spatele „origine / master” cu 8 angajamente si poate fi transmisa rapid. # nimic de angajat (director de lucru curat)
  4. In continuare, trebuie doar sa actualizam depozitul pentru a ne asigura ca avem cele mai recente actualizari. Putem face asta cu un pull: git pull. [user @ office SampleTheme / lib / billboard] $ git pull remote: Numararea obiectelor: 31, facut. telecomanda: Comprimarea obiectelor: 100% (24/24), realizata. telecomanda: Total 24 (delta 15), refolosit 0 (delta 0) Ambalarea obiectelor: 100% (24/24), finalizat. De la mygithost: billboard b8ff8f6..

    porno pule mari https://genderdreaming.com/forum/redirect-to/?redirect=https://adult66.net/
    porno chaturbate http://freezoka.com/__media__/js/netsoltrademark.php?d=adult66.net/
    porno misionero http://www.borken-live.de/advert.php?url=https://adult66.net/
    filme porno cu milf http://stocking-mania.com/cgi-bin/rb4/cout.cgi?url=https://adult66.net/filme-porno/amatori
    porno cu vecina http://test-service.co.jp/modules/wordpress/wp-ktai.php?view=redir&url=https://adult66.net/filme-porno/anal
    porno gratis hd http://ecolub.com.ua/uz_redirect.php?url=https://adult66.net/filme-porno/asiatice
    porno hentai
    hot tube porno http://www.universaldisplaycorp.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/blonde
    anal porno hd http://dirtywatercoffeecompany.com/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/brazzers
    dove cameron porno http://www.caids.net/__media__/js/netsoltrademark.php?d=adult66.net/filme-porno/brunete
    porno in romana http://www.kaleidoscope-navi.jp/music/rank.cgi?mode=link&id=266&url=https://adult66.net/filme-porno/chaturbate
    porno leizbi http://burgman-club.ru/forum/away.php?s=https://adult66.net/negresa-disperata-dupa-sex-isi-a-un-vibrator-super-mare-in-fund-ca-sa-aiba-orgasm
    filme porno cu batrini https://www.ambienthotels.eu/includ/contban.php?cod=91&url=https://adult66.net/pustoaice-plictisite-incing-o-partida-de-sex-si-se-filmeaza-in-timp-de-isi-fac-sex-oral-una-alteia
    filmre porno http://fineartteens.com/cgi-bin/atx/out.cgi?id=70&tag=toplist&trade=https://adult66.net/cuplu-de-amatori-din-regie-sunt-filmati-pe-ascuns-de-niste-colegi-in-timp-ce-fac-sex-oral-la-dus
    porno mature german https://www.zenaps.com/rclick.php?mid=1586&c_len=2592000&c_ts=1398598589&c_cnt=31844%7C0%7C%7C1398598589%7C%7Caw%7C0&ir=nwlraitex&pr=https://adult66.net/doi-amatori-sunt-filmati-in-timp-ce-fac-un-film-porno-cu-sex-anal-sex-oral-supa-care-au-orgasm
    mature porno amatori http://www.yeaah.com/disco/DiscoGo.asp?ID=3435&Site=https://adult66.net/tata-denaturat-isi-mangaie-fiica-in-somn-si-apoi-o-fute-pana-cand-isi-da-drumu
    filme porno cu femei legate http://www.citymedphysio.co.nz/ra.asp?url=https://adult66.net/studenta-beata-e-filmata-de-niste-colegi-in-timp-ce-e-fututa-care-posteaza-filmuletul-pe-net
    porno la nudisti http://www.radwellint.com/__media__/js/netsoltrademark.php?d=adult66.net/studenta-curva-face-sex-pe-bani-cu-colegi-de-facultate-si-estei-filmata-in-timp-ce-fac-blowjob
    porno home https://owohho.com/away?url=https://adult66.net/doua-pizde-blonde-se-mangaie-una-pe-alta-pana-se-excita-apoi-sunt-futute
    filme porno fara virusi http://www.moneytreepaydayloans.net/__media__/js/netsoltrademark.php?d=adult66.net/minora-virgina-e-pacalita-de-tatal-ei-vitreg-sa-suga-pula-si-apoi-e-dezvirginata-pe-bune-de-el

    5cab93f master -> origine / master * [eticheta noua] 1.2.28 -> 1.2.28 De la mygithost: billboard * [tag new] 1.2.26 -> 1.2.26 * [new tag] 1.2 .27 -> 1.2.27 Actualizare c547e0d..5cab93f Fast-forward billboard.php | 109 +++++++++++++++ – classes / view_gettingstarted.php | 107 ++++++++++++++ class / view_gettingstarted_content.php | 38 +++++ css / admin.css | 26 ++++ history.txt | 22 +++ – js / admin.js | 17 +++ lib / updater / get.php | 94 +++++++ —– lib / updater / history. txt | 9 ++ lib / updater / updater.php | 241 ++++++++++++++++++ ————- 9 fisiere schimbate, 519 insertii (+), 144 stergeri (-) creeaza modul 100644 classes / view_gettingstarted.php create mode 100644 classes / view_gettingstarted_content.php create mode 100644 css / admin.css creeaza modul 100644 js / admin.js create mode 100644 lib / updater / history.txt

  5. Acum reveniti la directorul de lucru radacina al depozitului. In exemplul nostru, avem doua directoare in, deci rulam cd .. / … [user @ office SampleTheme / lib / billboard] $ cd ../ .. [user @ office SampleTheme] $
  6. Totul este acum gata sa fie angajat si impins inapoi (daca exista un depozit la distanta pentru a impinge la acesta). Daca executati starea git, veti observa ca calea catre submodul este listata ca modificata. Aceasta este ceea ce ar trebui sa va asteptati sa vedeti. Pur si simplu adaugati calea pentru a fi angajat si faceti un angajament. Cand efectuati angajarea, indexul va actualiza sirul de comitere pentru submodul. [user @ office SampleTheme] $ status git # Pe fila master # Schimbata, dar neactualizata: # (folositi “git add …” pentru a actualiza ceea ce va fi angajat) # (utilizati “git checkout – …” pentru a arunca # modificari in directorul de lucru) # # modificat: lib / billboard (comit noi) # nu au fost adaugate modificari pentru a se angaja (folositi „git add” si / sau „git commit -a”

Ganduri de inchidere

Am invatat multe in timpul meu scurt cu Git. Asteapta sa vezi mai multe detalii despre colaborarea cu Git in viitor. Am o serie de capcane pe care le-am descoperit ca ar trebui sa organizez impreuna si sa postez aproximativ. Am creat, de asemenea, niste scripturi foarte clare care sa ma ajute sa automatizez numeroase lucruri atunci cand lucrez cu depozitele pe care as dori sa le distribuie.

Daca doriti sa stiti ceva despre Git, va rugam sa adaugati un comentariu sau sa ma contactati.

Te-am ajutat? Trimite-mi un sfat.