Git: acceso a nivel por twig y número máximo de sucursales

Tengo algunas preguntas de Git / Github. En primer lugar, ¿hay alguna manera de crear algún tipo de token de acceso para el acceso de extracción / inserción a solo una twig en un repository de Git? La idea es darle a un usuario este token de acceso, y pueden usarlo, pero solo para empujar / tirar en una twig que he especificado de antemano.

En segundo lugar, ¿hay un límite superior en la cantidad de sucursales que puede tener un repository? Digamos que tengo 100 twigs. ¿Esto afecta el performance? ¿Qué hay de 10,000? 1,000,000 de sucursales?

El número de twigs no tiene límites teóricos: siempre que tenga una cantidad infinita de espacio para almacenar todos los nombres de las twigs y sus ID, puede crear cualquier número arbitrario de twigs, todas apuntando a una única confirmación. Esto significa que el repository en sí, sin contar los nombres de las twigs, puede tener un tamaño pequeño y limitado (una confirmación que contiene un file), con 1 nombre de googolplex apuntando a esa única confirmación.

Sin embargo, cada nombre debe ser único, y cada nombre ocupa un espacio. En las implementaciones actuales de Git, los nombres de las sucursales se almacenan en files individuales ( .git/refs/heads/br/an/ch contiene el valor para la twig denominada br/an/ch ) y / o en un único file plano ( .git/packed-refs contiene el valor de cada reference, incluidos todos los nombres de las sucursales). 1 Dado que este file / estos files viven dentro del repository, ocuparán espacio, y probablemente el host lo limitará en algún momento (ciertamente en el punto en que se queda sin espacio en disco, pero probablemente mucho antes).


1 Si aparece un nombre en un file individual, ese file proporciona el valor del nombre. Si no, Git vuelve a search en el file plano. Por lo tanto, para un nombre que existe tanto en el file sin formatting como en su propio file privado, el valor del file privado sobrescribe. Esto permite que Git simplemente recopile todos los nombres en el file plano, eliminando los files individuales, para volver a comprimirlos; y luego vuelva a crear files individuales de a uno cada vez que se actualice un nombre. Solo la eliminación del nombre requiere actualizar el file individual (eliminarlo) y el file plano (eliminar la input).