bytes.cat

La wiki d'FP d'informàtica

Eines de l'usuari

Eines del lloc


git

Diferències

Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.

Enllaç a la visualització de la comparació

Ambdós costats versió prèvia Revisió prèvia
Següent revisió
Revisió prèvia
Següent revisió Ambdós costats nova versio
git [2021/10/03 17:05]
enrique_mieza_sanchez [Merge]
git [2023/07/06 23:43]
josep_lladonosa_capell [Com arreglar alguns errors típics de Git] enlloc > en lloc
Línia 11: Línia 11:
     * https://gitlab.com : Gitlab té el servei de repositoris (SaaS) però també pots descarregar el //software// en local i muntar el teu propi servidor.     * https://gitlab.com : Gitlab té el servei de repositoris (SaaS) però també pots descarregar el //software// en local i muntar el teu propi servidor.
     * [[https://cli.github.com|Documentació del CLI de Gitlab]] : github accessible via //command line//.     * [[https://cli.github.com|Documentació del CLI de Gitlab]] : github accessible via //command line//.
 +  * Uns quants [[https://victorhckinthefreeworld.com/2018/08/09/6-errores-comunes-al-utilizar-git-y-como-solucionarlos/|trucs imprescindibles de Git]] per quan hem fet alguna gamba.
  
 {{ git.png?300 }} {{ git.png?300 }}
  
-{{tag> #Daw #DawMp08 #DawMp08Uf4 #DawMp08Uf04 #DawMp05 #DawMp05Uf2 #DawMp05Uf02 #Dam #DamMp05 #DamMp05Uf2 #DamMp05Uf02 #Ciber #CiberMp03 git cvs vcs versions subversion}}+{{tag> #Daw #DawMp08 #DawMp08Uf4 #DawMp08Uf04 #DawMp05 #DawMp05Uf2 #DawMp05Uf02 #Dam #DamMp05 #DamMp05Uf2 #DamMp05Uf02 #Ciber #CiberMp03 #Ceti #CetiMp03 git cvs vcs versions subversion svn DevOps }} 
 + 
 +\\ 
 + 
 +===== Abans d'entrar en pànic feu commit i push! ===== 
 + 
 +{{ https://victorhckinthefreeworld.files.wordpress.com/2016/09/git_commit_fire.png?300 }}
  
 \\ \\
Línia 21: Línia 28:
 Videotutorial per iniciar-se amb Git i Apache: Videotutorial per iniciar-se amb Git i Apache:
 {{youtube>YpSaqTe9M2E}} {{youtube>YpSaqTe9M2E}}
 +
 +\\
 +
 +===== Comandes bàsiques =====
 +
 +{{ git-push-pull.png?400 }}
 +
 +<WRAP tip>
 +Les comandes imprescindibles per treballar amb Git son:
 +  * ''git clone'': descarrega un repositori d'una URL.
 +  * ''git commit'': guarda modificacions en el sistema de versions.
 +  * ''git push'': puja els canvis realitzats al repositori original des d'on s'ha creat (clonat) el repositori local.
 +  * ''git pull'': actualitza (descarrega) els canvis que hi hagi als //remotes// configurats.
 +  * ''git add'': afegeix nous arxius al repositori. Si creem arxius a la nostra carpeta no n'hi ha prou perquè s'afegeixin al sistema de versions. Cal fer el ''git add'' explícitament. La versió més habitual és afegir tots els arxius que hi ha a la carpeta:<code>$ git add .</code>
 +</WRAP>
 +
 +I tingueu en compte que hi ha alguns arxius importants:
 +  * ''.git/config'': arxiu amb les configuracions de correspondència dels repositoris remots i branques.
 +  * ''.gitignore'': arxiu que indica quins arxius o carpetes NO s'han de pujar al fer ''git add .'' Molt útil per arxius de producció amb contrasenyes i similars.
  
 \\ \\
Línia 46: Línia 72:
   - Afegeix els dos nous arxius al sistema de control de versions:<code>$ git add .</code>   - Afegeix els dos nous arxius al sistema de control de versions:<code>$ git add .</code>
   - Comprova que els arxius han estat incorporats amb <code>$ git status</code>   - Comprova que els arxius han estat incorporats amb <code>$ git status</code>
-  - Consolida els canvis al repositori local<code>$ git commit -a</code> +  - Consolida els canvis al repositori local<code>$ git commit -am "afegida imatge i perfil en html"</code> 
-  - Crea't un //personal token// anant a <code>Github -> Settings -> Developer settings -> Personal access tokens</code>+  - Si estàs en Linux, crea't un //personal token// anant a la web de de Github<code>Github -> Settings -> Developer settings -> Personal access tokens</code>(en Windows //potser// no cal)
   - Puja els canvis al repositori principal.<code>$ git push</code>   - Puja els canvis al repositori principal.<code>$ git push</code>
 </WRAP> </WRAP>
Línia 82: Línia 108:
  
 A partir d'aquí podrem [[https://cli.github.com/manual/gh_repo_create|crear un repositori remot a Github]]. Tenim un parell d'opcions: A partir d'aquí podrem [[https://cli.github.com/manual/gh_repo_create|crear un repositori remot a Github]]. Tenim un parell d'opcions:
-  $ git repo create <elmeurepo>+  $ gh repo create <elmeurepo>
  
 Amb això ens crearà un repositori remot, però ens falta lligar el repositori remot amb un de local, i omplir els continguts. Si visiteu la URL del nou repo de Github, allà mateix us apareixerà una "xuleta" de com fer-ho:  Amb això ens crearà un repositori remot, però ens falta lligar el repositori remot amb un de local, i omplir els continguts. Si visiteu la URL del nou repo de Github, allà mateix us apareixerà una "xuleta" de com fer-ho: 
Línia 110: Línia 136:
   $ git branch -a   $ git branch -a
  
-Per **crear una nova branca local** ho fem amb:+Per **crear una nova branca local** ho fem amb: (ULL! Això només la crea, però no l'estem utilitzant encara)
   $ git branch newbranch   $ git branch newbranch
  
-ULL! Això només la crea, però no l'estem utilitzant. Per **canviar-nos a la nova branca**:+Per **canviar-nos a la nova branca**:
   $ git checkout newbranch   $ git checkout newbranch
  
Línia 141: Línia 167:
 <WRAP important> <WRAP important>
 Abans de fer un merge convé repassar com està l'arbre de versions, per exemple amb un: Abans de fer un merge convé repassar com està l'arbre de versions, per exemple amb un:
-  $ git log --graph --all+  $ git log --graph --all --oneline
 </WRAP> </WRAP>
  
 El //merge// és una operació que comporta riscos potencialment. Qui faci un //merge// (típicament un responsable) es pot trobar amb diversos tipus d'errors: El //merge// és una operació que comporta riscos potencialment. Qui faci un //merge// (típicament un responsable) es pot trobar amb diversos tipus d'errors:
-  * **Conflicte de versions**: significa que a l'hora de barrejar el codi, Git ha detectat que les dues branques o versions tenen línies amb canvis simultanis incompatibles. Qui faci el //merge// haurà de decidir què fer, si triar una de les versions o fer una barreja de les dues.+  * **Conflicte de versions**: significa que a l'hora de barrejar el codi, Git ha detectat que les dues branques o versions tenen línies amb canvis simultanis incompatibles. Qui faci el //merge// haurà de decidir què fer, si triar una de les versions o fer una barreja de les dues. Caldrà que es revisin el arxius marcat amb conflicte, que ens mostraran les diferències amb algo tipus:<code> 
 +<<<<<<< HEAD 
 +    Versió que teniem a la branca. 
 +======= 
 +    Versió que estem fusionant. 
 +>>>>>>> manolo 
 +</code>
   * **El codi deixa de compilar**: potser cada canvi per separat no donava errors i funcionava, i el //merge// no indica conflicte, però al ajuntar-los el codi deixa de compilar. Caldrà examinar què està passant i posar remei per part dels desenvolupadors responsables.   * **El codi deixa de compilar**: potser cada canvi per separat no donava errors i funcionava, i el //merge// no indica conflicte, però al ajuntar-los el codi deixa de compilar. Caldrà examinar què està passant i posar remei per part dels desenvolupadors responsables.
   * **L'aplicació aparentment arrenca correctament però una funcionalitat falla**: per detectar aquesta situació el més còmode és disposar de tests automatitzats. Si no, és comprensible que després de cada //merge// caldrà comprovar totes les funcionalitats a mà.   * **L'aplicació aparentment arrenca correctament però una funcionalitat falla**: per detectar aquesta situació el més còmode és disposar de tests automatitzats. Si no, és comprensible que després de cada //merge// caldrà comprovar totes les funcionalitats a mà.
Línia 157: Línia 189:
   $ git log --graph --all   $ git log --graph --all
  
 +Anar a la branca destí:
 +  $ git checkout <desti>
  
 +Unir la branca <origen> amb la branca <desti>:
 +  $ git merge <origen>
 +
 +Si surten conflictes, resoldre'ls amb les eines adequades (IDE, compiladors, etc.).
 +
 +Caldrà fer de nou totes les proves (tests) pertinents (automatitzades o no).
 +
 +Per finalitzar el //merge//, fer un commit i un ''push'':
 +  $ git commit -am "merge branca origen"
 +
 +I pujar els canvis:
 +  $ git push
  
 \\ \\
  
-===== Repositoris propis via SSH ===== +===== Git submodules ===== 
-...+ 
 +Sovint necessitem tenir submòduls, és a dir, dependències del projecte principal, per exemple, llibreries, que cal incloure perquè el projecte principal funcioni. 
 + 
 +Referències: 
 +  * Doc oficial: https://git-scm.com/book/en/v2/Git-Tools-Submodules 
 +  * Una referència pràctica: https://voragine.net/scripting/git-submodules 
 + 
 +Prenent el cas que tinguem un projecte ''Desktop'' i una llibreria ''Lib'', amb els seus repos independents cadascun ja creats, podem incloure ''Lib'' dins de ''Desktop'' fàcilment. 
 + 
 +Entrem a la carpeta de Desktop i fem: 
 +  $ git submodule add https://github.com/.../Lib 
 +  $ git commit -am "add lib submodule" 
 +  $ git push 
 + 
 +Ens apareixerà la carpeta ''Lib'' amb el contingut del repo ja clonat. 
 + 
 +==== Clonant de nou un repo amb dependències (submodules) ==== 
 + 
 +A partir d'ara, quan clonem el projecte principal en una nova ubicació, ens apareixerà la carpeta ''Lib'', però estarà buida. Caldrà que inicialitzem els submòduls des de l'arrel amb: 
 +  $ git submodule init 
 + 
 +I després podem entrar a cadascuna de les llibreries i descarregar el codi pertinent: 
 +  $ cd Lib 
 +  $ git submodule update 
  
 \\ \\
 +
 +===== Fer que git recordi les credencials =====
 +
 +[[https://www.freecodecamp.org/news/how-to-fix-git-always-asking-for-user-credentials/|Aquest article explica com evitar que git ens vagi demanant les credencials]] repetidament quan treballem per línia de comandes.
 +
 +Resumint, es pot fer així:
 +  git config --global credential.helper store
 +  git config --global credential.helper cache
 +
 +No és molt recomanable deixar la //cache// permanentment.
 +
 +Si volem limitar la //cache// durant 10 minuts (600 segons) es pot fer amb un //timeout//:
 +
 +  git config --global credential.helper 'cache --timeout=600'
 +
 +\\
 +
 +===== Com arreglar alguns errors típics de Git =====
 +Aquest article ens ensenya alguns [[https://victorhckinthefreeworld.com/2018/08/09/6-errores-comunes-al-utilizar-git-y-como-solucionarlos/|trucs imprescindibles de Git]]:
 +  * Com utilitzar ''git amend''.
 +  * Com afegir un arxiu que he oblidat posar al darrer commit.
 +  * Com esborrar un arxiu que he entrat per error al darrer commit.
 +  * Com arreglar si has fet el commit a la //main trunk// (branca principal) en lloc d'a la teva branca.
 +  * ...i algun més.
 +
 +[[https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/removing-sensitive-data-from-a-repository|Com eliminar dades sensibles emmagatzemades en un repositori]]. És fàcil que succeeixi: un arxiu ''.env'' amb dades de desplegament reals, un arxiu de BD o de test amb contrasenyes reals (encara que estiguin //hashejades// no convé que algú li pugui fer un atac de diccionari), etc.
 +
 +
  
  
git.txt · Darrera modificació: 2023/09/19 14:22 per enric_mieza_sanchez