Cambiar el nombre de la rama predeterminada de git init

Cambiar el nombre de la rama predeterminada de git init

Estoy tratando de descubrir cómo usar git initun nombre de rama predeterminado diferente al masterde 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 initse 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 initproducirá 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, HEADescodificadoapuntar 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 initcambiarla por otra cosa.

QuéesSin embargo, lo posible es cambiar lo que HEADapunta justo después git initcon la ayuda degit symbolic-ref:

$ git init
$ git symbolic-ref HEAD refs/heads/test

Esto cambiará HEADpara apuntar a una rama (aún no existente) llamada test. Luego, cuando cree su primera confirmación, se llamará a la rama testen 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 HEADen 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 HEADarchivo en .git, en lugar de depender de si .gitfue necesario crearlo o no. Sin embargo, realmente no importa qué mensaje te muestre. Desde la página de manual de git-init:

Ejecutar git initen un repositorio existente es seguro. No sobrescribirá las cosas que ya están ahí. La razón principal para volver a ejecutar git inites recoger las plantillas recién agregadas (o mover el repositorio a otro lugar, si --separate-git-dirse proporciona).

Es decir, git initse garantiza que no sobrescribirá lo que HEADusted puso en la plantilla, y tampoco utilizará la plantilla HEADpara 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_DIRsu 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 initlo 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 gitcon una función. Esta función hará que el comando gitse ejecute exactamente igual, a menos que esté llamando git initsin ningún otro argumento. Cuando lo llames, git initse 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.

información relacionada