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
git [2021/10/04 09:47]
enrique_mieza_sanchez [Merge]
git [2023/09/19 14:22] (actual)
enric_mieza_sanchez [Merge]
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 122: Línia 148:
 **Configuració de branques locals i remotes** **Configuració de branques locals i remotes**
  
-Molt imporant tenir en compte que una branca local no té perquè coincidir amb el nom de la branca remota. +Molt important tenir en compte que una branca local no té perquè coincidir amb el nom de la branca remota. 
  
 Quan fem el procediment anterior (crear una branca remota des d'una local), automàticament ens ha creat una branca remota amb el mateix nom, i les enllaça perquè la local segueixi la remota. Aquesta situació, però, és configurable. Quan fem el procediment anterior (crear una branca remota des d'una local), automàticament ens ha creat una branca remota amb el mateix nom, i les enllaça perquè la local segueixi la remota. Aquesta situació, però, és configurable.
Línia 144: Línia 170:
 </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. El developer que faci un //merge// 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. Caldrà que es revisin el arxius marcat amb conflicte, que ens mostraran les diferències amb algo tipus:<code>   * **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 <<<<<<< HEAD
Línia 181: Línia 207:
 \\ \\
  
-===== 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.1633340820.txt.gz · Darrera modificació: 2021/10/04 09:47 per enrique_mieza_sanchez