Solución:
Los espacios de nombres de Git solo están diseñados para funcionar con repositorios remotos, no localmente (https://github.com/git/git/commit/6b01ecfe22f0b6ccb9665cd8d85d78a381fecffc). La mayoría de las operaciones que funcionan con espacios de nombres git parecen funcionar en operaciones que pasan por las funciones git-upload-pack y git-receive-pack. Es por eso que la documentación sugiere si desea probarlo localmente para fingir que piensa que está extrayendo de una máquina remota, por ejemplo: git clone ext::'git --namespace=foo %s /tmp/prefixed.git'
así que comandos como
git --namespace foo add
git --namespace foo commit
git --namespace foo branch
Todos esencialmente no hacen nada. Las únicas operaciones que parecen tener algún efecto son clonar / recuperar / tirar y empujar.
Para aprovechar los espacios de nombres de la manera que espera, tendrá que configurar su propio backend git que sea capaz de traducir argumentos de URL a la variable GIT_NAMESPACE y pasarlos a git-http-backend o algo similar. La documentación recomienda lo siguiente en su configuración de apache:
Para servir múltiples repositorios de diferentes gitnamespaces en un solo repositorio:
SetEnvIf Request_URI "^/git/([^/]*)" GIT_NAMESPACE=$1 ScriptAliasMatch ^/git/[^/]*(.*) /usr/libexec/git-core/git-http-backend/storage.git$1
También tenga en cuenta que lo que no dice esta documentación es que lo que está sucediendo aquí es extraer la variable GIT_NAMESPACE de una URL y establecer una variable de entorno que espera git-http-backend. es decir http://myserver.com/git/namespace/repository.git
. La parte ‘storage.git’ es un error tipográfico y no debería estar allí. Debo enviar un parche de documentación.
Aquí están la mayoría de las confirmaciones que crearon esta función. https://github.com/git/git/commits/398dd4bd039680ba98497fbedffa415a43583c16?author=joshtriplett