Skip to content

Latest commit

 

History

History
240 lines (196 loc) · 11.7 KB

File metadata and controls

240 lines (196 loc) · 11.7 KB

Treballant amb Remots

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.

Mostrant els Vostres Remots

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
origin

També 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.

Afegint Repositoris Remots

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/ticgit

La 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.

Obtenint i Traient dels Vostres Remots

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, git pull donarà un avís si la variable pull.rebase no està configurada. Git continuarà advertint-vos fins que configureu la variable.

Si voleu el comportament predeterminat de Git (fast-forward si és possible, sinó crear un commit de fusió): git config --global pull.rebase "false"

Si voleu fer un rebase quan obteniu: git config --global pull.rebase "true"

Enviant als Vostres Remots

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 master

Aquesta 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.

Inspeccionant un Remot

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.

Canviant el Nom i Eliminant Remots

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
paul

Val 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
origin

Un 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.