Skip to main content

Esta versión de GitHub Enterprise Server se discontinuó el 2024-09-25. No se realizarán lanzamientos de patch, ni siquiera para problemas de seguridad críticos. Para obtener rendimiento mejorado, seguridad mejorada y nuevas características, actualice a la versión más reciente de GitHub Enterprise Server. Para obtener ayuda con la actualización, póngase en contacto con el soporte técnico de GitHub Enterprise.

Uso de la API REST para interactuar con la base de datos de Git

Usa la API REST para leer y escribir objetos sin procesar de Git en tu base de datos de Git en GitHub Enterprise Server, así como ver y actualizar tus referencias (encabezados de rama y etiquetas).

Información general

Básicamente, esto te permite reimplementar muchas de las funcionalidades de Git con la API REST al crear objetos sin procesar directamente en la base de datos y actualizar las referencias de rama. Técnicamente, podrías hacer lo mismo que Git sin necesidad de instalarlo.

La API REST devolverá un elemento 409 Conflict si el repositorio de Git está vacío o no está disponible. Que un repositorio se muestre como no disponible habitualmente significa que GitHub Enterprise Server está en el proceso de crearlo. En el caso de un repositorio vacío, puedes usar el punto de conexión de la API de REST PUT /repos/{owner}/{repo}/contents/{path} para crear contenido e inicializar el repositorio, de modo que puedas usar la API para administrar la base de datos de Git. Contacta a el administrador del sitio si este estado de respuesta persiste.

Para obtener más información sobre la base de datos de objetos de Git, lea el capítulo Información interna de Git del libro Pro Git.

Como ejemplo, si quisiera confirmar un cambio en un archivo de su repositorio, haría lo siguiente:

  • Obtener el objeto de la confirmación actual
  • Recuperar el árbol al cual apunta
  • Recuperar el contenido del objeto del blob que tiene el árbol para esa ruta de archivo en particular
  • Cambiar el contenido de alguna manera y publicar un objeto de blob nuevo con este contenido nuevo, obteniendo el SHA del blob a cambio
  • Publicar un nuevo objeto de árbol con ese indicador de la ruta del archivo reemplazándolo con el SHA de tu blob nuevo y obteniendo a cambio el SHA del árbol
  • Crear un objeo de confirmación nuevo con el SHA de la confirmación actual como el padre y el SHA del árbol nuevo, obteniendo a cambio el SHA de la confirmación
  • Actualizar la referencia de tu rama para apuntar al nuevo SHA de la confirmación

Puede que parezca complejo, pero en realidad es bastante sencillo cuando entiende el modelo y proporciona la oportunidad de hacer un sin fin de cosas cuando lo hace potencialmente con la API.

Verificar la capacidad de fusión de las solicitudes de extracción

Warning

No dependa del uso de Git directamente o de GET /repos/{owner}/{repo}/git/refs/{ref} de las actualizaciones en las referencias merge de Git, ya que este contenido queda obsoleto sin previo aviso.

Una API consumible debe solicitar explícitamente una solicitud de incorporación de cambios para crear una confirmación de combinación de prueba. Se crea una confirmación de combinación de prueba cuando ve la solicitud de incorporación de cambios en la interfaz de usuario y se muestra el botón "Merge" (Combinar), o cuando obtiene, crea o edita una solicitud de incorporación de cambios mediante la API REST. Sin esta solicitud, las referencias merge de Git quedarán obsoletas hasta la próxima vez que alguien vea la solicitud de incorporación de cambios.

Si actualmente utiliza métodos de sondeo que producen referencias merge de Git obsoletas, GitHub le recomienda utilizar los pasos siguientes para obtener los cambios más recientes de la rama predeterminada:

  1. Recibir el webhook de la solicitud de extracción.
  2. Llame a GET /repos/{owner}/{repo}/pulls/{pull_number} para iniciar un trabajo en segundo plano a fin de crear el candidato de confirmación de combinación.
  3. Sondee el repositorio mediante GET /repos/{owner}/{repo}/pulls/{pull_number} para ver si el atributo mergeable es true o false. Puede usar Git directamente o GET /repos/{owner}/{repo}/git/refs/{ref} para las actualizaciones de las referencias merge de Git solo después de realizar los pasos anteriores.