2012-03-21 20 views
7

¿Cómo puedo decirle a git que, si bien quiero permitir "git fetch" en ciertas ramas, no quiero permitir "git push" en esas ramas.¿Cómo puedo hacer que la referencia en sentido ascendente de una rama git sea de solo lectura?

En otras palabras, tengo algunas ramas que reflejan el "trabajo actual" y quiero enviarlas a mi repositorio en sentido ascendente. Pero tengo otras ramas (incluida la maestra) que pretendo reflejar "otro trabajo" en el contexto del repositorio local, y no quiero pisar esas ramas desde aquí.

Este es mi repositorio remoto, y en otros contextos quiero poder insertar todas sus ramas. Pero no desde esta instancia local específica.

Creo que esto es posible, porque git remote show origin me ha dicho a veces que he configurado branches para "git pull" pero no para "git push". Pero no entiendo los archivos de configuración lo suficientemente bien como para crear este efecto de forma manual, y tampoco entiendo el lenguaje de línea de comandos de git lo suficiente como para hacerlo allí.

En este momento, lo mejor que puedo hacer es asegurarme de que mi copia local está desactualizada para las ramas ascendentes, y quiero seguir siendo prístina. (Además, especificar la rama receptora explícitamente en mi línea de comandos de git push, especificando que solo quiero ingresar a la instancia remota correspondiente a la rama localmente desprotegida, evita que se formen ramas no deseadas. Pero me gustaría eliminar esa complicación .)

+1

posible duplicado de [Prohibir el empuje remoto a la rama principal en git] (http://stackoverflow.com/questions/2045329/prohibit-remote-pushing-to-the-master-branch-in-git) – ralphtheninja

+0

It parece la resolución que hubo para establecer receive.denycurrentbranch en el repositorio receptor. Pero estoy buscando el control en el repositorio de transmisión, en su lugar. – rdm

+0

Puede establecer 'push.default = upstream', y luego un' git push' sin argumentos adicionales solo empujará la rama localmente desprotegida. Eso parece ser el comportamiento predeterminado en la próxima versión de 'git'. – Borealid

Respuesta

0

Similar a lo que Borealid dijo en los comentarios, en su copia local debe establecer git config push.default upstream, y luego, además, asegúrese de que las ramas que no desea poder insertar no tengan una rama ascendente asignado Existe un comando git branch --set-upstream, pero eso no le permitirá configurar una configuración en sentido ascendente vacía para eliminarla, por lo que deberá editar manualmente su archivo .git/config y eliminar la línea merge = refs/heads/* de las secciones de las ramas correspondientes.

0

En realidad, parece que push.default = current hará lo que yo quiera.

Eso no es precisamente lo que pedí, pero es "lo suficientemente bueno". Y tiene la ventaja de ser simple.

La simplicidad es una virtud: simplifica la comprensión y el uso del sistema.

También imita de cerca el comportamiento que creo que estoy viendo desde git pull.

+0

Citando de 'git help config': "tracking - sinónimo depreciado para el upstream". – Borealid

+0

Ok, ¿en qué versión sucede esto? (¿Y por qué romper la documentación existente, etc.?) – rdm

Cuestiones relacionadas