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

  1. La identitat: user.name i user.email
  2. La branca per defecte: init.defaultBranch
  3. L'editor: core.editor
  4. Finals de línia: core.autocrlf i core.eol
  5. Comportament en integrar: pull.rebase
  6. Comportament en enviar: push.default
  7. Credencials: credential.helper
  8. Color i idioma de la sortida
  9. Taula resum d'ajustos recomanats
  10. Comprovació final de l'equip de l'Ana

  1. La identitat: 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:

  • --global escriu 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ò.

  1. La branca per defecte: init.defaultBranch

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

git config --global init.defaultBranch main

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.

  1. L'editor: core.editor

Git 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:

  • --wait a VS Code, -w a 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:

git config --global core.editor "code --wait"

Requisit a macOS per a VS Code. L'ordre code ha d'estar disponible al PATH. S'activa des del mateix VS Code amb la paleta d'ordres (Cmd+Shift+P) → Shell Command: Install 'code' command in PATH.

  1. Finals de línia: core.autocrlf i core.eol

Aquest é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 input

Què fa cada valor exactament:

Valor En confirmar (working tree → repositori) En obtenir (repositori → working tree) Per a
true Converteix CRLFLF Converteix LFCRLF Windows
input Converteix CRLFLF 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:

git config --global core.eol lf

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ó:

* text=auto
*.js text eol=lf
*.css text eol=lf
*.html text eol=lf
*.md text eol=lf
*.png binary

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.

  1. Comportament en integrar: pull.rebase

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

git config --global pull.ff only

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:

git config --global rebase.autoStash true

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.

  1. Comportament en enviar: push.default

Determina quines branques s'envien quan executes git push sense arguments.

git config --global push.default simple

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:

git config --global push.autoSetupRemote true

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.

  1. Credencials: credential.helper

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

  1. Color i idioma de la sortida

Color

git config --global color.ui auto

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 auto

I 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:

  1. 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.
  2. Les traduccions són parcials: veuràs missatges barrejats en dos idiomes.
  3. 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=C

Si prefereixes mantenir la resta del sistema en català i afectar només Git, existeix una variable específica:

export LANGUAGE=en

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

  1. 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 Sense ell no es pot confirmar
user.email El teu correu 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=3600

Dotze línies de configuració que eviten la majoria de les ensopegades habituals dels primers mesos.

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

git --version
# → git version 2.51.0

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

git config --global --list --show-origin

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

git config --global --edit

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

git config --get init.defaultBranch
# → main

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.name i user.email abans de crear el teu primer repositori.
  • Configurar un editor gràfic sense l'opció d'espera. code en lloc de code --wait fa 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 --global escriu 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:

  1. Fixa la teva identitat amb el teu nom real i el teu correu.
  2. Fixa main com a branca per defecte.
  3. Configura l'editor que sàpigues fer servir, amb l'opció d'espera si és gràfic.
  4. Configura core.autocrlf amb el valor correcte per al teu sistema operatiu.
  5. Fixa pull.ff only, push.default simple i color.ui auto.
  6. Executa les cinc comprovacions de l'apartat 10 i anota la sortida de cadascuna.
  7. Mostra el contingut resultant del teu ~/.gitconfig i 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 a C:\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:

  1. "Git no em deixa fer commits, diu que no sap qui soc."
  2. "Quan escric un missatge llarg, s'obre VS Code però Git diu immediatament que el missatge està buit."
  3. "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 ~/.gitconfig

El 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 auto

Bruno — 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 osxkeychain

core.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 manager

I per al segon correu, editant ~/.gitconfig (que a Windows és a C:\Users\carla\.gitconfig) per afegir-hi al final:

[includeIf "gitdir/i:C:/Users/carla/empresa/"]
	path = ~/.gitconfig-altraempresa

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 de gitdir: 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.emial en lloc de user.email. Com que Git no valida els noms de clau, la va desar sense protestar i user.email continua 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=code no 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ó:
git config --global core.editor "code --wait"

Queixa 3 — "li he esguerrat l'historial"

  • Causa: pull.rebase=true reaplica 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:
git config --global --unset pull.rebase
git config --global pull.ff only

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 obligatorisuser.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-tasques com 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

Mòdul 2: Operacions Bàsiques de Git

Mòdul 3: Branques i Fusió

Mòdul 4: Treballant amb Repositoris Remots

Mòdul 5: Operacions Avançades de Git

Mòdul 6: Eines i Tècniques de Git

Mòdul 7: Estratègies de Col·laboració i Flux de Treball

Mòdul 8: Bones Pràctiques i Consells de Git

Mòdul 9: Resolució de Problemes i Depuració

Mòdul 10: Git al Món Real

© Copyright 2026. Tots els drets reservats