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
- Accede a abapGit.org
- Descarga el archivo
zabapgit_standalone.prog.abap - Crea un nuevo programa en SE80/ADT
- Copia el código
- Activa el programa
Paso 2: Ejecutar abapGit
Transacción: SE38Programa: ZABAPGIT_STANDALONEEjecutar (F8)Paso 3: Configuración inicial
En abapGit:1. Settings -> Personal Settings2. Configurar: - Git username - Git email - Default branch: mainConectar con GitHub
Crear token de acceso
En GitHub:1. Settings -> Developer settings -> Personal access tokens2. Generate new token (classic)3. Permisos: repo (full control)4. Copiar tokenConfigurar credenciales en abapGit
En abapGit:1. Settings -> Git -> Credentials2. URL: https://github.com3. Username: tu_usuario4. Password: tu_tokenClonar un repositorio
Paso 1: Obtener URL del repositorio
En GitHub:1. Ir al repositorio2. Click en "Code"3. Copiar URL HTTPSPaso 2: Clonar en abapGit
En abapGit:1. "+ Clone"2. URL: https://github.com/usuario/repositorio.git3. Package: $TMP o paquete propio4. Branch: main5. "Clone"Crear repositorio desde código existente
Paso 1: Crear repositorio en GitHub
En GitHub:1. New repository2. Nombre: mi-proyecto-abap3. Visibility: Private/Public4. NO crear README (importante)5. Create repositoryPaso 2: Conectar paquete ABAP
En abapGit:1. "+ New Online"2. URL: https://github.com/usuario/mi-proyecto-abap.git3. Package: ZMIPROYECTO4. "Create"Paso 3: Push inicial
En abapGit:1. Seleccionar repositorio2. "Stage"3. Seleccionar todos los objetos4. Commit message: "Initial commit"5. "Commit & Push"Flujo de trabajo básico
Pull (obtener cambios)
1. Seleccionar repositorio2. "Pull"3. Revisar objetos a actualizar4. "Pull"5. Los objetos se actualizan en el sistemaStage y Commit
1. Modificar objetos en SE80/ADT2. En abapGit: seleccionar repositorio3. "Stage"4. Ver cambios (diff)5. Seleccionar archivos a incluir6. Escribir mensaje de commit7. "Commit"Push (enviar cambios)
1. Después de commit2. "Push"3. Los cambios se envían a GitHubTrabajar con ramas
Crear nueva rama
En abapGit:1. Seleccionar repositorio2. "Branch" dropdown3. "Create branch"4. Nombre: feature/nueva-funcionalidad5. "Create"Cambiar de rama
En abapGit:1. Seleccionar repositorio2. "Branch" dropdown3. Seleccionar rama deseada4. "Switch"5. El código local se actualizaMerge de ramas
En GitHub (recomendado):1. Crear Pull Request2. Review3. Merge
O en línea de comandos local:git checkout maingit merge feature/mi-ramagit pushResolución de conflictos
Detectar conflictos
Al hacer Pull:- abapGit muestra "Conflict" en archivos afectados- Los archivos tienen marcadores de conflictoResolver manualmente
1. Identificar archivo en conflicto2. Editar en SE80/ADT3. Decidir qué versión mantener4. Guardar y activar5. Stage de nuevo6. 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.xmlMejores 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: TestsEjemplo de commit
feat: Add customer validation
- Validate customer ID format- Check customer exists in KNA1- Return descriptive error messagesIgnorar 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
name: abaplint
on: [push, pull_request]
jobs: abaplint: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: abaplint/abaplint-action@v1Configuración abaplint
{ "global": { "files": "/src/**/*.*" }, "syntax": { "version": "Cloud", "errorNamespace": "^(Z|Y)" }, "rules": { "line_length": { "length": 120 }, "avoid_use": { "define": true, "statics": true } }}Comandos frecuentes
| Acción | Pasos |
|---|---|
| Clonar | + Clone -> URL -> Package -> Clone |
| Pull | Seleccionar repo -> Pull |
| Push | Stage -> Commit -> Push |
| Nueva rama | Branch -> Create branch |
| Ver diff | Stage -> Click en archivo |
| Histórico | Repository -> Log |
Resolución de problemas
Error de autenticación
Solución:1. Verificar token en GitHub2. Settings -> Git -> Credentials3. Actualizar password con nuevo tokenObjetos no aparecen
Solución:1. Verificar que el paquete es correcto2. Check que los objetos están activos3. "Refresh" en abapGitConflicto de versiones
Solución:1. Hacer backup local2. Pull forzado (sobrescribe local)3. Re-aplicar cambios manualmenteNotas 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.