Remplacer l'utilisateur configuré pour un seul commit git

99

J'essaie de m'engager dans un projet sur github.com depuis mon ordinateur portable de travail, qui est déjà configuré pour le serveur git de l'entreprise. Existe-t-il un moyen de valider en spécifiant différentes informations d'identification d'auteur, possible en utilisant un fichier de configuration différent ou d'autres commutateurs de ligne de commande?

J'ai essayé d'utiliser

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

et j'ai reçu le message:

 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

mais il n'a toujours pas mis à jour mon nom d'utilisateur pour m'engager dans le projet github.com. Y a-t-il autre chose que je puisse essayer et est-ce même possible?

FilBot3
la source
2
Git fait la distinction entre l' auteur et le committer . Pour définir temporairement le validateur pour une commande, utilisez -c user.name=Me [email protected]. Pour utiliser une configuration globale personnalisée, consultez cette question ou utilisez un alias de shell contenant des -coptions. Mais aucun de ces éléments n'est probablement la bonne chose à faire dans cette situation - vous voulez une configuration par dépôt.
Robin Green
Avec Git 2.22 (Q2 2019), vous aurez des paramètres dédiés {author,committer}.{name,email}. Voir ma réponse ci
VonC

Réponses:

180

Premièrement, l'auteur n'est pas nécessairement le même que l'auteur de l'infraction. Git suit les deux.

Pour définir le nom à utiliser uniquement pour ce référentiel, vous pouvez faire:

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

Notez l'absence de l' --globaloption. Cela définira la configuration dans ce référentiel uniquement.

Vous pouvez également le faire pour une seule commande, en utilisant l' -coption:

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

Mais je pense qu'il est préférable d'utiliser simplement les options de configuration ci-dessus.

John Szakmeister
la source
5
c'est exactement ce dont j'avais besoin car je dois m'engager à partir d'un compte partagé (racine sur le serveur de développement) dans git repo sous moi-même et je ne veux pas que d'autres se voient proposer mon nom / email.
andrej
58

Essayez de l'ajouter à votre commande git:

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

C'est correct pour un one-shot, mais vous pouvez préférer enregistrer ceci dans le fichier .git / config du dépôt local que vous avez cloné à partir de git. Cela peut être fait en exécutant git config (pas de --global ou --system pour le rendre "local au dépôt") ou en éditant le .git/config(c'est la même syntaxe que~/.gitconfig

Asenar
la source
1
Je vous remercie! Je partage un serveur avec plusieurs personnes et je ne souhaite pas définir d'utilisateur par défaut. C'est parfait!
horriblementUnpythonic
1
@horriblyUnpythonic vous êtes les bienvenus :) Vous pouvez également créer un alias dans votre .bash_aliases, et / ou vous pouvez également définir un hook de pré-validation pour rejeter la validation lorsque l'utilisateur n'est pas défini.
Asenar
28

Vous pouvez également définir des variables d'environnement GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEet GIT_AUTHOR_EMAILsur un par-shell ou même par-commande base.

Jesse Glick
la source
Génial, car cela serait principalement utilisé dans un scénario d'ordinateur partagé, par session avec un nettoyage automatique est parfait.
kmac
1
Cela n'a pas fonctionné pour moi. L'auteur est resté le même après git commit --amend. Seul le commiter a changé.
Ondra Žižka
Même chose ici et je l'ai faitgit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD
1
C'est parce que git commit --amendpar conception ne modifie pas l'auteur, comme le dit la page de manuel. Solution: git commit --amend --reset-author
kubanczyk
7

Je crois que vous pourriez courir:

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

pour différentes parties de git. Essayez d'ouvrir le dossier dans lequel le travail est effectué pour le dépôt sur le serveur github.

Assurez-vous que vous voyez un dossier .git dans ce dossier de travail. Ouvrez maintenant ce dossier dans Terminal / Console / CommandPrompt et essayez de changer le nom d'utilisateur et l'e-mail de ce dossier uniquement en exécutant les commandes que j'ai spécifiées ci-dessus.

En modifiant cela, vous pourrez désormais accéder au serveur GitHub.

Jetez un coup d' oeil ici: https://help.github.com/articles/setting-your-username-in-git

De plus, je pense qu'il existe un moyen de pousser vers un dépôt distant en utilisant votre nom d'utilisateur et votre mot de passe github dans la commande elle-même, mais je ne le cite pas car cela n'a pas fonctionné pour moi.

Joe
la source
5

Suite à la réponse de Jesse Glick ici avec une implémentation étendue parce que l'OMI sa suggestion est la meilleure façon de procéder.

Ajoutez ce qui suit à votre .bash_profile. Il vous demandera un utilisateur lors de la première exécution d'une commande git dans le shell actif. Il se souviendra alors de l'utilisateur pour toutes les exécutions suivantes.

(évidemment, faites une référence croisée à une valeur utilisateur d'entrée pour obtenir les noms et adresses e-mail souhaités exacts pour les différentes valeurs git auther / name dans le bloc case et mettez à jour les attributions si nécessaire)

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 "$@"
}
bidonville
la source
2

Vous pouvez également définir des variables d'environnement GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEet GIT_AUTHOR_EMAILsur un par-shell ou même par-commande base.

En fait, depuis Git 2.22 (Q2 2019), vous avez une nouvelle option: quatre nouvelles variables de configuration {author,committer}.{name,email}ont été introduites pour remplacer user.{name,email}dans des cas plus spécifiques.

Voir commit 39ab4d0 (04 février 2019) par William Hubbs (``) .
(Fusionné par Junio ​​C Hamano - gitster- dans commit 4e021dc , 07 mars 2019)

config: permet de donner des identifiants d'auteur et de committer séparés

Les author.email, author.name, committer.emailet les committer.nameparamètres sont analogues aux GIT_AUTHOR_*et GIT_COMMITTER_*variables d' environnement, mais aussi pour le git configsystème.
Cela leur permet d'être définis séparément pour chaque référentiel.

Git prend en charge la définition de différentes informations d'auteur et de committer avec des variables d'environnement. Cependant, les variables d'environnement sont définies dans le shell, donc si des informations d'auteur et de committer différentes sont nécessaires pour différents référentiels, un outil externe est requis.

Cela ajoute à l' appui git config pour author.email, author.name, committer.emailet les committer.name paramètres afin que cette information peut être réglé par dépôt.

VonC
la source