Tutorial de abapGit: Control de versiones para ABAP

Kategorie
ABAP-Statements
Veröffentlicht
Autor
Johannes

abapGit es una herramienta open source que permite usar Git para código ABAP. Este tutorial te guía desde la instalación hasta flujos de trabajo avanzados.

Instalación

Paso 1: Descargar abapGit

  1. Accede a abapGit.org
  2. Descarga el archivo zabapgit_standalone.prog.abap
  3. Crea un nuevo programa en SE80/ADT
  4. Copia el código
  5. Activa el programa

Paso 2: Ejecutar abapGit

Transacción: SE38
Programa: ZABAPGIT_STANDALONE
Ejecutar (F8)

Paso 3: Configuración inicial

En abapGit:
1. Settings -> Personal Settings
2. Configurar:
- Git username
- Git email
- Default branch: main

Conectar con GitHub

Crear token de acceso

En GitHub:
1. Settings -> Developer settings -> Personal access tokens
2. Generate new token (classic)
3. Permisos: repo (full control)
4. Copiar token

Configurar credenciales en abapGit

En abapGit:
1. Settings -> Git -> Credentials
2. URL: https://github.com
3. Username: tu_usuario
4. Password: tu_token

Clonar un repositorio

Paso 1: Obtener URL del repositorio

En GitHub:
1. Ir al repositorio
2. Click en "Code"
3. Copiar URL HTTPS

Paso 2: Clonar en abapGit

En abapGit:
1. "+ Clone"
2. URL: https://github.com/usuario/repositorio.git
3. Package: $TMP o paquete propio
4. Branch: main
5. "Clone"

Crear repositorio desde código existente

Paso 1: Crear repositorio en GitHub

En GitHub:
1. New repository
2. Nombre: mi-proyecto-abap
3. Visibility: Private/Public
4. NO crear README (importante)
5. Create repository

Paso 2: Conectar paquete ABAP

En abapGit:
1. "+ New Online"
2. URL: https://github.com/usuario/mi-proyecto-abap.git
3. Package: ZMIPROYECTO
4. "Create"

Paso 3: Push inicial

En abapGit:
1. Seleccionar repositorio
2. "Stage"
3. Seleccionar todos los objetos
4. Commit message: "Initial commit"
5. "Commit & Push"

Flujo de trabajo básico

Pull (obtener cambios)

1. Seleccionar repositorio
2. "Pull"
3. Revisar objetos a actualizar
4. "Pull"
5. Los objetos se actualizan en el sistema

Stage y Commit

1. Modificar objetos en SE80/ADT
2. En abapGit: seleccionar repositorio
3. "Stage"
4. Ver cambios (diff)
5. Seleccionar archivos a incluir
6. Escribir mensaje de commit
7. "Commit"

Push (enviar cambios)

1. Después de commit
2. "Push"
3. Los cambios se envían a GitHub

Trabajar con ramas

Crear nueva rama

En abapGit:
1. Seleccionar repositorio
2. "Branch" dropdown
3. "Create branch"
4. Nombre: feature/nueva-funcionalidad
5. "Create"

Cambiar de rama

En abapGit:
1. Seleccionar repositorio
2. "Branch" dropdown
3. Seleccionar rama deseada
4. "Switch"
5. El código local se actualiza

Merge de ramas

En GitHub (recomendado):
1. Crear Pull Request
2. Review
3. Merge
O en línea de comandos local:
git checkout main
git merge feature/mi-rama
git push

Resolución de conflictos

Detectar conflictos

Al hacer Pull:
- abapGit muestra "Conflict" en archivos afectados
- Los archivos tienen marcadores de conflicto

Resolver manualmente

1. Identificar archivo en conflicto
2. Editar en SE80/ADT
3. Decidir qué versión mantener
4. Guardar y activar
5. Stage de nuevo
6. Commit con mensaje "Resolve conflict"

Configuración de .abapgit.xml

<?xml version="1.0" encoding="utf-8"?>
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<DATA>
<MASTER_LANGUAGE>E</MASTER_LANGUAGE>
<STARTING_FOLDER>/src/</STARTING_FOLDER>
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
<IGNORE>
<item>/.gitignore</item>
<item>/LICENSE</item>
<item>/README.md</item>
<item>/*.png</item>
</IGNORE>
</DATA>
</asx:values>
</asx:abap>

Estructura de carpetas

repositorio/
├── .abapgit.xml
├── README.md
├── LICENSE
└── src/
├── zcl_my_class.clas.abap
├── zcl_my_class.clas.xml
├── zif_my_interface.intf.abap
├── zif_my_interface.intf.xml
├── zi_my_cds.ddls.asddls
└── zi_my_cds.ddls.xml

Mejores prácticas

Commits

Formato de mensaje:
<tipo>: <descripción corta>
<descripción detallada opcional>
Tipos:
- feat: Nueva funcionalidad
- fix: Corrección de bug
- refactor: Refactorización
- docs: Documentación
- test: Tests

Ejemplo de commit

feat: Add customer validation
- Validate customer ID format
- Check customer exists in KNA1
- Return descriptive error messages

Ignorar archivos

Crear .gitignore:

# Archivos generados
*.bak
*.tmp
# Configuración local
.abapgit_local.xml
# IDE
.project
.settings/

Integración con CI/CD

GitHub Actions con abaplint

.github/workflows/abaplint.yml
name: abaplint
on: [push, pull_request]
jobs:
abaplint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: abaplint/abaplint-action@v1

Configuración abaplint

abaplint.json
{
"global": {
"files": "/src/**/*.*"
},
"syntax": {
"version": "Cloud",
"errorNamespace": "^(Z|Y)"
},
"rules": {
"line_length": {
"length": 120
},
"avoid_use": {
"define": true,
"statics": true
}
}
}

Comandos frecuentes

AcciónPasos
Clonar+ Clone -> URL -> Package -> Clone
PullSeleccionar repo -> Pull
PushStage -> Commit -> Push
Nueva ramaBranch -> Create branch
Ver diffStage -> Click en archivo
HistóricoRepository -> Log

Resolución de problemas

Error de autenticación

Solución:
1. Verificar token en GitHub
2. Settings -> Git -> Credentials
3. Actualizar password con nuevo token

Objetos no aparecen

Solución:
1. Verificar que el paquete es correcto
2. Check que los objetos están activos
3. "Refresh" en abapGit

Conflicto de versiones

Solución:
1. Hacer backup local
2. Pull forzado (sobrescribe local)
3. Re-aplicar cambios manualmente

Notas importantes / Mejores prácticas

  • No commits directos a main - usar ramas y Pull Requests.
  • Mensajes de commit descriptivos - facilita el histórico.
  • Pull antes de Push - evita conflictos.
  • Revisar diffs antes de commit.
  • Usar abaplint para validación automática.
  • Tokens con fecha de expiración - renovar regularmente.
  • Ver también abapGit Referencia.