В моем ~/.gitconfig
списке я указал свой личный адрес электронной почты [user]
, поскольку именно это я и хочу использовать для репозиториев Github.
Но я недавно начал использовать git и для работы. Git-репо моей компании позволяет мне фиксировать, но когда он рассылает объявления о новых наборах изменений, он говорит, что они от Anonymous, потому что он не распознает адрес электронной почты в моем .gitconfig
- по крайней мере, это моя теория.
Можно ли указать несколько [user]
определений в .gitconfig
? Или есть какой-то другой способ переопределить значение .gitconfig
по умолчанию для определенного каталога? В моем случае я проверяю весь рабочий код в ~/worksrc/
- есть ли способ указать .gitconfig
только для этого каталога (и его подкаталогов)?
git
git-config
Брок Боланд
источник
источник
Ответы:
Вы можете настроить индивидуальное репо на использование определенного пользователя / адреса электронной почты, который переопределяет глобальную конфигурацию. Из корня репо запустите
тогда как пользователь / адрес электронной почты по умолчанию настроен в вашем ~ / .gitconfig
источник
.git/config
файлеgit config --edit
иgit config --global --edit
. И если вы пропустили комментарий Абизерна , файл конфигурации репозитория находится по адресу<repo-root>/.git/config
.Git 2.13
выпущенным сегодня.Начиная с git 2.13 , это можно решить, используя недавно введенные условные включения .
Пример:
Глобальная конфигурация ~ / .gitconfig
Конкретный рабочий конфиг ~ / work / .gitconfig
источник
git config --list
в разных каталогах. В подкаталогах~/work/
, содержащих git-репозиторий,includeIf
эффект вступает в силу. Обратите внимание, что в подкаталогах~/work/
, не содержащих git-репозиторий, функцияincludeIf
не выполняется.Или вы можете добавить следующую информацию в свой локальный
.git/config
файлисточник
Переключатель учетных записей github одной команды
Это решение принимает форму единственного псевдонима git. После выполнения текущий пользователь проекта будет присоединен к другой учетной записи
Генерация ключей SSH
Свяжите их с вашими учетными записями GitHub / Bitbucket
pbcopy < ~/.ssh/id_rsa.pub
add SSH key
страницу githubpbcopy < ~/.ssh/id_rsa_pro.pub
Шаг 1. Автоматическое переключение по ssh-ключу.
Мы можем настроить
ssh
использование определенного ключа шифрования в зависимости отhost
. Приятно, что у вас может быть несколько псевдонимов для одного и того жеhostname
.Смотрите этот пример
~/.ssh/config
файла:Git Remote Configuration
Теперь вы можете использовать эти псевдонимы в git remotes, изменив
git@github.com
наgit@github_pro
.Вы можете изменить существующие удаленные проекты (используя что-то подобное
git remote set-url origin git@github_pro:foo/bar.git
) или адаптировать их напрямую при клонировании.используя псевдоним, он становится:
git clone git@github_pro:ArnaudRinquin/atom-zentabs.git
Шаг 2. Изменение git user.email
Настройки Git config могут быть глобальными или для каждого проекта. В нашем случае нам нужны индивидуальные настройки проекта. Это очень легко изменить:
Несмотря на то, что это легко, для разработчиков нам нужно много времени. Для этого мы можем написать очень простой псевдоним git.
Мы собираемся добавить его в
~/.gitconfig
файл.Затем все, что нам нужно сделать, это
git setpromail
изменить нашу электронную почту только для этого проекта.Шаг 3. Один командный переключатель, пожалуйста ?!
Разве не было бы неплохо переключиться с учетной записи по умолчанию на указанную с помощью одной команды без параметров? Это определенно возможно. Эта команда будет состоять из двух шагов:
У нас уже есть одно командное решение для второго шага, но первый намного сложнее. Одна команда удаленного изменения хоста
Вот решение в виде еще одной команды git alias, которую нужно добавить к вашему
~/.gitconfig
:Это позволяет менять все пульты с одного хоста на другой (псевдоним). Смотрите пример:
Объедините их всех
Теперь нам просто нужно объединить две команды в одну, это довольно просто. Посмотрите, как я также интегрирую переключение хостов Bitbucket.
Ссылка на источник - Учебное пособие
источник
setpromail
псевдонимconfig --global
вместо этого (и у меня есть другие псевдонимы для установки различных адресов электронной почты). Оно работает!useConfigOnly = true
другим ответом.Получив некоторое вдохновение из поста Орра Селлы в блоге, я написал хук перед фиксацией (постоянно находится в нем
~/.git/templates/hooks
), который бы устанавливал конкретные имена пользователей и адреса электронной почты на основе информации внутри локального репозитория./.git/config
:Вы должны поместить путь к каталогу шаблона в ваш
~/.gitconfig
:Затем каждый
git init
илиgit clone
подхватит этот хук и применит пользовательские данные в течение следующегоgit commit
. Если вы хотите применить хук к уже существующим репо, просто запуститеgit init
репо внутри, чтобы заново инициализировать его.Вот крючок, который я придумал (он все еще нуждается в некоторой полировке - предложения приветствуются). Сохранить либо как
или
и убедитесь, что он исполняемый:
chmod +x ./post-checkout || chmod +x ./pre_commit
РЕДАКТИРОВАТЬ:
Поэтому я переписал хук как ловушку и команду в Python. Кроме того, скрипт также можно вызывать как команду Git (
git passport
). Также можно определить произвольное количество идентификаторов внутри configfile (~/.gitpassport
), которые можно выбрать в приглашении. Вы можете найти проект на github.com: git-passport - команда Git и хук, написанный на Python для управления несколькими учетными записями Git / идентификацией пользователей .источник
chmod +x post-checkout
, 2.git_remotes
значения являются начальной частью полного имени хоста, напримерgit@github.com
, 3.local_id
значения должны быть отредактированы пользователем по соответствующим именам и адресам электронной почты.git init
новые проекты из IDE, такой какeclipse
(которая не может обрабатывать интерактивные триггеры предварительной фиксации)Если вы не хотите иметь адрес электронной почты по умолчанию (адрес электронной почты ссылается на пользователя github ), вы можете настроить, что вы хотите, чтобы вас спрашивали. Как вы можете это сделать, зависит от версии используемого вами git, см. Ниже.
(Предполагаемый) недостаток заключается в том, что вам необходимо настроить свой адрес электронной почты (и ваше имя) один раз для каждого хранилища. Таким образом, вы не можете забыть сделать это.
Версия <2.7.0
в вашей глобальной конфигурации,
~/.gitconfig
как указано в комментарии Дэна Алони в блоге Орра Селлы . При попытке сделать первый коммит в репозитории, git завершается неудачно с хорошим сообщением:Имя берется из глобальной конфигурации, когда адрес электронной почты устанавливается локально (сообщение не является абсолютно точным).
2.7.0 ≤ Версия <2.8.0
Поведение в версиях <2.7.0 не было предназначено и исправлено с 2.7.0. Вы все еще можете использовать ловушку перед фиксацией, как описано в блоге Орра Селлы . Это решение работает и для других версий, но другие решения не для этой версии.
Версия ≥ 2.8.0
Дэн Алони добавил опцию для достижения такого поведения (см. Примечания к выпуску ). Используйте это с:
Чтобы это работало, вы не можете указывать имя или адрес электронной почты в глобальной конфигурации. Затем при первом коммите вы получаете сообщение об ошибке
Таким образом, сообщение не очень поучительно, но, поскольку вы явно задаете опцию, вы должны знать, что делать. В отличие от решения версий <2.7.0, вы всегда должны указывать имя и адрес электронной почты вручную.
источник
git bisect
обнаружил, что коммит 19ce497c ... ввел это поведение. Тем не менее, независимо от версии (2.5 - 2.7) я могу использоватьemail =
(без аргумента) в конфигурации, и он показывает то же поведение, что иemail = "(none)"
в старых версиях. Вы можете это подтвердить? Если так, я отредактирую свой ответ. Я просто скептически отношусь, так как это кажется очевидным, и я не использовал его раньше.email =
в 2.7.0, Git по-прежнему угадывает адрес электронной почты на основе имени пользователя и имени хоста. Теперь я используюpre-commit
подход в блоге Селлы. Я также уведомил Дана Алони, который придумал эту"(none)"
идею в посте Селлы, и он подал патч, чтобы официально реализовать его как функцию: permalink.gmane.org/gmane.comp.version-control.git/285301С помощью условных включений в Git 2.13 теперь возможно совместное использование нескольких пользователей и адресов электронной почты на одном компьютере без особых усилий.
user.gitconfig
имеет мое личное имя и адрес электронной почты.work-user.gitconfig
есть мое рабочее имя и адрес электронной почты. Оба файла находятся в~
пути.Поэтому мое личное имя / адрес электронной почты применяются по умолчанию. Для
c:/work/
DIR применяется мое имя работы / адрес электронной почты. Дляc:/work/github/
DIR применяется мое личное имя / адрес электронной почты. Это работает, когда применяются последние настройки.gitdir
чувствителен к регистру иgitdir/i
нечувствителен к регистру."gitdir/i:github/"
применил бы условное включение для любого каталогаgithub
в своем пути.источник
gitdir/i
мне помогли (что его ответ не упоминает).Другим вариантом
git
работы с несколькими именами / электронными письмами является использование псевдонимовgit
и использование-c
флага для переопределения глобальной и специфичной для репозитория конфигурации.Например, определив псевдоним:
Чтобы увидеть, работает ли он, просто введите
git config user.email
:Вместо псевдонима вы также можете поместить собственный
git
исполняемый файл в свой$PATH
.Преимущество этого метода перед репозиторием
.git/config
заключается в том, что он применяется к каждомуgit
репозиторию, когда пользовательскаяgit
программа активна. Таким образом, вы можете легко переключаться между пользователями / именами без изменения какой-либо (общей) конфигурации.источник
Git псевдонимы (и разделы в Git Configs) на помощь!
добавить псевдоним (из командной строки):
затем установите, например,
и в новом или клонированном репо вы можете запустить эту команду:
Это решение не является автоматическим, но при снятии с охраной пользователя и адрес электронной почты в вашем глобальном
~/.gitconfig
и установкахuser.useConfigOnly
дляtrue
вынудит мерзавец , чтобы напомнить вам , чтобы установить их вручную в каждом новом или клонированный репо.источник
Вот полные шаги после прочтения многих ответов здесь
Как настроить параметры нескольких ключей SSH для другой учетной записи GitHub
Вы можете начать проверять сохраненные ключи
Если вы решили удалить все кэшированные ключи ранее ( необязательно, позаботьтесь об этом )
Затем вы можете создать ключ ssh pub / priv, связанный с каждым письмом / учетной записью, которые вы хотите / должны использовать
После выполнения этих команд у вас будут созданы следующие файлы
Убедитесь, что агент аутентификации запущен
Добавьте сгенерированные ключи следующим образом (из папки ~ / .ssh)
Теперь вы можете проверить сохраненные ключи снова
Теперь вам нужно добавить сгенерированные открытые ключи на ваш сервер github / bickbuket Acces Keys
Клонировать каждый репозиторий в разные папки
Перейдите в папку , в которой пользователь работа будет работать и выполнять это
Просто чтобы увидеть, что это делает, проверьте содержимое ".git / config"
Перейдите в папку, где будет работать пользователь pers , и выполните это
Просто чтобы увидеть, что это делает, проверьте содержимое ".git / config"
После всего этого вы сможете зафиксировать свой личный и рабочий код, просто переключаясь между этими двумя папками.
Если вы используете Git Bash и вам нужно сгенерировать ssh-ключи под Windows, выполните следующие действия:
https://support.automaticsync.com/hc/en-us/articles/202357115-Generating-an-SSH-Key-on-Windows
источник
Существует простое решение, которое, кажется, хорошо работает для избежания ошибок.
Просто удалите
[user]
раздел из своего~/.gitconfig
, что позволит вам не делать никаких коммитов без настройкиuser.name
для каждого репозитория.В вашем
~/.bashrc
, добавьте несколько простых псевдонимов для пользователя и электронной почты:источник
Этот ответ частично вдохновлен публикацией @Saucier, но я искал автоматизированный способ установки
user.name
иuser.email
для каждого репо, на основе удаленного, который был немного более легким, чем пакет git-passport, который он разработал , Также h / t в @John для установки useConfigOnly. Вот мое решение:.gitconfig
изменения:хук post-checkout, который следует сохранить по следующему пути
~/.git-templates/hooks/post-checkout
:Я использую разные учетные данные для github и gitlab, но эти ссылки в приведенном выше коде можно заменить или дополнить любым сервисом, который вы используете. Для того чтобы хук post-checkout автоматически устанавливал имя пользователя и адрес электронной почты для репо после извлечения, убедитесь, что имя сервиса отображается в удаленном URL-адресе, добавьте его в массив services в
post-checkout
скрипте и создайте для него раздел в ваш,.gitconfig
который содержит ваше имя пользователя и адрес электронной почты для этой услуги.Если ни одно из имен сервисов не отображается в удаленном URL-адресе или в репозитории нет удаленного, имя пользователя и адрес электронной почты не будут установлены локально. В этих случаях
user.useConfigOnly
будет действовать настройка, которая не позволит вам совершать коммиты до тех пор, пока имя пользователя и адрес электронной почты не будут установлены на уровне репо, и предложит пользователю настроить эту информацию.источник
chmod 755
зацепить скрипт. В противном случае он будет скопирован, но никогда не будет выполнен.GIT_AUTHOR_EMAIL
+ местный.bashrc
.bashrc_local
: не отслеживайте этот файл, поместите его только на рабочий компьютер:.bashrc
: отследите этот файл, сделайте его одинаковым на рабочем и домашнем компьютерах:Я использую https://github.com/technicalpickles/homesick для синхронизации моих точечных файлов.
Если только gitconfig будет принимать переменные окружения: Расширение переменной оболочки в git config
источник
Окружающая среда Windows
Дополнительно это можно изменить
Git Extensions --> Settings --> Global Settings
, если он установлен в ваших системах.gitextensions-последний релиз
Щелкните правой кнопкой мыши папку / каталог в среде Windows, чтобы получить доступ к этим настройкам.
Обновление : Как переключить / сохранить несколько настроек в версии 2.49
источник
Может быть, это простой взлом, но это полезно. Просто сгенерируйте 2 ssh-ключа, как показано ниже.
Таким же образом создайте еще один для личного. Итак, у вас есть 2 ssh-ключа, работа и компания. Скопируйте work.pub, work, personal.pub, personal в ~ / .ssh / Directory.
Затем создайте сценарий оболочки со следующими строками и назовите его crev.sh (Company Reverse) со следующим содержимым.
Таким же образом создайте еще один файл с именем prev.sh (Personal Reverse) со следующим содержимым.
в ~ / .bashrc добавьте псевдонимы для этих скриптов, как показано ниже
Всякий раз, когда вы хотите использовать компанию, просто делайте Crev, и если вы хотите использовать личные, делайте пред.
Добавьте эти ключи ssh в свои учетные записи GitHub. Убедитесь, что у вас нет сгенерированного ранее id_rsa, потому что эти скрипты будут перезаписывать id_rsa. Если вы уже создали id_rsa, используйте это для одной из учетных записей. Скопируйте их как личные и пропустите генерацию личных ключей.
источник
Я сделал функцию bash, которая справится с этим. Вот репозиторий Github .
Для записи:
источник
Просто добавьте это в ваш ~ / .bash_profile, чтобы переключаться между ключами по умолчанию для github.com
источник
Вы также можете использовать
git commit --author "Your Name <your@email.com>"
в момент совершения коммита в репо, где вы хотите коммитить как другой пользователь.источник
Что-то вроде ответа Роба В. , но он позволяет использовать другой ключ ssh и работает со старыми версиями git (в которых нет, например, конфигурации core.sshCommand).
Я создал файл
~/bin/git_poweruser
с разрешением на выполнение и в ПУТИ:Всякий раз, когда я хочу зафиксировать или выдвинуть что-либо как «Опытный пользователь», я использую
git_poweruser
вместоgit
. Он должен работать в любом каталоге и не требует изменений.gitconfig
или.ssh/config
, по крайней мере, в моем.источник
Хотя большинство вопросов вроде отвечало на ОП, мне просто пришлось пройти через это самому, и даже не взглянув на меня, я смог найти самое быстрое и простое решение. Вот простые шаги:
.gitconfg
из вашего другого репо.gitconfig
файле, такие как имя, адрес электронной почты и имя пользователя[user] name = John email = john@email.net username = john133
.gitignore
список, чтобы убедиться, что вы не фиксируете.gitconfig
файл в своем репозиторииисточник