Introducción
Puedes crear conjuntos de reglas en tu organización para controlar cómo los usuarios pueden interactuar con los repositorios de tu organización. Puedes controlar aspectos como quién puede insertar confirmaciones en una rama determinada y cómo se debe dar formato a las confirmaciones, o quién puede eliminar una etiqueta o cambiarle el nombre. También puedes impedir que los usuarios cambien el nombre de los repositorios.
Las bifurcaciones no heredan conjuntos de reglas o etiquetas de sus repositorios ascendentes. Sin embargo, las bifurcaciones que pertenecen a tu organización están sujetas a los conjuntos de reglas que crees, como cualquier otro repositorio.
Importación de conjuntos de reglas creados previamente
Para importar uno de los conjuntos de reglas creados previamente por GitHub, vea github/ruleset-recipes
.
Uso de la sintaxis fnmatch
Puedes usar la sintaxis fnmatch
para definir patrones de destino al crear un conjunto de reglas.
Puede usar el carácter comodín *
para que coincida con cualquier cadena de caracteres. Como GitHub usa la marca File::FNM_PATHNAME
para la sintaxis File.fnmatch
, el carácter comodín *
no coincide con los separadores de directorios (/
). Por ejemplo, qa/*
coincidirá con todas las ramas que comienzan por qa/
y que contienen una sola barra diagonal, pero no coincidirá con qa/foo/bar
. Puedes incluir cualquier número de barras diagonales después de qa
con qa/**/*
, que coincidiría, por ejemplo, con qa/foo/bar/foobar/hello-world
. También puedes extender la cadena qa
con qa**/**/*
para que la regla sea más inclusiva.
Para más información sobre las opciones de sintaxis, consulta la documentación de fnmatch.
Uso de expresiones regulares para metadatos de confirmación
Al agregar restricciones de metadatos a un conjunto de reglas destinado a ramas o etiquetas, puedes usar la sintaxis de expresión regular para definir patrones con los que los metadatos pertinentes, como el mensaje de confirmación o el nombre de la rama o etiqueta, deben o no coincidir.
Las restricciones de metadatos no aceptan patrones regex de forma predeterminada. Para habilitarlo, selecciona Debe coincidir con una restricción de patrón regex determinada al crear las restricciones de metadatos para el conjunto de reglas.
Los conjuntos de reglas admiten la sintaxis RE2. Para más información, consulta la guía de la sintaxis de Google. Para validar las expresiones, puedes usar el validador en regex101.com, seleccionando el tipo "Golang" en la barra lateral izquierda.
De forma predeterminada, en las restricciones de metadatos las expresiones regulares no tienen en cuenta varias líneas de texto. Por ejemplo, si tienes un mensaje de confirmación con varias líneas, el patrón ^ABC
será una coincidencia si la primera línea del mensaje comienza por ABC
. Para que coincidan varias líneas del mensaje, inicia la expresión con (?m)
.
No se admite la aserción de búsqueda anticipada (lookahead) negativa, indicada como ?!
. Sin embargo, en los casos en los que necesites buscar una cadena determinada que no vaya seguida de otra cadena específica, puedes usar la aserción de búsqueda anticipada (lookahead) positiva, indicada como ?
, combinada con el requisito "No debe coincidir con un patrón regex determinado".
Note
Si exiges que los colaboradores cierren las confirmaciones, esto puede interferir con los patrones de expresiones regulares. Cuando alguien cierra sesión, GitHub agrega una cadena como Signed-off-by: #AUTHOR-NAME <#AUTHOR-EMAIL>
al mensaje de confirmación. Para obtener más información, vea «Administración de la directiva de aprobación de confirmaciones para la organización».
Patrones de expresiones regulares útiles
En los ejemplos siguientes se proporcionan patrones útiles para los metadatos de confirmación. Para usar estos patrones, establece Requisito en "Debe coincidir con un patrón regex determinado".
Asegurarse de que los nombres de rama son compatibles con Windows
Puedes usar el siguiente patrón para asegurarte de que los nombres de rama solo incluyen números, letras minúsculas y los caracteres -
y _
. Esto garantiza que los nombres de rama sean compatibles con sistemas operativos que no usen sistemas de archivos que distinguen mayúsculas de minúsculas de forma predeterminada.
\A[0-9a-z-_]$
\A[0-9a-z-_]$
Coincide con: my-branch
.
No coincide con: myBranch
.
Asegurarse de que los nombres de etiqueta usan el versionamiento semántico
Puedes usar el siguiente patrón para asegurarte de que los nombres de etiqueta se ajustan al versionamiento semántico. Para obtener más información, consulta la documentación sobre semver.org.
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$
Coincide con: 1.2.3
, 10.20.30
y 1.1.2-prerelease+meta
.
No coincide con: 1.2
y 1.2-SNAPSHOT
.
Limitar la longitud de las líneas en los mensajes de confirmación
El libro Pro Git recomienda limitar la primera línea de un mensaje de confirmación a unos 50 caracteres.
Puedes usar el siguiente patrón para asegurarte de que la primera línea de un mensaje de confirmación contiene 50 caracteres o menos.
\A.{1,50}$
\A.{1,50}$
Asegurarse de que los mensajes de confirmación comienzan con una resolución y un número de incidencia
Puedes usar el siguiente patrón para asegurarte de que los mensajes de confirmación contienen la palabra Resolves:
o Fixes:
, seguida de una cadena como #1234
.
^(Resolves|Fixes): \#[0-9]+$
^(Resolves|Fixes): \#[0-9]+$
Coincide con: Fixes: #1234
.
No coincide con: Add conditional logic to foo.bar
.
Aplicación de confirmaciones convencionales
Puedes usar el siguiente patrón para asegurarte de que los mensajes de confirmación se ajustan a la especificación de confirmaciones convencionales. Para obtener más información, consulta conventionalcommits.org.
^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test){1}(\([\w\-\.]+\))?(!)?: ([\w ])+([\s\S]*)
^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test){1}(\([\w\-\.]+\))?(!)?: ([\w ])+([\s\S]*)
Coincide con: feat: allow provided config object to extend other configs
.
No coincide con: Add conditional logic to foo.bar
.
Uso de los estados de cumplimiento del conjunto de reglas
Al crear o editar el conjunto de reglas, puede utilizar los estados de obligatoriedad para configurar cómo se aplicará el conjunto de reglas.
Puede seleccionar cualquiera de los siguientes estados de obligatoriedad para el conjunto de reglas.
- Active: tu conjunto de reglas se aplicará después de la creación.
- Evaluate: tu conjunto de reglas no se aplicará, pero podrás supervisar las acciones que podrían infringir o no las reglas en la página "Rule Insights".
- Disabled: tu conjunto de reglas no se aplicará ni evaluará.
El uso del modo «Calcular» es una excelente opción para probar el conjunto de reglas sin aplicarlo. Puedes utilizar la página «Información sobre reglas» para ver si la contribución habría infringido la regla. Para obtener más información, vea «Administración de conjuntos de reglas de un repositorio».
Creación de un conjunto de reglas de rama o etiqueta
-
En la esquina superior derecha de GitHub, seleccione la foto del perfil y haga clic en Sus organizaciones.
-
Junto a la organización, haga clic en Settings.
-
En la barra lateral izquierda, en la sección "Código, planeamiento y automatización", haz clic en Repositorio y, luego, haz clic en Conjuntos de reglas.
-
Puedes crear un conjunto de reglas que tenga como destino ramas o un conjunto de reglas que tenga como destino etiquetas.
-
Para crear un conjunto de reglas que tenga como destino ramas, haz clic en Nuevo conjunto de reglas de rama.
-
Para crear un conjunto de reglas destinado a etiquetas, selecciona y, a continuación, haz clic en Nuevo conjunto de reglas de etiquetas.
-
-
En «Nombre del conjunto de reglas», escribe un nombre para el conjunto de reglas.
-
Opcionalmente, para cambiar el estado de cumplimiento predeterminado, haz clic en Deshabilitado y selecciona un estado de cumplimiento. Para obtener más información sobre los estados de obligatoriedad, consulte «Acerca de los conjuntos de reglas».
Concesión de permisos de derivación para tu rama o el conjunto de reglas
Puede conceder determinados roles, equipos o aplicaciones que permisos de omisión para el conjunto de reglas. Los siguientes son aptos para omitir el acceso:
- Administradores de repositorios, propietarios de organizaciones y propietarios de empresas
- Rol de mantenimiento o escritura, o roles de repositorio personalizados basados en el rol de escritura
- Teams
- Claves de implementación
- GitHub Apps
- Dependabot. Para obtener más información sobre Dependabot, consulta "Guía de inicio rápido de Dependabot".
-
Para conceder permisos de omisión para el conjunto de reglas, en la sección "Lista de omisión", haga clic en Agregar omisión.
-
En el cuadro de diálogo modal "Agregar omisión" que aparece, busque el rol, el equipo o la aplicación que desea conceder permisos de omisión y, a continuación, seleccione el rol, el equipo o la aplicación en la sección "Sugerencias" y haga clic en Agregar seleccionado.
-
Opcionalmente, para conceder omisión a un actor sin permitirles insertar directamente en un repositorio, a la derecha de «Permitir siempre», haz clic en y, a continuación, haz clic en Solo para solicitudes de incorporación de cambios.
El actor seleccionado debe ahora abrir una solicitud de incorporación de cambios para realizar cambios en un repositorio, creando una pista digital clara en la solicitud de cambios y el registro de auditoría. Luego, el actor puede optar por omitir las protecciones de rama y combinar esa solicitud de incorporación de cambios.
Elección de los repositorios de destino en la organización
Con el conjunto de reglas, puedes elegir tener como destino todos los repositorios de la organización, repositorios de la organización que coincidan con una determinada convención de nomenclatura, repositorios en tu organización que tienen propiedades personalizadas o una lista de repositorios seleccionados manualmente en la organización.
Para obtener más información sobre las propiedades personalizadas, consulta «Administración de propiedades personalizadas para repositorios de la organización».
Si un repositorio tiene como destino un conjunto de reglas creado en el nivel de organización, solo los propietarios de la organización pueden editar el conjunto de reglas. Sin embargo, los usuarios con acceso de administrador al repositorio o con un rol personalizado, incluido el permiso "editar reglas del repositorio", pueden crear conjuntos de reglas adicionales en el nivel de repositorio. Las reglas de estos conjuntos de reglas se agregarán con las reglas definidas en el nivel de organización. El resultado es que la creación de un nuevo conjunto de reglas puede hacer que las reglas destinadas a una rama o etiqueta sean más restrictivas, pero nunca menos restrictivas. Para más información sobre la creación de conjuntos de reglas, consulta "Acerca de los conjuntos de reglas".
Destino de todos los repositorios de la organización
Para definir como destino todos los repositorios de la organización, en la sección "Repositorios de destino", selecciona Destino: REPOSITORIOS y, a continuación, haz clic en Todos los repositorios.
Destino de repositorios por convención de nomenclatura en la organización
-
Para definir como destino una lista dinámica de repositorios de la organización por convención de nomenclatura, en la sección "Repositorios de destino", selecciona Destino: REPOSITORIOS y, a continuación, haz clic en Lista dinámica de repositorios.
-
Para empezar a definir un patrón de destino, en la sección "Criterios de destino", selecciona Agregar un destino , y haz clic en Incluir por patrón o Excluir por patrón.
-
En el cuadro de diálogo modal que aparece, escribe un patrón de nomenclatura de repositorio mediante la sintaxis
fnmatch
y, a continuación, haz clic en Agregar patrón de inclusión o Agregar patrón de exclusión. Para más información sobre la sintaxisfnmatch
, consulta "Uso de la sintaxisfnmatch
".Note
Puedes agregar varios criterios de selección de destino al mismo conjunto de reglas. Por ejemplo, podrías incluir cualquier repositorio que coincida con el patrón
*cat*
y, a continuación, excluir específicamente un repositorio que coincida con el patrónnot-a-cat
. -
Opcionalmente, en la página de configuración del conjunto de reglas, selecciona Impedir cambiar el nombre de los repositorios de destino.
Establecer repositorios como destinos por propiedades en tu organización
Puede dirigirse a repositorios de su organización mediante propiedades personalizadas. Para obtener más información, vea «Administración de propiedades personalizadas para repositorios de la organización».
- Para definir como destino una lista dinámica de repositorios de la organización por propiedades, en la sección «Repositorios de destino», selecciona Destino: REPOSITORIOS y, a continuación, haz clic en Lista dinámica por propiedades.
- Para agregar un destino, en la sección «Criterios de destino», selecciona Agregar un destino , y haz clic en Incluir por propiedad o Excluir por propiedad.
- En el diálogo modal que aparece, selecciona una propiedad personalizada o del sistema en el menú desplegable y, a continuación, selecciona un valor para la propiedad.
- Haz clic en Agregar tablas.
Destino de repositorios seleccionados en la organización
- Para definir como destino una lista estática seleccionada manualmente de repositorios de la organización, en la sección "Repositorios de destino", selecciona Destino: REPOSITORIOS y, a continuación, haz clic en Seleccionar repositorios.
- Para seleccionar repositorios de destino, en la sección "Criterios de selección de destino", selecciona Seleccionar repositorios y busca el nombre de cada repositorio al que deseas dirigirte. Selecciona cada repositorio en los resultados de la búsqueda.
Elección de las ramas o etiquetas de destino
Para definir ramas o etiquetas, en la sección "Ramas objetivo" o "Etiquetas objetivo", seleccione Agregar un objetivo y, a continuación, seleccione cómo desea incluir o excluir ramas o etiquetas. Puedes usar la sintaxis fnmatch
para incluir o excluir ramas o etiquetas en función de un patrón. Para más información, consulta "Uso de la sintaxis fnmatch
".
Puedes agregar varios criterios de selección de destino al mismo conjunto de reglas. Por ejemplo, podrías incluir la rama predeterminada, incluir cualquier rama que coincida con el patrón *feature*
y, a continuación, excluir específicamente una rama que coincida con el patrón not-a-feature
.
Selección de protecciones de rama o etiqueta
En la sección "Protecciones de ramas" o "Protecciones de etiquetas", selecciona las reglas que deseas incluir en el conjunto de reglas. Al seleccionar una regla, es posible que puedas especificar una configuración adicional para la regla. Para obtener más información sobre las reglas, consulta "Reglas disponibles para conjuntos de reglas".
Note
Si seleccionas Require status checks before merging, en la sección "Additional settings":
- Puedes escribir el nombre de cada comprobación de estado que quieres requerir. Para terminar de agregar la comprobación de estado como requisito, debes hacer clic en .
- Si seleccionas Requerir que las ramas estén actualizadas antes de combinar, debes definir una comprobación para que la protección surta efecto.
Adición de restricciones de metadatos
Las restricciones de metadatos deben estar pensadas para aumentar la coherencia entre confirmaciones en el repositorio. No están diseñadas para reemplazar medidas de seguridad, como requerir la revisión de código mediante solicitudes de cambios.
Note
Si realizas en una rama una fusión mediante combinación con "squash", todas las confirmaciones de esa rama deben cumplir los requisitos de metadatos de la rama base.
-
Para agregar una regla para controlar los metadatos del commit o los nombres de rama, en la sección "Restrictions", haz clic en Restrict commit metadata o Restrict branch names.
-
Configura los ajustes de la restricción y, a continuación, haz clic en Añadir. Puedes agregar varias restricciones al mismo conjunto de reglas.
-
Para que coincida con un patrón regex determinado, en la lista desplegable «Requisito», selecciona Debe coincidir con un patrón regex determinado.
Para la mayoría de los requisitos, como "Debe empezar con un patrón coincidente", el patrón que escribas se interpreta literalmente y no se admiten caracteres comodín. Por ejemplo, el carácter
*
solo representa el carácter literal*
.Para patrones más complejos, puedes seleccionar "Debe coincidir con un patrón regex determinado" o "No debe coincidir con un patrón regex determinado", y luego usar la sintaxis de expresión regular para definir el patrón coincidente. Para obtener más información, consulta «Acerca de las expresiones regulares para los metadatos de confirmación» en la documentación GitHub Enterprise Cloud.
Cualquier persona que vea los conjuntos de reglas de un repositorio podrá ver la descripción que proporciones.
-
Opcionalmente, antes de aplicar un conjunto de reglas con restricciones de metadatos, selecciona el estado de cumplimiento "Evaluate" para el conjunto de reglas para probar los efectos de las restricciones de metadatos sin que ello afecte a los colaboradores. Para más información sobre las restricciones de metadatos, consulta "Reglas disponibles para conjuntos de reglas".
Finalización del conjunto de reglas de tu rama o etiqueta y pasos siguientes
Para terminar de crear el conjunto de reglas, haga clic en Crear. Si el estado de cumplimiento del conjunto de reglas se establece en "Activo", el conjunto de reglas entra en vigor inmediatamente.
Puede ver información sobre el conjunto de reglas para ver cómo afectan las reglas a los colaboradores. Si el estado de cumplimiento se establece en "Evaluar", puede ver qué acciones habrían pasado o fallado si el conjunto de reglas estaba activo. Para más información sobre conclusiones para conjuntos de reglas, consulte "Administración de conjuntos de reglas de un repositorio".