Используйте разные user.email и user.name для конфигурации Git на основе URL удаленного клона
Я настраиваю свой глобальный ~/.gitconfig
свойства user.name
а также user.email
как это:
git config --global user.email "mkobit@example.com"
git config --global user.name "mkobit"
Это конфигурация по умолчанию, которую я хочу для работы над личными проектами, с открытым исходным кодом и т. Д.
Когда я работаю над проектом из определенного домена, например, корпоративного домена, я настраиваю его для каждого репозитория, когда клонирую его, чтобы он использовал другой user.name
/user.email
:
git clone ssh://git@git.mycorp.com:1234/groupA/projectA.git
cd projectA
git config user.email "mkobit@mycorp.com"
git config user.name "m.kobit"
Одним из приличных вариантов будет установка псевдонима для клонирования таких репозиториев:
git config --global alias.clonecorp 'clone \
-c user.name="m.kobit" -c user.email="mkobit@mycorp.com"'
git clonecorp ssh://git@git.mycorp.com:1234/groupA/projectA.git
Оба из них могут быть подвержены ошибкам, потому что они оба зависят от того, насколько я умен и правильно следую. Факты показывают, что это почти гарантировано для меня когда-нибудь облажаться.
Есть ли способ настроить Git таким образом, чтобы репозитории из определенного домена (mycorp.com
в этом примере) будет настроен определенный путь?
4 ответа
В выпуске Git 2.13 появилась функция условных включений. В 2.13 единственной поддерживаемой конфигурацией является путь к файловой системе. Это легко использовать в этом случае, потому что я уже разделяю их.
Пример, приведенный в примечаниях к выпуску:
Вы можете настроить два условных включения в вашем домашнем каталоге
~/.gitconfig
файл:[includeIf "gitdir:~/work/"] path = .gitconfig-work [includeIf "gitdir:~/play/"] path = .gitconfig-play
Теперь вы можете поместить любые параметры в эти файлы:
$ cat ~/.gitconfig-work [user] name = Serious Q. Programmer email = serious.programmer@business.example.com $ cat ~/.gitconfig-play [user] name = Random J. Hacker email = rmsfan1979@example.com
Старый ответ
В Git 2.8 глобальная конфигурация user.useconfigonly
было добавлено, что пользователь настаивает на user.email
а также user.name
устанавливаются до совершения. Вот соответствующий текст из связанного сообщения в блоге от Github:
Но если, скажем, вы хотите, чтобы Git использовал один адрес электронной почты для ваших проектов с открытым исходным кодом, а другой - для ваших рабочих проектов, вы, несомненно, допустили ошибку, приняв участие в создании нового репозитория Git, не задав предварительно свой адрес электронной почты. репозиторий. В этой ситуации Git выдает предупреждение, но в любом случае создает коммит, используя адрес электронной почты, который он угадывает по имени хоста локальной системы. Если вы пытаетесь сделать что-то настолько сложное, как разные адреса для разных проектов, это почти наверняка не то, что вам нужно.
Теперь вы можете сказать Git не угадывать, а настаивать на том, чтобы вы явно указали user.name и user.email, прежде чем он позволит вам совершить коммит:
git config --global user.useconfigonly true
Это не решает автоматическую настройку, основанную на определенных URL-адресах клонирования, но делает процесс чуть менее подверженным ошибкам, форсируя настройку в начале.
начиная с 2.36.0 git теперь поддерживает это по удаленному URL-адресу
~/.gitconfig файл:
[includeIf "hasconfig:remote.*.url:git@github.com*/**"]
path = .gitconfig-public
[includeIf "hasconfig:remote.*.url:git@ghe.corp.lol*/**"]
path = .gitconfig-work
Затем добавьте свою настройку в указанные выше конфиги.
Я оказался в той же ситуации: осознав, что я использовал свою корпоративную электронную почту для коммитов сразу после отправки в не корпоративные репозитории... Итак, я написал небольшой git-хук, который также может оказаться полезным: https://github.com/DrVanScott/git-clone-init
На основе настраиваемого файла шаблона он инициализирует user.email и user.name в git clone.
Когда я работаю над проектом из определенного домена, например, корпоративного домена, я настраиваю его для каждого репозитория, когда клонирую его
Обязательно используйте Git 2.22 (Q2 2019), если ваше условие включает в себя конфигурацию IncludeIf
использует шаблон:
См. Коммит 19e7fda (26 марта 2019 г.) Нгуен Тай Нгук Дуй ( pclouds
)
(Объединено Юнио С Хамано - gitster
- в коммите 078b254 от 22 апреля 2019 г.)
config
: правильный '**
в соответствииincludeIf
узорыЭлектрический ток
wildmatch()
зватьincludeIf
шаблон gitdir не проходитWM_PATHNAME
флаг.
Без этого флага*
'рассматривается почти так же, как'**
' (так как '*
'также соответствует косой черте) с одним исключением:'
/**/
'может соответствовать один слеш.
Шаблон 'foo/**/bar
' Матчи 'foo/bar
".Но '
/*/
', что, по сути, то, что движок wildmatch видит безWM_PATHNAME
, должен соответствовать две косые черты (и '*
'ничего не соответствует).
Что значит 'foo/*/bar
"не может совпадать"foo/bar
".
Это может только соответствоватьfoo//bar
".Результатом этого является текущий
wildmatch()
Call работает большую часть времени, пока пользователь зависит от/**/
'не соответствует компоненту пути.
А также '*
'совпадает с косой чертой, хотя не должно, но люди, вероятно, еще не заметили этого. Исправление просто.