¿Cómo puedo crear un repositorio Git con el nombre de rama predeterminado que no sea "maestro"?

Resuelto Abhisek asked hace 7 años • 5 respuestas

En el libro Pro Git , dice

"origen" no es especial

Al igual que el nombre de la rama "maestro" no tiene ningún significado especial en Git, tampoco lo tiene "origen". Mientras que "master" es el nombre predeterminado para una rama inicial cuando ejecuta git init, que es la única razón por la que se usa ampliamente , "origin" es el nombre predeterminado para un control remoto cuando ejecuta git clone. Si ejecuta git clone -o booyah en su lugar, tendrá booyah/master como su rama remota predeterminada.

Eso significa que podemos usar nuestro nombre de rama predeterminado como principal o rama principal o algo así. No vi ninguna opción man git-initque inicialice mi repocon un nombre de rama predeterminado diferente.

GitHub muestra cómo configurar el nombre de rama predeterminado en su página de configuración. Pero no estoy hablando de cómo configurarlo en ningún sitio de alojamiento Git específico . Estoy preguntando estrictamente en términos de Git únicamente, no con respecto a ningún sitio de alojamiento de Git específico .

¿Hay una manera de hacer eso?

Abhisek avatar Mar 18 '17 14:03 Abhisek
Aceptado

Git más nuevo, nuevo repositorio

Desde la versión 2.28.0 de git, el git initcomando ahora toma un parámetro --initial-branch(o -bpara abreviar). Estos dos comandos crean un nuevo repositorio de Git con una rama llamada "trunk", que siempre tuvo más sentido para mí que "master" (¿maestro de qué?):

git init --initial-branch=trunk
git init -b trunk

Esto es configurable con la init.defaultBranchconfiguración. Si quiero que todos los repositorios nuevos tengan "troncal" como rama predeterminada:

git config --global init.defaultBranch trunk

Git más antiguo, nuevo repositorio

Algunos sistemas todavía tienen instalaciones de Git más antiguas. Mi servidor Debian 10 (Buster, la versión estable actual a partir de octubre de 2020) viene con Git 2.20, que no admite la -bopción. Una opción es crear el repositorio y luego cambiar el nombre de la sucursal. Esta técnica funciona para repositorios normales (no básicos):

git init
git checkout -b trunk

Esto crea un nuevo repositorio con trunkla rama actual en lugar de master. La rama masteren realidad no existe; las ramas no se crean hasta que tengan al menos una confirmación. Hasta que se crea la rama, ésta solo existe en .git/HEAD, lo que explica por qué la masterrama desaparecerá cuando cambies a trunk.

Repos desnudos

Para repositorios básicos, no se puede ejecutar git checkout(eso es lo que significa estar básico). En su lugar, puedes cambiar HEAD para que apunte a una rama diferente:

git init --bare
git symbolic-ref HEAD refs/heads/trunk

Antiguos repositorios

Si ya te has comprometido, puedes ejecutar git branch -men su lugar:

git init
touch file.txt
git add file.txt
git commit -m 'commit 1'
git branch -m trunk

Esto cambia el nombre de la rama masteruna trunkvez creada.

Esto parece un poco complicado ya que el mecanismo es diferente dependiendo de si el repositorio está vacío, pero funciona. También puede abordarlo como "crear una nueva rama y eliminarla master".

Dietrich Epp avatar Mar 18 '2017 07:03 Dietrich Epp

Puedes, indirectamente, configurar git initpara usar una rama predeterminada diferente: la rama actual está definida por HEAD, que es "solo" un archivo de texto que le dice a Git cuál es la referencia actual.

Usando init.templateDir, puedes solicitar git initusar uno diferente:

# ~/.config/git/config or ~/.gitconfig
[init]
    templateDir = ~/.config/git/template/

y en ~/.config/git/template/HEAD, coloque una sola línea (+ salto de línea): ref: refs/heads/main(por defecto es rama main).

Todo el contenido de templateDirse copia en el .gitdirectorio al crear un repositorio; el valor predeterminado (aquí /usr/share/git-core/templates) contiene algunos enlaces de muestra y otros archivos, pero puede usar su nuevo directorio de plantilla para configurar enlaces predeterminados, por ejemplo.

$ tree /usr/share/git-core/templates
/usr/share/git-core/templates
├── branches
├── description
├── hooks
│   ├── applypatch-msg.sample
│   ├── commit-msg.sample
│   ├── fsmonitor-watchman.sample
│   ├── post-update.sample
│   ├── pre-applypatch.sample
│   ├── pre-commit.sample
│   ├── prepare-commit-msg.sample
│   ├── pre-push.sample
│   ├── pre-rebase.sample
│   ├── pre-receive.sample
│   └── update.sample
└── info
    └── exclude

3 directories, 13 files
nicoo avatar Jun 15 '2018 18:06 nicoo