Volver a la lista

Gestionar las versiones del código experimental con Git.

Cómo gestionar el código de análisis y los registros de experimentos con Git. Introducción al control de versiones adaptado a investigadores en biología.

Principiante
|
75min
|
Verificado (2026-06)
Control de versionesReproducibilidadProtocoloNotas de laboratorioGitHub
Progreso0/7 (0%)

Uso de Git para gestionar las versiones del código de los experimentos

Al finalizar este tema

Podrás registrar el historial de cambios del código de análisis con Git, volver a versiones anteriores y realizar copias de seguridad en GitHub.


¿Por qué es necesario Git?

¿Has visto alguna vez estos nombres de archivo en el laboratorio?

text
analysis_final.py
analysis_final_v2.py
analysis_final_v2_revisado_profesor.py
analysis_final_v2_revisado_profesor_ahora_si_final.py

Git guarda todo el historial de cambios en un solo archivo. No es necesario copiar el archivo.

Instalación y configuración inicial

Git ya está instalado en Google Colab. Solo hay que configurar el nombre y el correo electrónico.

bash
git config --global user.name "Your Name"
git config --global user.email "your@email.com"
# Comprueba la configuración
git config --list --global | grep user

Crear el primer repositorio

git init es como abrir un nuevo cuaderno de laboratorio en blanco.

bash
# Crea un directorio de práctica e inicializa Git
mkdir -p /tmp/bio-analysis && cd /tmp/bio-analysis
git init
# Se crea la carpeta .git, donde Git guarda el historial
ls -la .git/

Primer commit: tomar una instantánea

Un commit es como poner la fecha en un cuaderno de laboratorio y escribir "hecho hasta aquí".

bash
cd /tmp/bio-analysis
# Crea el script de análisis
cat > gc_analysis.py << 'SCRIPT'
"""Script de análisis de contenido GC v1"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
}
for name, seq in sequences.items():
print(f"{name}: GC={calculate_gc(seq):.1f}%")
SCRIPT
# Tres etapas de Git: trabajo → staging → commit
git add gc_analysis.py # 1. Staging: selecciona los archivos de la instantánea
git status # Comprueba: verde = preparado
git commit -m "feat: versión inicial del script de contenido GC" # 2. Commit: instantánea
# Consulta el historial
git log --oneline

Seguimiento de cambios: visualizar las diferencias con diff

Al igual que se utilizan lápices rojos para marcar los cambios durante la revisión de un documento, git diff muestra qué ha cambiado.

bash
cd /tmp/bio-analysis
# Crea el archivo si todavía no existe
if [ ! -f gc_analysis.py ]; then
git init
cat > gc_analysis.py << 'SCRIPT'
"""Script de análisis de contenido GC v1"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
}
for name, seq in sequences.items():
print(f"{name}: GC={calculate_gc(seq):.1f}%")
SCRIPT
git add gc_analysis.py
git commit -m "feat: versión inicial del script de contenido GC"
fi
# Modifica el script: añade el gen EGFR
cat > gc_analysis.py << 'SCRIPT'
"""Script de análisis de contenido GC v2: añade EGFR"""
def calculate_gc(sequence: str) -> float:
seq = sequence.upper()
gc = seq.count("G") + seq.count("C")
return (gc / len(seq)) * 100
sequences = {
"BRCA1": "ATGGATTTATCTGCTCTTCG",
"TP53": "ATGGAGGAGCCGCAGTCAG",
"EGFR": "ATGCGACCCTCCGGGACGGC",
}
for name, seq in sequences.items():
gc = calculate_gc(seq)
label = "HIGH" if gc > 60 else "NORMAL"
print(f"{name}: GC={gc:.1f}% [{label}]")
SCRIPT
# Comprueba los cambios
git diff gc_analysis.py
# Commit
git add gc_analysis.py
git commit -m "feat: añade EGFR y etiqueta HIGH para GC >= 60 %"
git log --oneline

Deshacer: Un viaje al pasado

Así como volvemos a un protocolo anterior cuando un experimento falla, Git nos permite regresar a cualquier punto en el tiempo.

bash
cd /tmp/bio-analysis
# Crea el entorno si todavía no existe
if [ ! -d .git ]; then
git init
git config user.name "Test" && git config user.email "test@test.com"
echo "v1" > gc_analysis.py
git add gc_analysis.py && git commit -m "v1"
echo "v2" > gc_analysis.py
git add gc_analysis.py && git commit -m "v2"
fi
# Muestra el historial
git log --oneline
# Restaura solo un archivo al estado de un commit anterior
FIRST_COMMIT=$(git log --oneline | tail -1 | cut -d' ' -f1)
echo "Primer commit: $FIRST_COMMIT"
# Comprueba el contenido actual
echo "--- Actual ---"
cat gc_analysis.py
# Consulta el contenido del primer commit antes de restaurar
echo "--- Primer commit ---"
git show $FIRST_COMMIT:gc_analysis.py

Advertencia: git checkout -- nombre_de_archivo deshace las modificaciones y se perderán los cambios no confirmados. Confirme primero los cambios importantes.

.gitignore: Exclusión del seguimiento

Al igual que en un experimento no se guardan los productos intermedios, en Git se excluyen los archivos de datos grandes o los archivos temporales.

bash
cd /tmp/bio-analysis
# Crea .gitignore para un proyecto de biología
cat > .gitignore << 'EOF'
# Datos grandes: no se incluyen en Git
*.fastq
*.fastq.gz
*.bam
*.sam
# Caché de Python
__pycache__/
*.pyc
.ipynb_checkpoints/
# Configuración del entorno, que puede contener datos privados
.env
*.log
# Archivos del sistema operativo
.DS_Store
Thumbs.db
EOF
# Prueba que Git ignore un archivo grande
echo "fake fastq data" > sample.fastq
git status # Correcto si sample.fastq no aparece como Untracked

Inténtelo usted mismo (Ejemplo atenuado)

Complete los espacios en blanco a continuación para completar el flujo de trabajo básico de Git.

Completar espaciosbash
# 1. Crear un repositorio nuevo
git
# 2. Agregar archivos al área de preparación
git analysis.py
# 3. Guardar una instantánea
git -m "first analysis script"

Errores comunes y soluciones

Q: fatal: not a git repository

El directorio actual no es un repositorio Git. Inicialícelo con git init o entre en la carpeta de un repositorio con cd.

Q: nothing to commit, working tree clean

No hay cambios. Modifique un archivo y ejecute git add. Si ya lo hizo, es posible que los cambios ya estén confirmados.

P: Confirmé por error un archivo FASTQ grande

Añada *.fastq a .gitignore y deje de seguir el archivo con git rm --cached sample.fastq; el archivo local no se eliminará.

P: Escribí mal el mensaje del commit

Puede corregir el último mensaje con git commit --amend -m "mensaje nuevo", pero solo si todavía no ha hecho push.


En el siguiente artículo aprenderemos a visualizar datos experimentales con Python.

💬 Preguntas y comentarios

0 comentarios

Puedes publicar sin iniciar sesión. Los comentarios de invitados no pueden editarse ni eliminarse después.

0/2000

Cargando...