¿Cómo puedo crear un repositorio Git con el nombre de rama predeterminado que no sea "maestro"?
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-init
que inicialice mi repo
con 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?
Git más nuevo, nuevo repositorio
Desde la versión 2.28.0 de git, el git init
comando ahora toma un parámetro --initial-branch
(o -b
para 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.defaultBranch
configuració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 -b
opció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 trunk
la rama actual en lugar de master
. La rama master
en 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 master
rama 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 -m
en 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 master
una trunk
vez 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
".
Puedes, indirectamente, configurar git init
para 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 init
usar 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 templateDir
se copia en el .git
directorio 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