A la lliçó anterior vam aprendre el mecanisme de configuració: git config, els seus nivells i la seva precedència. Ara toca aplicar-lo. Aquesta lliçó recorre els valors concrets que convé fixar en un equip abans de començar a treballar, i ho fa acompanyant l'Ana mentre prepara el seu portàtil per arrencar gestor-tasques.
Alguns d'aquests ajustos són obligatoris: sense ells Git es negarà a confirmar o ho farà amb dades incorrectes que després només s'arreglen reescrivint l'historial. D'altres són fortament recomanables perquè eviten sorpreses desagradables: quedar atrapat en un editor desconegut, que un company d'un altre sistema operatiu vegi tot el fitxer com a modificat, o que Git faci fusions inesperades en integrar canvis.
En acabar, l'equip de l'Ana quedarà llest i tancarem el mòdul enllaçant amb el mòdul 2, on per fi crearà el repositori.
Contingut
- La identitat:
user.nameiuser.email - La branca per defecte:
init.defaultBranch - L'editor:
core.editor - Finals de línia:
core.autocrlficore.eol - Comportament en integrar:
pull.rebase - Comportament en enviar:
push.default - Credencials:
credential.helper - Color i idioma de la sortida
- Taula resum d'ajustos recomanats
- Comprovació final de l'equip de l'Ana
- La identitat:
user.name i user.email
user.name i user.emailÉs l'únic ajust veritablement obligatori. Cada confirmació registra qui la va fer, i Git es nega a crear-ne cap si no sap qui ets.
git config --global user.name "Ana Ferrer"
git config --global user.email "[email protected]"Desglossament:
--globalescriu a~/.gitconfig, de manera que s'aplica a tots els repositoris de l'Ana. És el que toca per a la identitat.user.nameés el teu nom tal com apareixerà a l'historial. Fes servir el teu nom real i complet: és el que veuran els teus companys durant anys a cada línia de l'historial. Res no impedeix fer servir un àlies, però dificulta identificar autories.user.emailés el correu associat a la confirmació. És el camp que les plataformes fan servir per vincular una confirmació amb un compte d'usuari: si el correu no coincideix amb cap de registrat a GitHub o GitLab, la confirmació apareixerà sense foto de perfil ni enllaç.
Què passa si no ho configures
En intentar confirmar, Git mostra un error explícit:
Author identity unknown *** Please tell me who you are. Run git config --global user.email "[email protected]" git config --global user.name "Your Name" to set your account's default identity. fatal: unable to auto-detect email address
En algunes configuracions antigues, Git no fallava i endevinava una identitat a partir del nom d'usuari i del nom de la màquina, produint autors com [email protected]. Aquest comportament està desaconsellat i desactivat per defecte en versions modernes, precisament perquè generava historials amb autories inservibles.
Per què convé encertar-la a la primera
L'autor forma part de l'objecte commit, i ja vam veure a El Model de Dades de Git que el hash es calcula sobre aquest contingut. Canviar l'autor d'una confirmació existent significa crear una confirmació nova i reescriure tot l'historial posterior. Si aquest historial ja està compartit, el problema es multiplica.
Traducció pràctica: configura la identitat abans de la teva primera confirmació, no després.
Correus privats en plataformes públiques
Si publiques a GitHub i no vols exposar el teu correu real, la plataforma ofereix una adreça de reenviament del tipus [email protected]. Es configura igual:
git config --global user.email "[email protected]"Les confirmacions continuen vinculant-se al teu compte, però el teu correu real no queda a l'historial públic. Recorda que l'historial és permanent: un correu confirmat i publicat ja no es pot retirar sense reescriure.
Identitats diferents per projecte
Com vam veure a Configurant Git, això es resol amb configuració local o, millor, amb includeIf. L'Ana ja té la seva carpeta ~/personal/ preparada per a això.
- La branca per defecte:
init.defaultBranch
init.defaultBranchQuan es crea un repositori, Git crea automàticament una primera branca. Històricament s'anomenava master; des del 2020 l'estàndard de facto del sector és main, adoptat per GitHub, GitLab i la majoria de projectes nous.
Sense aquest ajust, Git continua fent servir master i mostra un avís llarg cada vegada que es crea un repositori, recordant que el nom per defecte està subjecte a canvi. Fixar-lo elimina l'avís i, sobretot, evita la incoherència de tenir repositoris amb master en local i main al servidor.
| Valor | Conseqüència |
|---|---|
| Sense configurar | Es fa servir master i apareix un avís a cada repositori nou |
main |
Coherent amb GitHub, GitLab i la indústria actual |
| Un altre nom | Vàlid, però fora de convenció; complica la col·laboració |
Dos matisos importants:
- Només afecta els repositoris nous. Els ja existents conserven el nom que tinguessin.
- No reanomena res. Si treballes en projectes antics amb
master, continuaran dient-se així i no hi ha cap problema.
- L'editor:
core.editor
core.editorGit obre un editor de text en diverses situacions: en escriure un missatge de confirmació llarg, en resoldre un rebase interactiu, en editar la configuració amb --edit. Si no es configura, fa servir el valor de les variables d'entorn GIT_EDITOR, VISUAL o EDITOR, i a manca de totes elles, Vim a la majoria de sistemes Unix.
Aquest últim cas és un clàssic: un principiant executa una ordre, apareix una pantalla blava incomprensible i no aconsegueix sortir-ne. (Per si et passa: se'n surt amb Esc, després :q! i Retorn per descartar, o :wq per desar.)
Configura l'editor que ja sàpigues fer servir:
# Visual Studio Code
git config --global core.editor "code --wait"
# Nano: senzill, amb les tecles indicades a la pantalla
git config --global core.editor "nano"
# Vim
git config --global core.editor "vim"
# Sublime Text
git config --global core.editor "subl -n -w"
# Notepad++ a Windows
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"La part crítica en els editors gràfics és l'opció d'espera:
--waita VS Code,-wa Sublime.- Sense ella, l'editor s'obre i retorna el control a Git immediatament, així que Git creu que has acabat i rep un fitxer buit. El resultat és un missatge de confirmació en blanc i l'operació avortada.
| Editor | Ordre | Recomanat per a |
|---|---|---|
nano |
nano |
Qui no coneix editors de terminal |
vim |
vim |
Qui ja el domina |
| VS Code | code --wait |
Qui ja el fa servir per programar |
| Sublime Text | subl -n -w |
Ídem |
| Notepad++ | ruta completa -multiInst -notabbar -nosession -noPlugin |
Windows sense VS Code |
L'Ana fa servir VS Code per programar, així que:
Requisit a macOS per a VS Code. L'ordre
codeha d'estar disponible alPATH. S'activa des del mateix VS Code amb la paleta d'ordres (Cmd+Shift+P) → Shell Command: Install 'code' command in PATH.
- Finals de línia:
core.autocrlf i core.eol
core.autocrlf i core.eolAquest és l'ajust que més problemes causa en equips amb sistemes operatius mixtos, i gestor-tasques és exactament aquest cas: l'Ana a Linux, en Bruno a macOS i la Carla a Windows.
El problema
Els sistemes operatius marquen el final de línia de manera diferent:
| Sistema | Marca | Nom | Bytes |
|---|---|---|---|
| Linux, macOS | LF |
Line Feed | \n |
| Windows | CRLF |
Carriage Return + Line Feed | \r\n |
Per a Git, que compara continguts byte a byte, un fitxer amb LF i el mateix fitxer amb CRLF són continguts diferents, amb hashos diferents. Sense tractament, passa això: la Carla clona el projecte a Windows, el seu editor converteix els finals de línia en desar i de sobte Git li indica que els quatre fitxers estan modificats de dalt a baix, encara que no hagi canviat ni una paraula. La seva confirmació següent canviarà el 100 % de les línies i farà il·legible qualsevol revisió de codi.
La solució: normalitzar al repositori
La convenció universal és desar sempre LF dins del repositori i convertir al vol als sistemes que ho necessitin.
# A Windows
git config --global core.autocrlf true
# A Linux i macOS
git config --global core.autocrlf inputQuè fa cada valor exactament:
| Valor | En confirmar (working tree → repositori) | En obtenir (repositori → working tree) | Per a |
|---|---|---|---|
true |
Converteix CRLF → LF |
Converteix LF → CRLF |
Windows |
input |
Converteix CRLF → LF |
No converteix res | Linux, macOS |
false |
No converteix res | No converteix res | Desactivat |
Amb aquesta configuració, el repositori sempre conté LF, la Carla veu CRLF al seu disc com espera Windows, i l'Ana i en Bruno veuen LF. Ningú no percep canvis falsos.
core.eol
És un ajust complementari que defineix quin final de línia s'escriu al disc per als fitxers marcats explícitament com a text:
Valors possibles: lf, crlf o native (el del sistema, que és el valor per defecte). Només entra en joc quan core.autocrlf és false i hi ha atributs de fitxer definits.
La solució definitiva: .gitattributes
core.autocrlf és una configuració personal: depèn que cada membre de l'equip l'hagi posada bé a la seva màquina. La solució robusta és un fitxer .gitattributes versionat dins del projecte, que imposa la norma a tothom independentment de la seva configuració:
Aquest fitxer es tracta en profunditat al mòdul 8, a la lliçó Atributs de Fitxer amb .gitattributes. Menciona'l aquí com la meta a la qual arribar; core.autocrlf és la xarxa de seguretat individual mentrestant.
- Comportament en integrar:
pull.rebase
pull.rebaseQuan descarregues canvis del remot i la teva branca local també ha avançat, Git ha d'integrar les dues línies. Hi ha tres maneres de fer-ho, i des de la versió 2.27 Git es nega a triar per tu: mostra un avís i exigeix que configuris quina prefereixes.
# Opció 1: fusionar (comportament clàssic)
git config --global pull.rebase false
# Opció 2: rebase (historial lineal)
git config --global pull.rebase true
# Opció 3: només avanç ràpid; falla si cal integrar
git config --global pull.ff only| Valor | Què fa | Avantatge | Inconvenient |
|---|---|---|---|
pull.rebase false |
Crea una confirmació de fusió | No reescriu res, segur | Genera confirmacions de fusió sorolloses |
pull.rebase true |
Reaplica les teves confirmacions locals a sobre | Historial lineal i llegible | Reescriu les teves confirmacions locals |
pull.ff only |
Només integra si no hi ha divergència | Mai no fa res inesperat | Obliga a resoldre a mà quan divergeix |
Recomanació per començar: pull.ff only. És l'opció més conservadora: quan no hi ha conflicte de línies de desenvolupament, integra sense soroll; quan n'hi ha, s'atura i et diu que decideixis. Així aprens a reconèixer la situació en lloc que Git prengui una decisió silenciosa que encara no entens.
Molts equips experimentats prefereixen pull.rebase true per mantenir l'historial lineal. És una elecció legítima, però implica entendre el rebase i els seus riscos, que es tracten al mòdul 5. Quan hi arribis podràs canviar el valor amb coneixement de causa.
Ajust complementari, molt recomanable si més endavant actives el rebase automàtic:
Desa temporalment els canvis sense confirmar abans del rebase i els restaura després, evitant l'error "no pots fer rebase amb canvis pendents". El desament temporal (stash) es tracta al mòdul 5.
- Comportament en enviar:
push.default
push.defaultDetermina quines branques s'envien quan executes git push sense arguments.
simple és el valor per defecte des de Git 2.0 i el recomanat: envia només la branca actual, i únicament si el seu nom coincideix amb el de la branca remota que segueix. És el comportament menys sorprenent.
| Valor | Què envia |
|---|---|
simple |
Només la branca actual, si els noms coincideixen (per defecte, recomanat) |
current |
Només la branca actual, creant-la al remot si no existeix |
upstream |
La branca actual a la seva branca de seguiment, encara que es digui diferent |
matching |
Totes les branques locals que existeixin al remot (perillós; era el valor per defecte abans de la 2.0) |
nothing |
Res; obliga a indicar sempre la branca |
Un complement molt pràctic:
Disponible des de Git 2.37, fa que en enviar per primer cop una branca nova, Git configuri automàticament la seva branca de seguiment en lloc de fallar amb el missatge fatal: The current branch X has no upstream branch. Estalvia escriure git push --set-upstream origin <branca> cada vegada que es crea una branca, cosa que en un flux de treball per branques passa a diari.
Els remots i l'enviament de canvis són el contingut del mòdul 4; aquí només deixem el terreny preparat.
- Credencials:
credential.helper
credential.helperQuan treballis amb repositoris remots per HTTPS, Git demanarà usuari i contrasenya —en realitat, un token d'accés— a cada operació. Un gestor de credencials les desa de manera segura per no haver-les de repetir.
# Windows (ve amb Git for Windows)
git config --global credential.helper manager
# macOS: fa servir el Clauer del sistema
git config --global credential.helper osxkeychain
# Linux amb GNOME Keyring
git config --global credential.helper /usr/share/doc/git/contrib/credential/libsecret/git-credential-libsecret
# Qualsevol sistema: memòria cau durant una hora
git config --global credential.helper 'cache --timeout=3600'| Gestor | On desa | Seguretat |
|---|---|---|
manager (Windows) |
Gestor de credencials de Windows | Xifrat pel sistema |
osxkeychain (macOS) |
Clauer de macOS | Xifrat pel sistema |
libsecret (Linux) |
Magatzem de secrets de l'escriptori | Xifrat pel sistema |
cache |
Memòria RAM, amb caducitat | Bo; es perd en reiniciar |
store |
Fitxer de text pla a ~/.git-credentials |
Dolent: no el facis servir |
Advertència sobre
store. Desa les credencials sense xifrar, en text llegible. Apareix en molts tutorials per ser la més senzilla i és una mala pràctica de seguretat. El mòdul 8 dedica una lliçó a les millors pràctiques de seguretat.
L'alternativa a tot això és fer servir SSH en lloc d'HTTPS, amb claus criptogràfiques en lloc de contrasenyes. És el que solen preferir els equips, i es tracta al mòdul 4, a la lliçó d'autenticació amb repositoris remots.
- Color i idioma de la sortida
Color
auto activa el color quan la sortida va a un terminal i el desactiva quan va a un fitxer o a un altre programa, evitant que apareguin codis d'escapada als bolcats. Sol venir actiu per defecte a Git modern, però fixar-lo explícitament no està de més.
Es pot afinar per ordre:
git config --global color.branch auto
git config --global color.diff auto
git config --global color.status autoI personalitzar colors concrets, amb la sintaxi <color de text> <color de fons> <atribut>:
git config --global color.status.changed "yellow"
git config --global color.status.untracked "red bold"
git config --global color.diff.meta "blue black bold"És opcional i qüestió de gust; amb color.ui auto n'hi ha prou per treballar còmodament.
Idioma de la sortida
Git tradueix els seus missatges a l'idioma del sistema si la traducció està disponible. En un sistema en català veuràs missatges com:
A la branca main Encara no hi ha cap comissió no hi ha res per cometre (creeu/copieu fitxers i useu "git add" per a seguir-los)
Aquí hi ha una decisió pràctica a prendre. La recomanació d'aquest curs és deixar la sortida de Git en anglès, per tres raons concretes:
- Gairebé tota la documentació, els manuals i les respostes que trobaràs en cercar un missatge d'error són en anglès. Cercar el text exacte d'un error traduït rarament dona resultats.
- Les traduccions són parcials: veuràs missatges barrejats en dos idiomes.
- Els exemples d'aquest curs i de qualsevol material tècnic mostren la sortida en anglès.
Per forçar-ho:
# Només per a una ordre puntual
LC_ALL=C git status
# De manera permanent a la sessió: afegir-ho al ~/.bashrc o ~/.zshrc
export LC_ALL=CSi prefereixes mantenir la resta del sistema en català i afectar només Git, existeix una variable específica:
A Windows, Git Bash fa servir l'idioma de l'instal·lador; la variable d'entorn funciona igualment si es defineix al fitxer d'arrencada del shell.
L'Ana decideix deixar-ho en anglès perquè els missatges coincideixin amb la documentació.
- Taula resum d'ajustos recomanats
Aquest és el conjunt complet que l'Ana aplica al seu portàtil, amb la justificació de cadascun:
| Clau | Valor recomanat | Obligatori | Per què |
|---|---|---|---|
user.name |
El teu nom complet | Sí | Sense ell no es pot confirmar |
user.email |
El teu correu | Sí | Vincula la confirmació amb el teu compte |
init.defaultBranch |
main |
No, molt recomanable | Coherència amb l'estàndard del sector |
core.editor |
code --wait, nano… |
No, molt recomanable | Evita quedar atrapat a Vim |
core.autocrlf |
true (Windows) / input (Linux, macOS) |
No, molt recomanable | Evita canvis falsos en equips mixtos |
pull.ff |
only |
No, recomanable | Impedeix integracions inesperades |
push.default |
simple |
No, recomanable | Envia només la branca actual |
push.autoSetupRemote |
true |
No, còmode | Evita --set-upstream a cada branca nova |
credential.helper |
Segons el sistema | No, còmode | No repetir credencials |
color.ui |
auto |
No, còmode | Sortida llegible |
rebase.autoStash |
true |
No, còmode | Evita errors per canvis pendents |
core.pager |
less -FRX |
No, opcional | Evita el paginador amb sortides curtes |
I aquí està tot junt, tal com l'Ana ho executa al seu portàtil Linux. Pots copiar aquest bloc canviant el nom, el correu i l'editor:
# --- Identitat (obligatori) ---
git config --global user.name "Ana Ferrer"
git config --global user.email "[email protected]"
# --- Comportament bàsic ---
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
# --- Finals de línia (Linux/macOS; a Windows: true) ---
git config --global core.autocrlf input
# --- Integració i enviament ---
git config --global pull.ff only
git config --global push.default simple
git config --global push.autoSetupRemote true
git config --global rebase.autoStash true
# --- Comoditats ---
git config --global color.ui auto
git config --global credential.helper 'cache --timeout=3600'El fitxer ~/.gitconfig resultant:
[user]
name = Ana Ferrer
email = [email protected]
[init]
defaultBranch = main
[core]
editor = code --wait
autocrlf = input
[pull]
ff = only
[push]
default = simple
autoSetupRemote = true
[rebase]
autoStash = true
[color]
ui = auto
[credential]
helper = cache --timeout=3600Dotze línies de configuració que eviten la majoria de les ensopegades habituals dels primers mesos.
- Comprovació final de l'equip de l'Ana
Abans de donar l'equip per llest, l'Ana verifica que tot sigui al seu lloc. Aquestes són les ordres de comprovació, amb la sortida esperada.
Pas 1: Git està instal·lat i és recent
Pas 2: La identitat està definida
git config --get user.name
# → Ana Ferrer
git config --get user.email
# → [email protected]Si algun dels dos no retorna res, falta per configurar i Git no permetrà confirmar.
Pas 3: Repàs complet amb origen
Mostra cada clau amb el fitxer del qual procedeix. És el moment de detectar errates: repassa que els noms de clau siguin exactament els de la taula de l'apartat 9.
Pas 4: Verificar que l'editor funciona
S'ha d'obrir el teu editor amb el contingut de ~/.gitconfig. Tanca'l sense desar. Si s'obre Vim en lloc del teu editor, o si l'ordre retorna el control instantàniament sense obrir res, revisa core.editor i comprova que inclou l'opció d'espera (--wait, -w).
Pas 5: Comprovació de la branca per defecte
Llista de verificació
| Comprovació | Ordre | Resultat esperat |
|---|---|---|
| Git instal·lat | git --version |
Una versió 2.30 o superior |
| Nom | git config --get user.name |
El teu nom |
| Correu | git config --get user.email |
El teu correu |
| Branca per defecte | git config --get init.defaultBranch |
main |
| Editor | git config --global --edit |
S'obre el teu editor i Git espera |
| Finals de línia | git config --get core.autocrlf |
input o true segons el sistema |
| Sense errates | git config --global --list |
Només claus recognoscibles |
Amb les set caselles marcades, el portàtil de l'Ana està llest.
Errors Habituals i Consells
- Començar a confirmar sense configurar la identitat. És l'error més costós del mòdul, perquè corregir l'autor de confirmacions ja fetes obliga a reescriure l'historial. Configura
user.nameiuser.emailabans de crear el teu primer repositori. - Configurar un editor gràfic sense l'opció d'espera.
codeen lloc decode --waitfa que Git rebi un missatge buit i avorti l'operació. El símptoma és "l'editor s'obre i Git diu que el missatge està buit". - Ignorar els finals de línia fins que l'equip és mixt. Quan la Carla entra al projecte des de Windows sense
core.autocrlf, la seva primera confirmació apareix canviant el 100 % de les línies de tots els fitxers. Configura-ho des del principi i, tan bon punt hi hagi un projecte compartit, afegeix-hi un.gitattributes(mòdul 8). - Fer servir
credential.helper store. Desa les contrasenyes en text pla a la teva carpeta personal. Fes servir el gestor natiu del teu sistema o, millor, SSH. - Escriure la configuració al nivell local sense voler. Com vam veure a la lliçó anterior, ometre
--globalescriu a.git/config. Per a la identitat i les preferències personals, el nivell correcte és sempre el global. - Copiar blocs de configuració d'internet sense entendre'ls. Apareixen ajustos exòtics que canvien comportaments importants i després produeixen efectes difícils d'explicar. Afegeix opcions d'una en una, sabent què fa cadascuna.
- Consell: revisa la configuració en canviar de màquina o d'empresa. Un portàtil corporatiu pot portar valors al nivell de sistema (proxies, gestors de credencials, plantilles) que no esperes.
git config --list --show-origin --show-scopeés el primer que convé mirar. - Consell: versiona el teu
~/.gitconfig. És un fitxer de text petit que representa molts ajustos acumulats. Desar-lo en un repositori propi et permet replicar el teu entorn en qualsevol màquina nova en un minut.
Exercicis
Exercici 1: Configurar el teu propi equip
Aplica a la teva màquina la configuració completa recomanada, adaptant-la al teu cas:
- Fixa la teva identitat amb el teu nom real i el teu correu.
- Fixa
maincom a branca per defecte. - Configura l'editor que sàpigues fer servir, amb l'opció d'espera si és gràfic.
- Configura
core.autocrlfamb el valor correcte per al teu sistema operatiu. - Fixa
pull.ff only,push.default simpleicolor.ui auto. - Executa les cinc comprovacions de l'apartat 10 i anota la sortida de cadascuna.
- Mostra el contingut resultant del teu
~/.gitconfigi compara'l amb el de l'Ana.
Exercici 2: L'equip complet
L'equip de gestor-tasques és heterogeni:
- Ana: Ubuntu, editor VS Code, correu
[email protected]. - Bruno: macOS, editor Vim, correu
[email protected]. A més vol que les credencials HTTPS es desin al Clauer del sistema. - Carla: Windows 11 amb Git Bash, editor Notepad++, correu
[email protected]. Treballa també en projectes d'una altra empresa que desa aC:\Users\carla\empresa\i que han de fer servir el correu[email protected].
Escriu la seqüència d'ordres de configuració per a cadascun. Presta especial atenció a core.autocrlf a cada sistema i, per a la Carla, resol el cas dels dos correus fent servir el que has après a la lliçó Configurant Git.
Exercici 3: Diagnosticar una configuració trencada
Un company acabat d'incorporar es queixa de tres problemes diferents i t'ensenya el resultat de git config --global --list:
user.name=Nou Company [email protected] core.editor=code init.defaultbranch=main pull.rebase=true
Les seves queixes són:
- "Git no em deixa fer commits, diu que no sap qui soc."
- "Quan escric un missatge llarg, s'obre VS Code però Git diu immediatament que el missatge està buit."
- "En integrar canvis del remot, les meves confirmacions canvien d'identificador i el meu company diu que li he esguerrat l'historial."
Per a cada queixa: identifica la causa exacta en aquesta configuració, escriu l'ordre que la corregeix i explica breument el perquè. Indica també si hi ha alguna cosa en aquesta llista que no sigui un problema encara que ho sembli.
Solucions
Solució a l'Exercici 1
Exemple de resolució per a una usuària a Linux anomenada Marta Pons:
# 1. Identitat
git config --global user.name "Marta Pons"
git config --global user.email "[email protected]"
# 2. Branca per defecte
git config --global init.defaultBranch main
# 3. Editor (nano, sense opció d'espera perquè és de terminal)
git config --global core.editor "nano"
# 4. Finals de línia: Linux → input
git config --global core.autocrlf input
# 5. Resta d'ajustos
git config --global pull.ff only
git config --global push.default simple
git config --global color.ui auto
# 6. Comprovacions
git --version
git config --get user.name
git config --get user.email
git config --get init.defaultBranch
git config --global --list --show-origin
# 7. Contingut del fitxer
git config --global --edit # o bé: cat ~/.gitconfigEl punt 4 és el que més varia: a Windows ha de ser true, no input. El punt 3 només necessita l'opció d'espera si l'editor és gràfic (code --wait, subl -n -w); els editors de terminal com nano o vim bloquegen per naturalesa.
Solució a l'Exercici 2
Ana — Ubuntu
git config --global user.name "Ana Ferrer"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global core.editor "code --wait"
git config --global core.autocrlf input
git config --global pull.ff only
git config --global push.default simple
git config --global color.ui autoBruno — macOS
git config --global user.name "Bruno Salas"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global core.editor "vim"
git config --global core.autocrlf input
git config --global pull.ff only
git config --global push.default simple
git config --global color.ui auto
# Credencials al Clauer de macOS
git config --global credential.helper osxkeychaincore.autocrlf és input igual que a Linux, perquè macOS també fa servir LF. Vim no necessita opció d'espera.
Carla — Windows 11
git config --global user.name "Carla Vidal"
git config --global user.email "[email protected]"
git config --global init.defaultBranch main
git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"
# Windows: true, no input
git config --global core.autocrlf true
git config --global pull.ff only
git config --global push.default simple
git config --global color.ui auto
git config --global credential.helper managerI per al segon correu, editant ~/.gitconfig (que a Windows és a C:\Users\carla\.gitconfig) per afegir-hi al final:
Amb el fitxer ~/.gitconfig-altraempresa:
[user]
email = [email protected]Tres detalls importants a la solució de la Carla:
- Es fa servir
gitdir/i:en lloc degitdir:perquè el sistema de fitxers de Windows no distingeix majúscules i la variant insensible evita fallades per diferències de capitalització a la ruta. - La ruta s'escriu amb barres normals (
/), no invertides, encara que sigui Windows: Git fa servir sempre barres normals als seus fitxers de configuració. - La ruta acaba en
/, requisit perquè la coincidència sigui recursiva.
Comprovació des de qualsevol repositori de C:\Users\carla\empresa\:
git config --get user.email
# → [email protected]Solució a l'Exercici 3
Queixa 1 — "no sap qui soc"
- Causa: la clau està mal escrita. Diu
user.emialen lloc deuser.email. Com que Git no valida els noms de clau, la va desar sense protestar iuser.emailcontinua sense estar definit. - Correcció:
git config --global --unset user.emial
git config --global user.email "[email protected]"Queixa 2 — "el missatge està buit"
- Causa:
core.editor=codeno porta l'opció--wait. VS Code s'obre i retorna el control a Git immediatament, així que Git llegeix el fitxer de missatge abans que s'hi hagi escrit res i avorta per missatge buit. - Correcció:
Queixa 3 — "li he esguerrat l'historial"
- Causa:
pull.rebase=truereaplica les confirmacions locals sobre les descarregades, cosa que crea confirmacions noves amb hash diferent, com vam veure a El Model de Dades de Git. Si aquestes confirmacions ja estaven compartides, el company es troba amb historials divergents. No és un valor "incorrecte" en si mateix —molts equips el fan servir deliberadament— però no és apropiat per a algú que comença i encara no distingeix quan és segur. - Correcció per a un principiant:
Així, si en integrar apareix divergència, Git s'atura i avisa en lloc de reescriure res. Quan el company arribi al mòdul 5 podrà tornar a activar el rebase amb criteri.
El que NO és un problema: la línia init.defaultbranch=main. Les claus de configuració no distingeixen majúscules ni a la secció ni al nom, així que init.defaultbranch i init.defaultBranch són exactament la mateixa clau. De fet, Git normalitza el nom a minúscules en llistar la configuració, així que aquesta línia apareixerà així encara que s'escrivís amb la majúscula. Funciona perfectament.
Conclusió
El portàtil de l'Ana està llest. Hem fixat els dos valors obligatoris —user.name i user.email, que identifiquen l'autor a cada confirmació i que convé encertar abans de la primera, perquè corregir-los després obliga a reescriure l'historial— i una dotzena d'ajustos molt recomanables: init.defaultBranch=main per alinear-se amb l'estàndard del sector, core.editor per no quedar atrapat en un editor desconegut, core.autocrlf perquè un equip amb Linux, macOS i Windows no generi canvis falsos a cada fitxer, pull.ff only perquè Git no integri mai de manera inesperada, push.default i push.autoSetupRemote perquè enviar canvis sigui predictible, un gestor de credencials segur i el color de la sortida.
Amb això tanquem el mòdul 1. En aquestes sis lliçons hem recorregut el camí complet des del desconeixement fins a un entorn preparat:
- Per què existeix Git i què el diferencia dels sistemes centralitzats, amb
gestor-tasquescom a projecte guia. - Com instal·lar-lo a Linux, macOS i Windows, i per què farem servir la línia d'ordres.
- El vocabulari: tres zones, tres estats, referències, remots, fusió i rebase.
- El model de dades: blobs, arbres, commits i etiquetes enllaçats per hash, i la immutabilitat que se'n deriva.
- El mecanisme de configuració: tres nivells, precedència i perfils condicionals.
- Els valors concrets que deixen l'equip llest per treballar.
Saps què és Git, el tens instal·lat, entens com desa la informació i està configurat a la teva mida. Només falta fer-lo servir.
Al mòdul 2: Operacions Bàsiques de Git comença la feina de veritat. L'Ana convertirà per fi la seva carpeta gestor-tasques en un repositori amb Creant un Repositori, aprendrem a clonar un repositori existent, recorrerem el flux de treball bàsic que connecta les tres zones que ja coneixes, i practicarem a fons com preparar i confirmar canvis, inspeccionar diferències i llegir l'historial. Tot el que has après aquí sobre les tres zones, els objectes i les referències començarà a veure's en acció.
Dominant Git: De Principiant a Avançat
Mòdul 1: Introducció a Git
- Què és Git?
- Instal·lant Git
- Terminologia Bàsica de Git
- El Model de Dades de Git
- Configurant Git
- Configuració Inicial
Mòdul 2: Operacions Bàsiques de Git
- Creant un Repositori
- Clonant un Repositori
- Flux de Treball Bàsic de Git
- Preparant i Confirmant Canvis
- Inspeccionant Canvis amb git diff
- Visualitzant l'Historial de Confirmacions
Mòdul 3: Branques i Fusió
- Entenent les Branques
- Creant i Canviant Branques
- Fusionant Branques
- Estratègies de Fusió
- Resolent Conflictes de Fusió
- Gestió de Branques
Mòdul 4: Treballant amb Repositoris Remots
- Entenent els Repositoris Remots
- Afegint un Repositori Remot
- Autenticació amb Repositoris Remots
- Obtenint i Baixant Canvis
- Enviant Canvis
- Rastrejant Branques
Mòdul 5: Operacions Avançades de Git
- Rebase
- Rebase Interactiu
- Cherry-Picking de Confirmacions
- Desant Canvis Temporals
- Etiquetant Confirmacions
- Revertint Confirmacions
Mòdul 6: Eines i Tècniques de Git
- Usant Git Hooks
- Git Bisect
- Git Blame
- Git Log i Àlies
- Submòduls de Git
- Múltiples Còpies de Treball amb git worktree
Mòdul 7: Estratègies de Col·laboració i Flux de Treball
- Forks i Pull Requests
- Revisions de Codi amb Git
- Flux de Treball Git Flow
- GitHub Flow
- Trunk Based Development
- Integració Contínua amb Git
Mòdul 8: Bones Pràctiques i Consells de Git
- Escrivint Bons Missatges de Confirmació
- Mantenint un Historial Net
- Ignorant Fitxers amb .gitignore
- Atributs de Fitxer amb .gitattributes
- Bones Pràctiques de Seguretat
- Consells de Rendiment
Mòdul 9: Resolució de Problemes i Depuració
- Problemes Habituals de Git
- Desfent Canvis
- Resolent Divergències amb el Remot
- Recuperant Confirmacions Perdudes
- Tractant amb Repositoris Corruptes
- Tècniques Avançades de Depuració
