¿Puedo ocultar una twig en un repository git para todos los clones remotos?

Tengo un repository central en el server y repos local en local . En el repository del server hay una twig en live , que extrae del master algunas veces, agrega algunas modificaciones y luego se usa para actualizar un service.

La twig activa del server es de interés para los usuarios en sus repositorys local . No deberían verlo ni ser capaces de searchlo o empujarlo, en resumen, interactuar con él de cualquier manera.

¿Hay alguna manera en Git de permitir tal comportamiento: evitar que una twig del server aparezca en los repositorys local ?

 local$ git remote add server example.com local$ git fetch server local$ git branch --remotes server/foo server/live # <-- don't show this branch server/master 

Sería preferible una solución en el server . Pero a partir de ahora, ya que no existe un committer no confiable en este momento, las soluciones que simplemente esconden la twig en live través de config en repos local funcionarían también.

Editar : a partir de git 1.8.2, git admite transfer.hiderefs (deletreado transfer.hideRefs en la documentation de configuration de git ). Fue algo problemático hasta que git 2.3.5 / 2.4.0 (como en, evítelo si permite la transferencia de http inteligente, hasta que tenga 2.3.5 o 2.4.0 instalados en el server).

Para ocultar el server / en vivo:

 git config --add transfer.hiderefs refs/heads/server/live 

Esto no es una ocultación perfecta: expone la existencia del nombre para enviar sondeos (al igual que receive.hiderefs ). Ver también uploadpack.allowTipSHA1InWant .

No: los protocolos remotos estándar de git permiten que los consultantes entrantes puedan ver todas las references. (Podría falsificarlo eliminando la reference mientras prestaba services a los clientes, y luego reinsertla, pero tendría que evitar que se ejecute cualquier recolección de basura si esa es la única reference al compromiso en cuestión, y por supuesto la reference sería no disponible para su propio código en ese momento también. Sería más simple simplemente clonar el repository, y luego eliminar el ref y servir desde el clon "de-live-d". Equivalentemente, pero aún más simple y probablemente más rápido, use un Repo diferente para mantener la twig "en vivo" en primer lugar: ese repository puede getse del compartido como de costumbre, pero tiene su propia twig privada "en vivo".

Puede evitar que alguien o alguien actualicen las references que desee, a través de los ganchos habituales de pre-recepción y actualización. Pero cualquier reference que tengas, alguien más puede ver.