Estoy tratando de descubrir cómo usar git init
un nombre de rama predeterminado diferente al master
de la primera confirmación, pero no puedo encontrar una configuración de git ni nada que me permita hacer esto (por ejemplo, los alias solo funcionan para comandos, no nombres de ramas).
¿Hay alguna forma de cambiar el nombre predeterminado de la primera rama que git init
se configura?
Respuesta1
A partir de Git 2.28 (lanzado el 27 de julio de 2020), ustedAhora puedes configurar el nombre de la rama creada cuando inicias un nuevo repositorio.:
$ git config --global init.defaultBranch main
Después de configurar esta variable, la ejecución git init
producirá un repositorio cuya rama inicial es main
:
$ git init
Initialised empty Git repository in /home/thomas/test-git-repo/.git/
$ git status
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
Notas de lanzamiento:https://lore.kernel.org/git/[correo electrónico protegido]/
Respuesta2
En versiones de Git anteriores a la 2.28, HEAD
escodificadoapuntar a refs/heads/master
.
if (create_symref("HEAD", "refs/heads/master", NULL) < 0)
Por lo tanto, no hay ninguna configuración ni opción a la que pueda pasar para git init
cambiarla por otra cosa.
QuéesSin embargo, lo posible es cambiar lo que HEAD
apunta justo después git init
con la ayuda degit symbolic-ref
:
$ git init
$ git symbolic-ref HEAD refs/heads/test
Esto cambiará HEAD
para apuntar a una rama (aún no existente) llamada test
. Luego, cuando cree su primera confirmación, se llamará a la rama test
en lugar de master
.
Respuesta3
Una forma sencilla de cambiar el HEAD predeterminado es crear un HEAD en el directorio de la plantilla de git. Primero, configure su directorio de plantilla ~/Templates/git.git
(o lo que prefiera):
$ git config --global init.templateDir '~/Templates/git.git'
$ cp -r /usr/share/git-core/templates ~/Templates/git.git
Luego, cree el archivo HEAD
en el directorio de plantilla:
$ echo 'ref: refs/heads/default' > ~/Templates/git.git/HEAD
¡Y listo! Cada vez que ejecutes git init
, recibirás el mensaje:
$ git init
Reinitialized existing Git repository in [...]
Por alguna razón, git decide si usar este mensaje en función de la presencia del HEAD
archivo en .git
, en lugar de depender de si .git
fue necesario crearlo o no. Sin embargo, realmente no importa qué mensaje te muestre. Desde la página de manual de git-init:
Ejecutar
git init
en un repositorio existente es seguro. No sobrescribirá las cosas que ya están ahí. La razón principal para volver a ejecutargit init
es recoger las plantillas recién agregadas (o mover el repositorio a otro lugar, si--separate-git-dir
se proporciona).
Es decir, git init
se garantiza que no sobrescribirá lo que HEAD
usted puso en la plantilla, y tampoco utilizará la plantilla HEAD
para sobrescribir una existente HEAD
. Dado que esto está documentado explícitamente, puede confiar en ello.
Además, también dice:
Los archivos y directorios en el directorio de la plantilla cuyo nombre no comience con un punto se copiarán después de
$GIT_DIR
su creación.
Lo que significa que también puede confiar en que la plantilla se copiará inmediatamente después de la creación de .git
, y no en un momento posterior.
(Por supuesto, esta es mi interpretación personal del manual. Es muy posible que los desarrolladores de git no estén de acuerdo).
Respuesta4
Como se mencionó, HEAD está codificado para apuntar al maestro. Sin embargo, puede crear un alias de shell para hacer git init
lo que quiera. Si está utilizando bash como shell, coloque algo como esto en su .bashrc:
function git_init_fnc () {
default_branch="main"
if [[ $1 == "init" ]] && [[ $# -eq 1 ]];then
git init
if [[ ! -z $(git branch -a | grep $default_branch) ]]; then
git checkout "$default_branch"
else
git checkout -b "$default_branch"
fi
else
/usr/bin/git "$@"
fi
}
alias "git"=git_init_fnc
Esto reemplazará el comando git
con una función. Esta función hará que el comando git
se ejecute exactamente igual, a menos que esté llamando git init
sin ningún otro argumento. Cuando lo llames, git init
se iniciará el repositorio. A continuación comprobará si la rama "papá" ya existe. Si lo hace, verificará esa rama; de lo contrario, creará la rama y lo trasladará a ella.