Anular el usuario configurado para una única confirmación de git

100

Estoy tratando de comprometerme con un proyecto en github.com desde mi computadora portátil de trabajo, que ya está configurada para el servidor git de la empresa. ¿Hay alguna manera de confirmar la especificación de diferentes credenciales de autor, posible usando un archivo de configuración diferente u otros modificadores de línea de comando?

He intentado usar

--author="My Name <[email protected]>" 

y recibí el mensaje:

 Committer: unknown <[email protected]>
Your name and email address were configured automatically based
on your username and hostname. Please check that they are accurate.
You can suppress this message by setting them explicitly:

    git config --global user.name "Your Name"
    git config --global user.email [email protected]

After doing this, you may fix the identity used for this commit with:

    git commit --amend --reset-author

pero todavía no actualizó mi nombre de usuario para comprometerme con el proyecto github.com. ¿Hay algo más que pueda probar y es posible?

FilBot3
fuente
2
Git distingue entre el autor y el confirmador . Para configurar el committer temporalmente para un comando, use -c user.name=Me [email protected]. Para usar una configuración global personalizada, vea esta pregunta o use un alias de shell que contenga -copciones. Pero ninguno de estos es probablemente lo correcto en esta situación: desea una configuración por repositorio.
Robin Green
Con Git 2.22 (Q2 2019), tendrá configuraciones dedicadas {author,committer}.{name,email}. Vea mi respuesta a continuación
VonC

Respuestas:

182

Primero, el autor no es necesariamente el mismo que el autor. Git rastrea ambos.

Para establecer qué nombre usar solo para este repositorio, puede hacer lo siguiente:

git config user.name "Your Name"
git config user.email "Your email"

Note la ausencia de la --globalopción. Esto establecerá la configuración solo en este repositorio.

Alternativamente, puede hacer esto con un solo comando, usando la -copción:

git -c "user.name=Your Name" -c "user.email=Your email" commit ...

Pero creo que es mejor usar las opciones de configuración anteriores.

John Szakmeister
fuente
6
esto es exactamente lo que necesitaba, ya que necesito comprometerme desde una cuenta compartida (raíz en el servidor de desarrollo) en el repositorio de git debajo de mí y no quiero que se ofrezca mi nombre / correo electrónico a otros.
andrej
58

Intenta anteponer esto a tu comando git:

git -c [email protected] -c user.name='Your Name'

Esto está bien para una sola vez, pero podría preferir guardarlo en el archivo .git / config del repositorio local que clonó desde git. Esto se puede hacer ejecutando git config (no --global o --system para que sea "local al repositorio") o editando .git/config(es la misma sintaxis que~/.gitconfig

Asenar
fuente
1
¡Gracias! Comparto un servidor con varias personas y no quiero establecer un usuario predeterminado. ¡Esto es perfecto!
horriblemente
1
@horriblyUnpythonic de nada :) También puede crear un alias en su .bash_aliases, y / o también puede establecer un gancho de confirmación previa para rechazar la confirmación cuando el usuario no está definido.
Asenar
28

También podría establecer las variables de entorno GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, y GIT_AUTHOR_EMAILen función de cada concha o incluso por mando.

Jesse Glick
fuente
Genial, ya que esto se usaría principalmente en un escenario de computadora compartida, por sesión con limpieza automática es perfecto.
kmac
1
No funcionó para mí. El autor permaneció igual después git commit --amend. Solo cambió el autor.
Ondra Žižka
Lo mismo que hice yogit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD
1
Esto se debe git commit --amenda que el diseño no altera al autor, como dice la página de manual. Solución: git commit --amend --reset-author
kubanczyk
7

Creo que podrías correr:

git config user.name "Your Name"
git config user.email [email protected]

para diferentes partes de git. Intente abrir la carpeta donde se está realizando el trabajo para el repositorio en el servidor github.

Asegúrese de ver una carpeta .git en esa carpeta de trabajo. Ahora abra esa carpeta en Terminal / Console / CommandPrompt e intente cambiar el nombre de usuario y el correo electrónico para esa carpeta solo ejecutando los comandos que especifiqué anteriormente.

Al cambiar eso, ahora puede acceder al servidor de GitHub.

Echar un vistazo aquí: https://help.github.com/articles/setting-your-username-in-git

Además, creo que hay una manera de enviar a un repositorio remoto usando su nombre de usuario y contraseña de github en el comando mismo, pero no lo estoy citando porque no funcionó para mí.

Joe
fuente
5

Continuando con la respuesta de Jesse Glick aquí con una implementación ampliada porque, en mi opinión, su sugerencia es la mejor manera de hacerlo.

Agregue lo siguiente a su .bash_profile. Le pedirá un usuario cuando ejecute por primera vez cualquier comando git en el shell activo. Luego recordará al usuario para todas las ejecuciones posteriores.

(obviamente, haga una referencia cruzada de un valor de usuario de entrada para los nombres y direcciones de correo electrónico deseados exactos para los diversos valores de autor / nombre de git en el bloque de casos y actualice las asignaciones según sea necesario)

git() {
  echo "Running BETTER git..."
  if [ -z "$GIT_COMMITTER_NAME" ]; then
    while true; do
      read -p "Git User: " UNAME
      case $UNAME in
          user1 ) break;;
          user2 ) break;;
          * ) echo "Invalid User";;
      esac
    done
    GIT_COMMITTER_NAME=$UNAME
    export GIT_COMMITTER_NAME
    [email protected]
    export GIT_COMMITTER_EMAIL
    GIT_AUTHOR_NAME=$GIT_COMMITTER_NAME
    export GIT_AUTHOR_NAME
    GIT_AUTHOR_EMAIL=$GIT_COMMITTER_EMAIL
    export GIT_AUTHOR_EMAIL
  fi
  echo "  using git user: $GIT_AUTHOR_NAME / $GIT_AUTHOR_EMAIL"
  /usr/bin/git "$@"
}
barrio pobre
fuente
2

También podría establecer las variables de entorno GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAME, y GIT_AUTHOR_EMAILen función de cada concha o incluso por mando.

En realidad, desde Git 2.22 (Q2 2019) tiene una nueva opción: {author,committer}.{name,email}se han introducido cuatro nuevas variables de configuración para anularlas user.{name,email}en casos más específicos.

Consulte la confirmación 39ab4d0 (4 de febrero de 2019) de William Hubbs (``) .
(Combinado por Junio ​​C Hamano - gitster- en el compromiso 4e021dc , 07 de marzo de 2019)

config: permite dar identificadores de autor y de autor separados

Los author.email, author.name, committer.emaily committer.namelos ajustes son análogos a los GIT_AUTHOR_*y GIT_COMMITTER_*variables de entorno, pero para el git configsistema.
Esto permite que se establezcan por separado para cada repositorio.

Git admite la configuración de diferentes autorías e información de los confirmadores con variables de entorno. Sin embargo, las variables de entorno se establecen en el shell, por lo que si se necesita una autoría diferente y una información de confirmación para diferentes repositorios, se requiere una herramienta externa.

Esto añade soporte a git config para author.email, author.name, committer.emaily committer.name la configuración de lo que esta información se puede establecer por repositorio.

VonC
fuente