Перевизначити налаштованого користувача для одного коміту git


99

Я намагаюся взяти участь у проекті на github.com зі свого робочого ноутбука, який уже налаштований для корпоративного git-сервера. Чи є спосіб зафіксувати вказання різних облікових даних автора, можливий за допомогою іншого конфігураційного файлу або інших комутаторів командного рядка?

Я спробував використовувати

--author="My Name <MyNameEmail@email.com>" 

і я отримав повідомлення:

 Committer: unknown <WorkEmail@workemail.net>
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 you@example.com

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

    git commit --amend --reset-author

але це все одно не оновило моє ім'я користувача для вступу до проекту github.com. Чи можу я ще щось спробувати і чи можливо це взагалі?


2
Git розрізняє автора та комітера . Щоб тимчасово встановити комітер для однієї команди, використовуйте -c user.name=Me user.email=me@example.com. Щоб використовувати власну глобальну конфігурацію, перегляньте це запитання або використовуйте псевдонім оболонки, що містить -cпараметри. Але ніщо з цього, мабуть, не є правильним рішенням у цій ситуації - вам потрібна конфігурація per-repo.
Робін Грін,

З Git 2.22 (Q2 2019) у вас будуть спеціальні налаштування {author,committer}.{name,email}. Дивіться мою відповідь нижче
VonC

Відповіді:


181

По-перше, автор не обов’язково збігається з виконавцем. Git відстежує обидва.

Щоб встановити, яку назву використовувати лише для цього сховища, ви можете зробити:

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

Зверніть увагу на відсутність --globalопції. Це встановить конфігурацію лише у цьому сховищі.

Крім того, ви можете зробити це лише для однієї команди, використовуючи -cопцію:

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

Але я думаю, що краще просто використовувати параметри конфігурації вище.


5
це саме те , що мені потрібно було, оскільки мені потрібно зробити коміт із спільного облікового запису (корінь на сервері devel) у git repo під собою, і я не хочу, щоб інші пропонували моє ім’я / електронну адресу.
Андрей

58

Спробуйте додати це до вашої команди git:

git -c user.email=email@domain.fr -c user.name='Your Name'

Це нормально для одного знімка, але ви можете зберегти це у файлі .git / config локального репо, яке ви клонували з git. Це можна зробити, запустивши git config (немає --global або --system, щоб зробити його "локальним для репо") або відредагувавши .git/config(це той самий синтаксис, що і~/.gitconfig


1
Дякую! Я ділюся сервером із кількома людьми і не хочу встановлювати користувача за замовчуванням. Це прекрасно!
жахливо

1
@horriblyUnpythonic ласкаво просимо :) Ви також можете створити псевдонім у своєму .bash_aliases, та / або ви також можете встановити гачок попередньої комісії для відхилення коміту, коли користувач не визначений.
Асенар

28

Крім того, можна встановити змінні оточення GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEі GIT_AUTHOR_EMAILна основі в шкаралупі або навіть в командуванні.


Чудово, оскільки це в основному буде використано у сценарії спільного використання комп’ютера, ідеально підходить для сеансу з автоматичним очищенням.
kmac

1
Не працював у мене. Автор залишився незмінним і після git commit --amend. Змінився лише фіксатор.
Ondra Žižka

Те саме, що і яgit commit --amend --author="$GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>"
KCD

1
Це пояснюється тим, що git commit --amendза задумом автор не змінює автора, як сказано в керівництві. Рішення: git commit --amend --reset-author
kubanczyk

7

Я вірю, що ви могли б запустити:

git config user.name "Your Name"
git config user.email you@example.com

для різних частин git. Спробуйте відкрити папку, де виконується робота, для репо на сервер github.

Переконайтеся, що у цій робочій папці ви бачите папку .git. Тепер відкрийте цю папку в Terminal / Console / CommandPrompt і спробуйте змінити ім’я користувача та електронну адресу для цієї папки, лише запустивши команди, які я вказав вище.

Змінивши це, ви тепер зможете отримати доступ до сервера GitHub.

Подивіться тут: https://help.github.com/articles/setting-your-username-in-git

Крім того, я вважаю, що є спосіб перейти до віддаленого репо за допомогою вашого імені користувача та пароля github у самій команді, але я не цитую це, оскільки це не спрацювало для мене.


5

Продовжуючи відповідь Джессі Гліка тут із розширеною реалізацією, тому що його пропозиція ІМО - найкращий спосіб піти на це.

Додайте нижче до вашого .bash_profile. Він запропонує користувачеві під час першого запуску будь-якої команди git в активній оболонці. Потім він запам'ятає користувача для всіх наступних запусків.

(очевидно, перехресне посилання на введене значення користувача вказує точні бажані імена та адреси електронної пошти для різних значень git auther / name у блоці регістру та оновлює призначення за необхідності)

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
    GIT_COMMITTER_EMAIL=$UNAME@domain.com
    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 "$@"
}

2

Крім того, можна встановити змінні оточення GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEі GIT_AUTHOR_EMAILна основі в шкаралупі або навіть в командуванні.

Насправді, починаючи з Git 2.22 (Q2 2019), у вас є нова опція: чотири нові змінні конфігурації {author,committer}.{name,email}були введені для заміни user.{name,email}в більш конкретних випадках.

Див. Коміт 39ab4d0 (04 лютого 2019 р.) Вільяма Хаббса (``) .
(Об’єднано Junio ​​C Hamano - gitster- у комітеті 4e021dc , 07 березня 2019 р.)

config: дозволити вводити окремі ідентифікатори автора та комітера

В author.email, author.name, committer.emailі committer.nameнастройки аналогічні GIT_AUTHOR_*і GIT_COMMITTER_*змінних оточення, але і для git configсистеми.
Це дозволяє встановлювати їх окремо для кожного сховища.

Git підтримує встановлення різної інформації про авторство та комітети за допомогою змінних середовища. Однак змінні середовища встановлюються в оболонці, тому, якщо для різних сховищ потрібні різні відомості про авторство та комітер, потрібен зовнішній інструмент.

Це додає підтримку мерзотника конфігурації для author.email, author.name, committer.emailі committer.name налаштувань , щоб ця інформація може бути встановлена в сховище.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.