Per poder col·laborar en qualsevol projecte Git, heu de saber com gestionar els vostres repositoris remots. Els repositoris remots són versions del vostre projecte que estan allotjades a Internet o en alguna xarxa. Podeu tenir diversos, cadascun dels quals generalment és només de lectura o de lectura/escriptura per a vostè. Col·laborar amb altres implica gestionar aquests repositoris remots i enviar i obtenir dades d’ells quan necessiteu compartir la feina. Gestionar repositoris remots inclou saber com afegir repositoris remots, eliminar remots que ja no són vàlids, gestionar diverses branques remotes i definir-les com a seguides o no, i més. En aquesta secció, cobrirem algunes d’aquestes habilitats de gestió de remots.
|
Note
|
Repositoris remots poden estar a la vostra màquina local.
És perfectament possible que esteu treballant amb un repositori “remot” que, de fet, està al mateix host que vostè. La paraula “remot” no implica necessàriament que el repositori estigui en un altre lloc de la xarxa o Internet, només que està en un altre lloc. Treballar amb un repositori remot d’aquest tipus encara implicaria totes les operacions estàndard d’enviament, obtenció i recuperació com amb qualsevol altre remot. |
Per veure quins servidors remots heu configurat, podeu executar la comanda git remote.
Llista els noms curts de cada referència remota que heu especificat.
Si heu clonat el vostre repositori, hauríeu de veure almenys origin: aquest és el nom predeterminat que Git dona al servidor del qual heu clonat:
$ git clone https://github.com/schacon/ticgit
Cloning into 'ticgit'...
remote: Reusing existing pack: 1857, done.
remote: Total 1857 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1857/1857), 374.35 KiB | 268.00 KiB/s, done.
Resolving deltas: 100% (772/772), done.
Checking connectivity... done.
$ cd ticgit
$ git remote
originTambé podeu especificar -v, que us mostra les URLs que Git ha emmagatzemat per al nom curt que s’utilitzarà quan es llegeixi i s’escrigui en aquell remot:
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)Si teniu més d’un remot, la comanda els llista tots. Per exemple, un repositori amb múltiples remots per treballar amb diversos col·laboradors podria semblar alguna cosa com això.
$ cd grit
$ git remote -v
bakkdoor https://github.com/bakkdoor/grit (fetch)
bakkdoor https://github.com/bakkdoor/grit (push)
cho45 https://github.com/cho45/grit (fetch)
cho45 https://github.com/cho45/grit (push)
defunkt https://github.com/defunkt/grit (fetch)
defunkt https://github.com/defunkt/grit (push)
koke git://github.com/koke/grit.git (fetch)
koke git://github.com/koke/grit.git (push)
origin git@github.com:mojombo/grit.git (fetch)
origin git@github.com:mojombo/grit.git (push)Això significa que podem obtenir contribucions de qualsevol d’aquests usuaris bastant fàcilment. A més, podríem tenir permís per enviar a un o més d’aquests, encara que no ho podem saber aquí.
Noteu que aquests remots utilitzen una varietat de protocols; cobrirem més sobre això a ch04-git-on-the-server.asc.
Hem esmentat i donat algunes demostracions de com la comanda git clone afegeix implícitament el remot origin per a vostè.
Aquí teniu com afegir un remot nou explícitament.
Per afegir un nou repositori Git remot com a nom curt que podeu referenciar fàcilment, executeu git remote add <shortname> <url>:
$ git remote
origin
$ git remote add pb https://github.com/paulboone/ticgit
$ git remote -v
origin https://github.com/schacon/ticgit (fetch)
origin https://github.com/schacon/ticgit (push)
pb https://github.com/paulboone/ticgit (fetch)
pb https://github.com/paulboone/ticgit (push)Ara podeu utilitzar la cadena pb a la línia de comandes en lloc de tota la URL.
Per exemple, si voleu obtenir tota la informació que té Paul però que encara no teniu al vostre repositori, podeu executar git fetch pb:
$ git fetch pb
remote: Counting objects: 43, done.
remote: Compressing objects: 100% (36/36), done.
remote: Total 43 (delta 10), reused 31 (delta 5)
Unpacking objects: 100% (43/43), done.
From https://github.com/paulboone/ticgit
* [new branch] master -> pb/master
* [new branch] ticgit -> pb/ticgitLa branca master de Paul ara és accessible localment com a pb/master: podeu fusionar-la en una de les vostres branques, o podeu fer un checkout d’una branca local en aquest punt si voleu inspeccionar-la.
Explicarem què són les branques i com utilitzar-les amb molt més detall a ch03-git-branching.asc.
Com acabeu de veure, per obtenir dades dels vostres projectes remots, podeu executar:
$ git fetch <remote>La comanda va a aquest projecte remot i descarrega totes les dades d’aquest projecte remot que encara no teniu. Després de fer això, hauríeu de tenir referències a totes les branques d’aquest remot, que podeu fusionar o inspeccionar en qualsevol moment.
Si cloneu un repositori, la comanda afegeix automàticament aquest repositori remot sota el nom “origin”.
Així, git fetch origin obté qualsevol nova feina que s’hagi enviat a aquest servidor des que el vau clonar (o l’última vegada que vau obtenir dades).
És important tenir en compte que la comanda git fetch només descarrega les dades al vostre repositori local: no les fusiona automàticament amb cap de la vostra feina ni modifica el que esteu treballant actualment.
Heu de fusionar-les manualment a la vostra feina quan esteu llest.
Si la vostra branca actual està configurada per seguir una branca remota (vegeu la següent secció i ch03-git-branching.asc per obtenir més informació), podeu utilitzar la comanda git pull per obtenir automàticament i després fusionar aquesta branca remota a la vostra branca actual.
Això pot ser un flux de treball més fàcil o més còmode per a vostè; i per defecte, la comanda git clone configura automàticament la vostra branca local master per seguir la branca remota master (o com es digui la branca predeterminada) al servidor del qual heu clonat.
Executar git pull generalment obté dades del servidor del qual vau clonar originalment i intenta fusionar-les automàticament al codi amb el qual esteu treballant actualment.
|
Note
|
A partir de la versió 2.27 de Git, Si voleu el comportament predeterminat de Git (fast-forward si és possible, sinó crear un commit de fusió):
Si voleu fer un rebase quan obteniu:
|
Quan teniu el vostre projecte en un punt que voleu compartir, heu d’enviar-lo a l’amunt.
La comanda per a això és senzilla: git push <remote> <branch>.
Si voleu enviar la vostra branca master al vostre servidor origin (de nou, clonar generalment configura aquests dos noms per a vostè automàticament), llavors podeu executar això per enviar qualsevol commit que hàgiu fet de tornada al servidor:
$ git push origin masterAquesta comanda només funciona si heu clonat des d’un servidor al qual teniu accés d’escriptura i si ningú no ha enviat en el temps intermedi. Si vostè i algú altre cloneu al mateix temps i ells envien a l’amunt i després vostè envia a l’amunt, el vostre enviament serà correctament rebutjat. Hauríeu d’obtenir la seva feina primer i incorporar-la a la vostra abans que se us permeti enviar. Consulteu ch03-git-branching.asc per obtenir informació més detallada sobre com enviar a servidors remots.
Si voleu veure més informació sobre un remot particular, podeu utilitzar la comanda git remote show <remote>.
Si executeu aquesta comanda amb un nom curt particular, com origin, obteniu alguna cosa com això:
$ git remote show origin
* remote origin
Fetch URL: https://github.com/schacon/ticgit
Push URL: https://github.com/schacon/ticgit
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
Local branch configured for 'git pull':
master merges with remote master
Local ref configured for 'git push':
master pushes to master (up to date)Llista la URL per al repositori remot així com la informació de la branca de seguiment.
La comanda us diu útilment que si esteu a la branca master i executeu git pull, fusionarà automàticament la branca master del remot a la local després de ser recuperada.
També llista totes les referències remotes que ha recuperat.
Això és un exemple senzill que és probable que us trobeu.
No obstant això, quan utilitzeu Git de manera més intensiva, podeu veure molt més informació de git remote show:
$ git remote show origin
* remote origin
URL: https://github.com/my-org/complex-project
Fetch URL: https://github.com/my-org/complex-project
Push URL: https://github.com/my-org/complex-project
HEAD branch: master
Remote branches:
master tracked
dev-branch tracked
markdown-strip tracked
issue-43 new (next fetch will store in remotes/origin)
issue-45 new (next fetch will store in remotes/origin)
refs/remotes/origin/issue-11 stale (use 'git remote prune' to remove)
Local branches configured for 'git pull':
dev-branch merges with remote dev-branch
master merges with remote master
Local refs configured for 'git push':
dev-branch pushes to dev-branch (up to date)
markdown-strip pushes to markdown-strip (up to date)
master pushes to master (up to date)Aquesta comanda mostra quina branca s’envia automàticament quan executeu git push mentre esteu en certes branques.
També us mostra quines branques remotes al servidor encara no teniu, quines branques remotes teniu que s’han eliminat del servidor, i múltiples branques locals que poden fusionar-se automàticament amb la seva branca de seguiment remot quan executeu git pull.
Podeu executar git remote rename per canviar el nom curt d’un remot.
Per exemple, si voleu canviar el nom de pb a paul, podeu fer-ho amb git remote rename:
$ git remote rename pb paul
$ git remote
origin
paulVal la pena esmentar que això canvia tots els noms de les vostres branques de seguiment remot, també.
El que abans es referenciava com pb/master ara està a paul/master.
Si voleu eliminar un remot per alguna raó: heu mogut el servidor o ja no esteu utilitzant un mirror particular, o potser un col·laborador ja no contribueix, podeu utilitzar git remote remove o git remote rm:
$ git remote remove paul
$ git remote
originUn cop elimineu la referència a un remot d’aquesta manera, totes les branques de seguiment remot i les configuracions associades amb aquest remot també s’eliminen.