Несколько учетных записей GitHub на одном компьютере?
Попытка работать с моими реальными "рабочими" репозиториями и моими личными репозиториями на git hub с моего компьютера.
Рабочий аккаунт был настроен первым, и все работает без нареканий.
Моя личная учетная запись, однако, не может подтолкнуть к моему личному репо, настроенному под другой учетной записью / адресом электронной почты.
Я пытался скопировать рабочий ключ в личный кабинет, но это приводит к ошибке, потому что, конечно, ключ может быть прикреплен только к одному аккаунту.
Как я могу выдвигать / извлекать данные из обеих учетных записей, используя соответствующие учетные данные github?
42 ответа
Все, что вам нужно сделать, это настроить настройки SSH с несколькими парами ключей SSH.
По этой ссылке легко перейти (спасибо, Эрик): http://code.tutsplus.com/tutorials/quick-tip-how-to-work-with-github-and-multiple-accounts--net-22574
Генерация ключей SSH (Win / msysgit) https://help.github.com/articles/generating-an-ssh-key/
Кроме того, если вы работаете с несколькими репозиториями, используя разные персоны, вам необходимо убедиться, что в ваших отдельных репозиториях пользовательские настройки соответственно переопределены:
Настройка имени пользователя, электронной почты и токена GitHub - переопределение настроек для отдельных репозиториев https://help.github.com/articles/setting-your-commit-email-address-in-git/
Надеюсь это поможет.
Примечание: Некоторые из вас могут требовать, чтобы разные электронные письма использовались для разных репозиториев. В git 2.13 вы можете настроить электронную почту на основе каталога, отредактировав глобальный конфигурационный файл, который находится по адресу: ~/.gitconfig
используя условные выражения так:
[user]
name = Pavan Kataria
email = defaultemail@gmail.com
[includeIf "gitdir:~/work/"]
path = ~/work/.gitconfig
И тогда ваша рабочая конфигурация ~/work/.gitconfig будет выглядеть так:
[user]
email = pavan.kataria@company.tld
Спасибо @alexg за то, что сообщили мне об этом в комментариях.
Используйте HTTPS:
изменить удаленный URL на https:
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git
и тебе хорошо идти
git push
Чтобы гарантировать, что коммиты выглядят как выполненные пользователем USERNAME, можно также настроить user.name и user.email для этого проекта:
git config user.name USERNAME
git config user.email USERNAME@example.com
Начало в форме
Чтобы управлять git-репо под отдельной учетной записью github/bitbucket/ любой другой, вам просто нужно сгенерировать новый ключ SSH.
Но прежде чем мы сможем начать использовать репозитории с вашим вторым удостоверением личности, мы должны привести вас в форму - давайте предположим, что ваша система настроена с типичной id_rsa
а также id_rsa.pub
ключевая пара. Прямо сейчас ваш tree ~/.ssh
выглядит так
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── id_rsa
└── id_rsa.pub
Во-первых, назовите эту пару ключей - добавление описательного имени поможет вам вспомнить, какой ключ используется для какого пользователя / удаленного
# change to your ~/.ssh directory
$ cd ~/.ssh
# rename the private key
$ mv id_rsa github-mainuser
# rename the public key
$ mv id_rsa.pub github-mainuser.pub
Далее, давайте сгенерируем новую пару ключей - здесь я назову новый ключ github-otheruser
$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/github-otheruser
Теперь, когда мы смотрим на tree ~/.ssh
мы видим
$ tree ~/.ssh
/Users/you/.ssh
├── known_hosts
├── github-mainuser
├── github-mainuser.pub
├── github-otheruser
└── github-otheruser.pub
Далее нам нужно настроить ~/.ssh/config
файл, который будет определять наши ключевые конфигурации. Мы создадим его с надлежащими разрешениями на чтение / запись только для владельца
$ (umask 077; touch ~/.ssh/config)
Откройте его в своем любимом редакторе и добавьте следующее содержимое
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Предположительно, у вас будет несколько существующих репозиториев, связанных с вашей основной личностью GitHub. По этой причине, "по умолчанию" github.com Host
настроен на использование вашего mainuser
ключ. Если вы не хотите отдавать предпочтение одной учетной записи другой, я покажу вам, как обновить существующие репозитории в вашей системе, чтобы использовать обновленную конфигурацию ssh.
Добавьте ваш новый ключ SSH в github
Зайдите на https://github.com/settings/keys, чтобы добавить свой новый открытый ключ
Вы можете получить содержимое открытого ключа, используя: скопируйте / вставьте его в github
$ cat ~/.ssh/github-otheruser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACAQDBVvWNQ2nO5...
Теперь ваш новый пользовательский идентификатор полностью настроен - ниже мы покажем вам, как его использовать.
Начало работы: клонирование репо
Так как же это работает вместе с git и github? Ну, потому что вы не можете иметь курицу без яиц, мы рассмотрим клонирование существующего репо. Эта ситуация может относиться к вам, если у вас есть новая учетная запись Github для вашего рабочего места, и вы были добавлены в проект компании.
Скажем github.com/someorg/somerepo
уже существует, и вы были добавлены к нему - клонирование так же просто, как
$ git clone github.com-otheruser:someorg/somerepo.git
Эта полужирная часть должна соответствовать Host
имя, которое мы настроили в вашем ~/.ssh/config
файл. Это правильно соединяет git с соответствующим IdentityFile
и правильно аутентифицирует вас с GitHub
Начало работы: создание нового репо
Ну, потому что вы не можете иметь курицу без яиц, мы рассмотрим публикацию нового репо на вашем дополнительном аккаунте. Эта ситуация относится к пользователям, которые создают новый контент, используя свою дополнительную учетную запись github.
Давайте предположим, что вы уже проделали небольшую работу локально, и теперь вы готовы перейти на github. Вы можете следовать за мной, если хотите
$ cd ~
$ mkdir somerepo
$ cd somerepo
$ git init
Теперь настройте этот репо, чтобы использовать вашу личность
$ git config user.name "Mister Manager"
$ git config user.email "someuser@some.org"
Теперь сделайте свой первый коммит
$ echo "hello world" > readme
$ git add .
$ git commit -m "first commit"
Проверьте коммит, чтобы увидеть, что ваша новая личность была использована с помощью git log
$ git log --pretty="%H %an <%ae>"
f397a7cfbf55d44ffdf87aa24974f0a5001e1921 Mister Manager <someuser@some.org>
Хорошо, время, чтобы подтолкнуть к GitHub! Поскольку github еще не знает о нашем новом репо, сначала зайдите на https://github.com/new и создайте новое репо - назовите его somerepo
Теперь, чтобы настроить репозиторий на "общение" с github с использованием правильных идентификационных данных / учетных данных, мы добавили пульт. Предполагая, что ваше имя пользователя github для вашей новой учетной записи someuser
...
$ git remote add origin github.com-otheruser:someuser/somerepo.git
Эта полужирная часть абсолютно важна и должна соответствовать Host
что мы определили в вашем ~/.ssh/config
файл
Наконец, подтолкнуть репо
$ git push origin master
Обновите существующее хранилище, чтобы использовать новую конфигурацию SSH
Скажем, у вас уже есть клонированный репозиторий, но теперь вы хотите использовать новую конфигурацию SSH. В приведенном выше примере мы сохранили ваши существующие репозитории в такт, назначив ваш предыдущий id_rsa
/ id_rsa.pub
пара ключей для Host github.com
в вашем файле конфигурации SSH. В этом нет ничего плохого, но у меня сейчас есть как минимум 5 конфигураций github, и я не люблю думать об одной из них как о конфигурации "по умолчанию" - я бы предпочел прояснить каждую из них.
До того, как у нас было это
Host github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Так что теперь мы обновим это (изменения, выделенные жирным шрифтом)
Host github.com-mainuser
HostName github.com
User git
IdentityFile ~/.ssh/github-mainuser
Host github.com-otheruser
HostName github.com
User git
IdentityFile ~/.ssh/github-otheruser
Но это означает, что теперь любой существующий репо с github.com
Пульт больше не будет работать с этим файлом идентификации. Но не волнуйтесь, это простое решение.
Чтобы обновить любое существующее хранилище для использования вашей новой конфигурации SSH, просто откройте файл git config хранилища и обновите URL!
$ cd existingrepo
$ nano .git/config
Обновить поле удаленного источника (изменения выделены жирным шрифтом)
[remote "origin"]
url = github.com-mainuser:someuser/existingrepo.git
fetch = +refs/heads/*:refs/remotes/origin/*
Вот и все. Теперь вы можете push
/ pull
к вашему сердцу
Права доступа к файлу ключа SSH
Если у вас возникают проблемы с вашими открытыми ключами, которые работают неправильно, SSH довольно строго относится к разрешению файлов, разрешенному для вашего ~/.ssh
каталог и соответствующие файлы ключей
Как правило, любые каталоги должны быть 700
и любые файлы должны быть 600
- это означает, что они доступны только для чтения / записи - никакая другая группа / пользователь не может их читать / писать
$ chmod 700 ~/.ssh
$ chmod 600 ~/.ssh/config
$ chmod 600 ~/.ssh/github-mainuser
$ chmod 600 ~/.ssh/github-mainuser.pub
$ chmod 600 ~/.ssh/github-otheruser
$ chmod 600 ~/.ssh/github-otheruser.pub
Как мне управлять моими SSH ключами
Я управляю отдельными ключами SSH для каждого хоста, к которому я подключаюсь, так что, если какой-либо один ключ будет скомпрометирован, мне не придется обновлять ключи в любом другом месте, где я использовал этот ключ. Это как когда вы получаете уведомление от Adobe о том, что 150 миллионов информации их пользователей были украдены - теперь вам нужно отменить эту кредитную карту и обновить все службы, которые от нее зависят - что неприятно.
Вот что мой ~/.ssh
каталог выглядит так: у меня есть один .pem
ключ для каждого пользователя, в папке для каждого домена, к которому я подключаюсь. я использую .pem
ключи, поэтому мне нужен только один файл на ключ.
$ tree ~/.ssh
/Users/naomik/.ssh
├── config
├── github.com
│ ├── naomik.pem
│ ├── someusername.pem
├── known_hosts
├── naomi.makes.software
│ ├── naomi.pem
├── somedomain.com
│ ├── someuser.pem
└── someotherdomain.org
└── someuser.pem
А вот и мой соответствующий /.ssh/config
file - очевидно, что материал github важен для ответа на этот вопрос о github, но этот ответ направлен на то, чтобы вооружить вас знаниями для управления вашими идентификационными данными ssh на любом количестве сервисов / машин.
Host github.com-naomik
HostName github.com
User git
IdentityFile ~/.ssh/github.com/naomik.pem
Host github.com-someuser
HostName github.com
User git
IdentityFile ~/.ssh/github.com/someusername.pem
Host naomi.makes.software
User naomi
IdentityFile ~/.ssh/naomi.makes.software/naomi.pem
Host somedomain.com
HostName 162.10.20.30
User someuser
IdentityFile ~/.ssh/somedomain.com/someuser.pem
Host someotherdomain.org
User someuser
IdentityFile ~/.ssh/someotherdomain.org/someuser.pem
Получение вашего открытого ключа SSH из ключа PEM
Выше вы заметили, что у меня есть только один файл для каждого ключа. Когда мне нужно предоставить открытый ключ, я просто генерирую его по мере необходимости.
Поэтому, когда github запрашивает ваш открытый ключ ssh, запустите эту команду, чтобы вывести открытый ключ на стандартный вывод - копируйте / вставляйте, где это необходимо.
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAA...
Обратите внимание, что это также тот же процесс, который я использую для добавления моего ключа на любой удаленный компьютер. ssh-rsa AAAA...
значение копируется в пульт ~/.ssh/authorized_keys
файл
Преобразование вашего id_rsa
/ id_rsa.pub
пары ключей в формате PEM
Таким образом, вы хотите приручить ключевые файлы и сократить некоторые файловые системы? Конвертировать вашу пару ключей в один PEM легко
$ cd ~/.ssh
$ openssl rsa -in id_rsa -outform pem > id_rsa.pem
Или, следуя приведенным выше примерам, мы переименовали id_rsa -> github-mainuser
а также id_rsa.pub -> github-mainuser.pub
- так
$ cd ~/.ssh
$ openssl rsa -in github-mainuser -outform pem > github-mainuser.pem
Теперь, чтобы убедиться, что мы преобразовали это правильно, вам нужно убедиться, что сгенерированный открытый ключ совпадает с вашим старым открытым ключом.
# display the public key
$ cat github-mainuser.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
# generate public key from your new PEM
$ ssh-keygen -y -f someuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAA ... R++Nu+wDj7tCQ==
Теперь, когда у вас есть github-mainuser.pem
файл, вы можете безопасно удалить свой старый github-mainuser
а также github-mainuser.pub
файлы - необходим только файл PEM; просто сгенерируйте открытый ключ всякий раз, когда вам это нужно ^_^
Создание ключей PEM с нуля
Вам не нужно создавать пару секретный / открытый ключ, а затем конвертировать в один ключ PEM. Вы можете создать ключ PEM напрямую.
Давайте создадим newuser.pem
$ openssl genrsa -out ~/.ssh/newuser.pem 4096
Получение открытого ключа SSH такое же
$ ssh-keygen -y -f ~/.ssh/newuser.pem
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAACA ... FUNZvoKPRQ==
Создав различные псевдонимы хоста для github.com в вашем ~/.ssh/config и предоставив каждому псевдониму хоста свой собственный ключ ssh, вы можете легко использовать несколько учетных записей github без путаницы. Это потому, что github.com различает не пользователя, который всегда является просто git, а ключом ssh, который вы использовали для подключения. Просто настройте удаленное происхождение, используя собственные псевдонимы хоста ".
Приведенное выше резюме предоставлено комментариями к сообщению в блоге ниже.
Я нашел это объяснение самым ясным. И это работает для меня, по крайней мере, с апреля 2012 года.
http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/
Детали на http://net.tutsplus.com/tutorials/tools-and-tips/how-to-work-with-github-and-multiple-accounts/ на которые ссылается мишаба, очень хорошо работают для меня.
С этой страницы:
$ touch ~/.ssh/config
Затем отредактируйте этот файл, чтобы он был примерно таким (одна запись для каждой учетной записи):
#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
Host github-COMPANY
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_COMPANY
В моем случае у меня есть рабочая учетная запись в Git-Lab и моя личная учетная запись в GitHub. Моя учетная запись Git-Lab была настроена глобально для доступа из всех каталогов на моем ноутбуке следующим образом:
git config --global user.name WORK_USERNAME
git config --global user.email WORK_USERNAME@example.com
Поэтому, если вы ищете решение без использования SSL, вы можете сделать это, используя
git init
в пустой папке, а затем вставьте в эту папку учетные данные своей личной учетной записи:
git config user.name PERSONAL_USERNAME
git config user.email PERSONAL_USERNAME@example.com
Обратите внимание здесь
--global
не установлен, потому что вы хотите, чтобы ваш личный git был доступен только оттуда, а не отовсюду, поэтому все, что находится внутри этой папки, будет иметь свои учетные данные git, связанные с вашей личной учетной записью, а за ее пределами будет подключено к вашей рабочей учетной записи.
После этого вы можете клонировать свой репозиторий вот так
git clone your_repo_link.git
. Затем появится новое окно, в котором вас попросят войти в систему с вашей учетной записью github.
Чтобы проверить свой процесс, попробуйте внутри созданной папки, вы должны увидеть как рабочие, так и личные имена пользователей и адреса электронной почты.
Вне этой папки, если вы запустите
git config --list
вы должны видеть только свое рабочее имя пользователя и адрес электронной почты.
Вот и все, надеюсь, это поможет кому-то без настройки SSL.
- Перейти к ~/.ssh
- Создайте файл с именем config(без расширения)
Откройте конфигурационный файл и добавьте ниже коды. (изменить в соответствии с вашей учетной записью)
Аккаунт 1
# account_1 Host gitlab.com-account_1 HostName gitlab.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_account_1
Счет 2
# Account2 Host gitlab.com-Account2 HostName gitlab.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_Account2
Аккаунт 3
# Account_3 Host github.com-Account3 HostName github.com User git PreferredAuthentications publickey IdentityFile ~/.ssh/id_rsa_Account_3
Добавьте удаленный URL следующим образом
Аккаунт 1
git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
Счет 2
git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
Аккаунт 3
git remote add origin github.com-Account3:github_username/repo_name.git
Убедитесь, что имена IdentityFile совпадают с именами, которые вы создали во время генерации ключа ssh.
Этот ответ для начинающих (не Git Gurus). У меня недавно была эта проблема, и, возможно, это только я, но большинство ответов, казалось, требовали более глубокого понимания мерзавца. После прочтения нескольких ответов о переполнении стека, включая эту ветку, вот шаги, которые мне нужно было предпринять, чтобы легко переключаться между учетными записями GitHub (например, предположим, две учетные записи GitHub, github.com/personal и gitHub.com/work):
- Проверьте наличие ключей SSH: откройте терминал и выполните эту команду, чтобы просмотреть / просмотреть список существующих ключей SSH.
ls -al ~/.ssh
файлы с расширением.pub
ваши ключи SSH, так что у вас должно быть два дляpersonal
а такжеwork
Счета. Если есть только один или нет, его время для создания других мудрых пропустить это.
- Генерация ключа SSH: войдите в GitHub (как личный, так и рабочий), перейдите в " Настройки" и скопируйте соответствующую электронную почту.
Теперь вернитесь в терминал и запуститеssh-keygen -t rsa -C "the copied email"
, вот увидишь:
Генерация пары открытый / закрытый ключ RSA.
Введите файл для сохранения ключа (/.../.ssh/id_rsa):
id_rsa - это имя по умолчанию для ssh-ключа, который скоро будет сгенерирован, поэтому скопируйте путь и переименуйте по умолчанию, например/.../.ssh/id_rsa_work
если генерируете для работы аккаунт. введите пароль или просто введите, чтобы игнорировать, и вы прочитаете что-то вроде изображения randomart ключа: и изображение. сделанный.
Повторите этот шаг еще раз для своей второй учетной записи на github. Убедитесь, что вы используете правильный адрес электронной почты и другое имя ключа ssh (например, id_rsa_personal), чтобы избежать перезаписи.
На этом этапе вы должны увидеть две клавиши SSH при запускеls -al ~/.ssh
снова. - Свяжите ключ ssh с учетной записью gitHub. Следующий шаг - скопировать один из ключей ssh, запустите его, но замените собственное имя ключа ssh:
pbcopy < ~/.ssh/id_rsa_work.pub
заменитьid_rsa_work.pub
с тем, что ты назвал своим.
Теперь, когда наш ключ ssh скопирован в буфер обмена, вернитесь в учетную запись github [Убедитесь, что вы вошли в рабочую учетную запись, если скопированный ключ ssh являетсяid_rsa_work
] и перейдите к
Настройки - SSH и ключи GPG и нажмите кнопку Новый ключ SSH (не Новый ключ GPG, кстати:D)
дайте название для этого ключа, вставьте ключ и нажмите Add SSH key. Вы либо успешно добавили ключ ssh, либо заметили, что все это время было нормально (или вы получили ошибку, потому что выбрали новый ключ GPG вместо нового ключа SSH:D). - Свяжите ключ ssh с учетной записью gitHub. Повторите вышеуказанный шаг для своей второй учетной записи.
Отредактируйте глобальную конфигурацию git: Последний шаг - убедиться, что глобальный конфигурационный файл знает обо всех учетных записях github (так сказать).
Бежатьgit config --global --edit
чтобы отредактировать этот глобальный файл, если он открывает vim и вы не знаете, как его использовать, нажмитеi
чтобы войти в режим вставки, отредактируйте файл, как показано ниже, и нажмите esc, а затем:wq
чтобы выйти из режима вставки:[inside this square brackets give a name to the followed acc.] name = github_username email = github_emailaddress [any other name] name = github_username email = github_email [credential] helper = osxkeychain useHttpPath = true
Готово!, теперь, когда вы пытаетесь "вытолкнуть" или "вытянуть" из репо, вас спросят, какая учетная запись GitHub должна быть связана с этим репо, и его спросили только один раз, локальная конфигурация запомнит эту ссылку, а не глобальную, чтобы вы могли работать на разных репо, которые связаны с разными учетными записями без необходимости каждый раз редактировать глобальную конфигурацию.
Я использую сценарии оболочки, чтобы переключить меня на любую учетную запись, которую я хочу быть "активной". По сути, вы начинаете с нуля, настраиваете одну учетную запись и работаете правильно, а затем перемещаете эти файлы к имени с соответствующим префиксом. С этого момента вы можете использовать команду "github" или "gitxyz" для переключения:
# my github script
cd ~/.ssh
if [ -f git_dhoerl -a -f git_dhoerl.pub -a -f config_dhoerl ]
then
;
else
echo "Error: missing new files"
exit 1
fi
# Save a copy in /tmp, just in case
cp id_rsa /tmp
cp id_rsa.pub /tmp
cp config /tmp
echo "Saved old files in /tmp, just in case"
rm id_rsa
rm id_rsa.pub
rm config
echo "Removed current links/files"
ln git_dhoerl id_rsa
ln git_dhoerl.pub id_rsa.pub
ln config_dhoerl config
git config --global user.email "dhoerl@<company>.com"
git config --global github.user "dhoerl"
git config --global github.token "whatever_it_is"
ssh-add -D
Мне повезло с этим. Я также создал скрипт запуска в XCode (для пользователей Mac), чтобы он не собирал мой проект, если у меня не было правильной настройки (так как он использует git):
Запустите скрипт, помещенный после зависимостей (используя /bin/ksh в качестве оболочки):
if [ "$(git config --global --get user.email)" != "dhoerl@<company>.com" ]
then
exit 1
fi
РЕДАКТИРОВАТЬ: добавлены тесты для существования новых файлов и копирования старых файлов в /tmp, чтобы ответить на комментарий @naomik ниже.
Просто выяснил это для Windows, используя учетные данные для каждого репо:
cd c:\User1\SomeRepo
git config --local credential.https://github.com.user1 user1
git config --local credential.useHttpPath true
git config --local credential.helper manager
Формат учетных данных. https://github.com/. сообщает помощнику по учетным данным URL-адрес для учетных данных. 'UseHttpPath' указывает менеджеру учетных данных использовать путь для учетных данных. Если useHttpPath не указан, диспетчер учетных данных сохранит одно учетное имя для https://github.com/. Если он включен, диспетчер учетных данных будет хранить несколько учетных данных, что я и хотел.
Проще и проще исправить, чтобы избежать путаницы..
Для пользователей Windows использовать несколько или разные учетные записи git для разных проектов.
Следующие шаги: Перейти панель управления и поиск диспетчера учетных данных. Затем перейдите в диспетчер учетных данных -> учетные данные Windows
Теперь удалите узел git:https//github.com под заголовком " Общие учетные данные".
Это удалит текущие учетные данные. Теперь вы можете добавить любой проект через git pull, он запросит имя пользователя и пароль.
Когда вы сталкиваетесь с какой-либо проблемой с другим аккаунтом, делайте то же самое.
Спасибо
Есть множество ответов, объясняющих, как выполнить то, о чем вы просили, но я хотел бы предложить другую точку зрения.
Я думаю, что есть что сказать о том, чтобы держать работу и личные вещи отдельно друг от друга. Довольно тривиально переключаться между учетными записями пользователей во всех операционных системах, поэтому вы можете просто создать отдельные учетные записи ОС для работы и игр и иметь разные учетные записи github, входящие в каждую из них.
Четкое разделение проблем также может ...
- предотвратить смешивание ваших рабочих файлов с вашими личными файлами
- снизить риск выполнения действия не на том ресурсе
- потенциально ограничивать нарушения безопасности одним набором учетных записей / учетных данных
Спасибо user1107028:
Используйте HTTPS:
изменить удаленный URL на https:
git remote set-url origin https://USERNAME@github.com/USERNAME/PROJECTNAME.git и все готово:
мерзавец
Я нашел это лучшим способом при использовании нескольких учетных записей github. Я не могу использовать только одну учетную запись, это просто невозможно, и я не могу заставить SSH вести себя независимо от того, что я сделал. Я бы проголосовал за ответ, но у меня недостаточно баллов - я хотел бы поблагодарить этот простой обходной путь для тех, кто, как я, нуждается в чистом простом решении. Это сработало в первый раз и сэкономило мне время на борьбу.
Я вижу здесь множество возможных обходных путей. Как быстрое решение, @Greg's кажется относительно простым. Однако лучше настроить отдельные
ssh keys
для всех разных аккаунтов в долгосрочной перспективе. Это видео кратко демонстрирует это. Вот шаги, упомянутые в этом видеоблоге .
Шаг 1. Создайте новый ключ SSH для новой учетной записи и сохраните его в отдельном файле (например, ~ / .ssh / id_rsa_new_account_name), а не в исходном файле, т.е.
~/.ssh/id_rsa
ssh-keygen -t rsa -C "your-email-address"
Шаг 2 - прикрепите новый ключ
- Затем войдите в свою вторую учетную запись GitHub.
- Просмотрите к
Account Overview
, и прикрепите новый ключ~/.ssh/id_rsa_new_account_name.pub
в пределахSSH Public Keys
раздел. - В Терминале скажите SSH добавить новый идентификатор, набрав
ssh-add ~/.ssh/id_rsa_new_account_name
. В случае успеха вы увидите ответIdentity Added
.
Шаг 3 - Создайте файл конфигурации
touch ~/.ssh/config
И сохраните следующее содержимое в файл
#Default GitHub
Host github.com
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa
#New Account
Host github-new-account-name
HostName github.com
User git
IdentityFile ~/.ssh/id_rsa_new_account_name
Шаг 4 - Попробуйте сейчас каждый раз, когда вы хотите использовать новую учетную запись и связанный репо, введите это для соответствующего репо.
git remote add origin git@github-new-account-name:your-domain.com/your-repo.git
Если вы не хотите связываться с ~/.ssh/config
упомянутый здесь файл, вы можете вместо этого запустить git config core.sshCommand "ssh -i ~/.ssh/custom_id_rsa"
в репо, где вы хотите совершить фиксацию из другой учетной записи.
В остальном настройка такая же:
Создайте новый SSH-ключ для второй учетной записи с
ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa
Войдите в github с другой учетной записью, перейдите на https://github.com/settings/keys и вставьте содержимое
~/.ssh/custom_id_rsa.pub
Убедитесь, что вы используете SSH вместо HTTPS в качестве удаленного URL:
git remote set-url origin git@github.com:upstream_project_teamname/upstream_project.git
Помимо создания нескольких ключей SSH для нескольких учетных записей, вы также можете добавить соавторов в каждый проект, используя одни и те же адреса электронной почты учетной записи, и постоянно хранить пароль.
#this store the password permanently
$ git config --global credential.helper wincred
Я настроил несколько учетных записей с разными адресами электронной почты, затем поместил одного и того же пользователя и адрес электронной почты в каждую учетную запись в качестве одного из соавторов. Таким образом, я могу получить доступ ко всем аккаунтам без добавления ключа SSH или переключения на другое имя пользователя и адрес электронной почты для аутентификации.
Простой подход без использования пар ключей SSH
Просто измените
user.name
&
user.email
локально в репо. к тем, с которыми вы хотите нажать на это репо.
Пример: у меня есть рабочая учетная запись в gitlab с проектом. После клонирования этого проекта / репо в терминале я набираю:
git config user.name "my-work-username"
git config user.email "my-work-email-id"
Теперь предположим, что у меня есть еще один личный проект / репо в Gitlab, который я хочу связать со своей личной учетной записью. Как и выше, после клонирования я набираю:
git config user.name "my-personal-username"
git config user.email "my-personal-email-id"
Надеюсь это поможет. Проголосуйте, если это сработало для вас! :)
Самый простой и понятный подход (ИМХО) - никаких конфигурационных файлов не слишком много хлопот
Просто создайте другой ключ ssh.
Допустим, у вас есть новая рабочая учетная запись GitHub, просто создайте для нее новый ключ:
sh-keygen -t rsa -C "email@work_mail.com" -f "id_rsa_work_user1"`
Теперь у вас должно быть старое и новое, чтобы увидеть их, запустите:
ls -al ~/.ssh
Вы должны запустить выше только один раз.
С этого момента каждый раз, когда вы хотите переключиться между ними, просто запустите:
ssh-add -D
ssh-add ~/.ssh/id_rsa_work_user1 #make to use this without the suffix .pub
Чтобы переключиться на старый, запустите снова:
ssh-add -D
ssh-add ~/.ssh/<previous id_rsa>
Получил мое частное репо, работающее с использованием пар ключей SSH. Это было протестировано на git для Windows.
A. Создание пар открытого и закрытого ключей
- Запустите git bash
- Бежать
ssh-keygen -t ed25519 -C "your_email@example.com"
- Когда вам будет предложено "Введите файл для сохранения ключа", нажмите Enter, чтобы принять значение по умолчанию.
- Нажмите Enter, чтобы ввести пустую кодовую фразу.
- Запустите ssh-агент:
eval $(ssh-agent)
- Добавьте закрытый ключ в ssh-агент и сохраните кодовую фразу:
ssh-add ~/.ssh/id_ed25519
Б. Добавьте ключи SSH в учетную запись GitHub
- Скопируйте открытый ключ в буфер обмена:
clip < ~/.ssh/id_ed25519.pub
- На GitHub перейдите в Профиль -> Настройки -> Ключи SSH -> Новый ключ SSH.
- Дайте название. Например, "Windows на MacBook Pro".
- Вставьте ключ и нажмите "Добавить ключ SSH".
C. Проверить соединение SSH
- Войти:
ssh -T git@github.com
- Нажмите "да" для любого предупреждающего сообщения.
- Он должен показать: "Привет, имя пользователя!...", что означает успешный тест.
D. Настройте локальный репозиторий для использования ключей SSH
- Изменить адрес электронной почты и имя пользователя:
git config user.email your_email@example.com
git config user.name github_username
- Обновите удаленные ссылки, чтобы использовать git. Первый список удаленных URI:
git remote -v
git remote set-url origin git@github.com:github_username/your-repo-name.git
E. Тест
git remote show origin
Я нашел этот драгоценный камень очень полезным: sshwitch
https://github.com/agush22/sshwitch
http://rubygems.org/gems/sshwitch
Помогает выключить ssh ключи. Не забудьте сначала сделать резервную копию всего!
Также, чтобы убедиться, что коммиты имеют правильный адрес электронной почты, связанный с ними, я позаботился о том, чтобы файл ~/.gitconfig имел правильный адрес электронной почты.
просто добавьте эту строку в свой любимый редактор, и все готово на всю жизнь
git remote set-url origin https://user-token-of-particular-user@github.com/profile-name/repo-name
Другой более простой способ - использовать несколько приложений для настольных компьютеров, например, то, что я делаю, использовать учетную запись A на рабочем столе Github и использовать учетную запись B на Github Kraken.
Если у вас установлен WSL, вы можете иметь две отдельные учетные записи git - одну в WSL и одну в Windows.
в вашей~./gitconfig
ВНИМАТЕЛЬНО добавьте:
[url "git@github.com:{my_username}"]
insteadOf = https://github.com/{my_username}
[url "git@github.com{-my_org_short}:{my_org_name}/"]
insteadOf = https://github.com/{my_org_name}/
insteadOf = git@github.com:{my_org_name}/
где{-my_org_short}
является необязательным
вы можете поиграть, добавив имя пользователя своей организации вместо{my_org_name}
в разделе URL-адреса в зависимости от настроек GitHub
больше информации по этой ссылке
Вариант 0: вы не хотите возиться с настройками ОС... вы просто хотите зафиксировать другую учетную запись github с другим открытым ключом для одного репо.
решение:
создайте новый ключ: ssh-keygen -t rsa -b 4096 -f ~ /.ssh / alt_rsa
добавьте ключ в набор ключей: ssh-add -K ~ /.ssh / alt_rsa
скопируйте и добавьте ключ pub в учетную запись github: (см. инструкции github)
проверьте ключ с помощью github: ssh -i ~ /.ssh / alt_rsa T git@github.com
клонировать репо с использованием протокола git (не HTTP): git clone git@github:myaccount...
в клонированном репо:
git config core.sshCommand "ssh -i ~ /.ssh / alt_rsa -F /dev / null"
git config user.name [myaccount]
git config user.email [электронная почта myaccount]теперь вы сможете правильно использовать git push, не мешая своей повседневной учетной записи git
IntelliJ Idea имеет встроенную поддержку этого https://www.jetbrains.com/help/idea/github.html
Личный каталог .gitconfig
с использованием токена личного доступа
Если вы не хотите изменять файл хоста, используйте ключи SSH или настройте .gitconfig
для каждого репо, то вы можете использовать личный .gitconfig
которые вы в основном включаете из конфигурации корневого уровня. Учитывая структуру каталогов OSX, например
# root level git config
~/.gitconfig
# your personal repos under some folder like
../personal/
../home/
~/Dropbox/
Добавить .gitconfig
в вашей личной папке, например ~/Dropbox/.gitconfig
[user]
email = first.last@home.com
name = First Last
[credential]
username = PersonalGithubUsername
helper = osxkeychain
На вашем корневом уровне .gitconfig
добавляйте раздел includeIf для получения вашей личной конфигурации всякий раз, когда вы находитесь в своем личном каталоге. Любые настройки будут переопределять корневую конфигурацию, покаincludeIf
появляется после настроек, которые вы хотите изменить.
[user]
email = first.last@work.com
name = "First Last"
[credential]
helper = osxkeychain
[includeIf "gitdir:~/Dropbox/**"]
path = ~/Dropbox/.gitconfig
Попробуйте нажать на свое личное репо или вытащить из своего частного репо
git push
# prompts for password
При появлении запроса введите либо ваш личный пароль, либо, что еще лучше, ваш личный токен доступа, который вы создали в настройках разработчика вашей учетной записи. Введите этот токен в качестве пароля.
Предполагая, что вы уже используете git-credential-osxkeychain, ваши личные учетные данные должны храниться в вашей связке ключей, поэтому дваgithub
записи появятся, но с разными учетными записями.
Используйте докер!
Возможно, это не подходит для всех, но в конечном итоге я сделал это для себя.
Все мои разработки теперь делаются внутри докер-контейнеров. Я пользователь vim, но знаю, что у VSCode есть плагин для работы с контейнерами докеров.
Итак, поскольку у меня есть разные контейнеры докеров для разных проектов / языков, я могу использовать разные конфигурации git внутри каждого. Задача решена.
Управление несколькими учетными записями GitHub на одном компьютере с Windows (HTTPS)
Допустим, вы ранее использовали git на своем компьютере и настроили глобальный файл конфигурации git. Чтобы проверить это, откройте терминал и:
git config --global -e
Откроется ваш редактор, и вы можете увидеть что-то вроде этого:
[user]
email = yourEmail@gmail.com
name = Your_Name
...
И это здорово, потому что вы можете отправить свой код в учетную запись GitHub, не вводя каждый раз учетные данные. Но что, если ему нужно отправить репо с другой учетной записи? В этом случае git отклонит запрос с ошибкой 403, и вы должны изменить свои глобальные учетные данные git. Чтобы сделать этот удобный набор lat, сохраняющий имя репо в диспетчере учетных данных:
git config --global credential.github.com.useHttpPath true
чтобы проверить это, откройте конфигурацию еще раз git config --global -e вы увидите новые строки конфигурации
[credential]
useHttpPath = true
...
Вот оно. Теперь, когда вы впервые нажимаете на любую учетную запись, вы увидите всплывающее окно Screenshot_1
Введите конкретные учетные данные для этой учетной записи репо, и это «привяжет» эту учетную запись к репо. Итак, на вашем компьютере вы можете указать столько учетных записей / репозиториев, сколько захотите.
Для более подробного объяснения вы можете посмотреть это классное видео, которое я нашел на YouTube: https://youtu.be/2MGGJtTH0bQ
Обновление 2023 г.:
Вы можете использовать Github Desktop . Здесь вам просто нужно клонировать репозиторий в свой локальный и управлять кодом с помощью Github Desktop.