Cuando ejecuto git remote -v
en uno de mis repositorios de Git que tiene un control remoto (s) configurado, veo que cada control remoto tiene especificaciones de recuperación y envío:
$ git remote -v
<remote-name> ssh://host/path/to/repo (fetch)
<remote-name> ssh://host/path/to/repo (push)
Para los controles remotos que apuntan a desarrolladores pares, no hay necesidad de presionar, y Git se negará a presionar a un repositorio no desnudo de todos modos. ¿Hay alguna forma de configurar estos controles remotos como "solo de búsqueda" sin dirección de inserción o capacidades?
Respuestas:
No creo que pueda eliminar la URL de inserción, solo puede anularla para que sea otra que la URL de extracción. Así que creo que lo más cercano que obtendrás es algo como esto:
Está configurando la URL de inserción en
no-pushing
, que, mientras no tenga una carpeta con el mismo nombre en su directorio de trabajo, git no podrá ubicarla. Básicamente, estás obligando a git a usar una ubicación que no existe.fuente
git remote set-url --push origin -- --read-only--
- tenga en cuenta el extra--
para permitir un nombre con guiones iniciales. Esto me pareció más legible.Además de cambiar la URL de inserción a algo no válido (por ejemplo,
git remote set-url --push origin DISABLED
), también se puede usar elpre-push
enlace.Una forma rápida de detenerse
git push
es hacer un enlace simbólico/usr/bin/false
para ser el gancho:El uso de un gancho permite un control más fino de los empujes si es deseable. Vea
.git/hooks/pre-push.sample
un ejemplo de cómo evitar empujar los compromisos de trabajo en progreso.Para evitar empujar a una rama específica o limitar el empuje a una sola rama, esto en un gancho de ejemplo:
Un repositorio de prueba con múltiples controles remotos:
Empujar a
origin
está permitido:Empujar a cualquier otro control remoto no está permitido:
Tenga en cuenta que el
pre-push
script de enlace puede modificarse para, entre otras cosas, imprimir un mensaje en stderr diciendo que la inserción ha sido desactivada.fuente
La afirmación general "Git se negará a empujar a un repositorio no descubierto" no es cierta. Git solo se negará a enviar a un repositorio remoto no descubierto si está intentando enviar cambios que están en la misma rama que el directorio de trabajo desprotegido del repositorio remoto.
Esta respuesta da una explicación simple: https://stackoverflow.com/a/2933656/1866402
(Estoy agregando esto como respuesta porque todavía no tengo suficiente reputación para agregar comentarios)
fuente
Si ya tiene un conjunto remoto y sólo quiere evitarse que hacer algo como accidentalmente empuja directamente a
master
, orelease/production
, puede evitar esto usandogit config
.Para el registro,
no_push
no es un nombre especial. Es solo el nombre de cualquier rama inexistente. Entonces podría usar$ git config branch.master.pushRemote create_a_pr_and_do_not_push_directly_to_master
y funcionaría bien.Más información: git-config pushRemote
fuente
Si tiene control sobre el repositorio, puede lograrlo haciendo uso de los permisos. El usuario que va a buscar el repositorio no debería tener permisos de escritura en el repositorio maestro.
fuente