Comment valider le code en tant qu'utilisateur différent?

112

Je veux pouvoir faire cela pour un script. Je recrée essentiellement l'historique des versions de certains codes dans Git - il utilise actuellement un système de contrôle de version différent. J'ai besoin du script pour pouvoir ajouter les commits à Git tout en préservant l'auteur d'origine (et la date) du commit.

En supposant que je connaisse l'auteur du commit et la date / heure de la modification, existe-t-il une commande Git qui me permet de le faire? Je suppose que oui, car git-p4 fait quelque chose de similaire. Je demande simplement la meilleure façon de le faire.

Carl
la source
1
Avez-vous essayé d'utiliser l'importation rapide?
alternative
Je suis d'accord, l' importation rapide est probablement la meilleure solution. Vous pouvez utiliser git commit (ou plus correctement la plomberie sous-jacente: hash-object , update-index , write-tree , commit-tree , update-ref , etc.), mais une importation rapide serait, enfin, plus rapide.
Chris Johnsen
J'ai pensé à l'import rapide, mais comme je suis moi-même assez git débutant, j'ai décidé d'utiliser les commandes de base. Pour être parfaitement honnête, je ne comprends pas parfaitement le fonctionnement de l'importation rapide et j'hésite donc un peu à l'utiliser jusqu'à ce que je le comprenne mieux. Oui, l'utilisation de commit sera beaucoup plus lente, mais au moins je saurai à quoi m'attendre - en particulier lors du débogage.
Carl
1
git commit --author = "Nom <[email protected]>" -a -m "commit msg"
Masih

Réponses:

148

Découvrez l' --authoroption pour git commit:

Depuis la page de manuel :

--author=<author>

Remplacez l'auteur du commit. Spécifiez un auteur explicite en utilisant le A U Thor <[email protected]>format standard . Sinon, il <author>est supposé être un modèle et est utilisé pour rechercher un commit existant par cet auteur (ie rev-list --all -i --author=<author>); l'auteur du commit est alors copié à partir du premier tel commit trouvé.

Tim Henigan
la source
18
En outre, la --datepossibilité de remplacer la date.
Chris Johnsen
Pouvez-vous donner un exemple spécifique, tout ce que j'essaye
studgeek
@Tim Henigan: Il semble que la documentation soit maintenant hébergée sur Github, donc le lien de la page de manuel que vous avez posté est mort. Pouvez-vous confirmer que la nouvelle page est la même chose (au cas où d'autres réponses auraient besoin de liens mis à jour)?
R0MANARMY
@ R0MANARMY: J'ai mis à jour l'URL. Les pages GitHub sont correctes. J'ai mis à jour mon lien car les pages de manuel ne sont plus hébergées sur kernel.org. Merci de m'avoir informé du changement.
Tim Henigan
1
Voici ce que j'ai fini par utiliser:git commit -a --author="$user_details" --date="submit_date $submit_time" --file=/tmp/commit_msg
Carl
113

Juste pour ajouter à ceci: l' --authoroption mentionnée dans la réponse acceptée ne remplacera que l' auteur , pas les informations de committer du commit.

C'est le comportement correct dans la plupart des cas, mais si, pour une raison quelconque, vous devez également remplacer manuellement les informations du committer , utilisez les variables d'environnement GIT_COMMITTER_NAMEet GIT_COMMITTER_EMAIL(il y en a GIT_COMMITTER_DATEaussi une ). Voir Git-Internals-Environment-Variables

$ GIT_COMMITTER_NAME="New Name" GIT_COMMITTER_EMAIL="[email protected]" git commit --author="New Name <[email protected]>"

Cela donnera l'impression que la validation a été créée et validée par l'utilisateur spécifié.

friederbluemle
la source
16
... et pour voir la différence:git log --pretty=fuller
bluenote10
2
Parfait. C'est ce que je voulais et je n'aurais jamais pu trouver la page de manuel git internals.
ksp
3

Modifiez votre fichier ~ / .gitconfig et ajoutez un nouvel alias dans lequel vous pouvez personnaliser un utilisateur et un e-mail autres que ceux par défaut.

[user]
  name = My Name
  email = [email protected]

[alias]
  commit-x = -c user.name='My X Name' -c user.email='[email protected]' commit
  commit-y = -c user.name='My Y Name' -c user.email='[email protected]' commit
  commit-z = -c user.name='My Z Name' -c user.email='[email protected]' commit

Essaye-le

git commit -m "Custom message with committer and author My Name <[email protected]>"
git commit-x -m "Custom message with committer and author My X Name <[email protected]>"
git commit-y -m "Custom message with committer and author My Y Name <[email protected]>"
git commit-z -m "Custom message with committer and author My Z Name <[email protected]>"
Barbe
la source