Несколько учетных записей GitHub на одном компьютере?

Попытка работать с моими реальными "рабочими" репозиториями и моими личными репозиториями на git hub с моего компьютера.

Рабочий аккаунт был настроен первым, и все работает без нареканий.

Моя личная учетная запись, однако, не может подтолкнуть к моему личному репо, настроенному под другой учетной записью / адресом электронной почты.

Я пытался скопировать рабочий ключ в личный кабинет, но это приводит к ошибке, потому что, конечно, ключ может быть прикреплен только к одному аккаунту.

Как я могу выдвигать / извлекать данные из обеих учетных записей, используя соответствующие учетные данные github?

42 ответа

Решение

Все, что вам нужно сделать, это настроить настройки SSH с несколькими парами ключей SSH.

Кроме того, если вы работаете с несколькими репозиториями, используя разные персоны, вам необходимо убедиться, что в ваших отдельных репозиториях пользовательские настройки соответственно переопределены:

Настройка имени пользователя, электронной почты и токена 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. Аккаунт 1

      # account_1
      Host gitlab.com-account_1
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_account_1
      
    2. Счет 2

      # Account2
      Host gitlab.com-Account2
      HostName gitlab.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account2
      
    3. Аккаунт 3

      # Account_3
      Host github.com-Account3
      HostName github.com
      User git
      PreferredAuthentications publickey
      IdentityFile ~/.ssh/id_rsa_Account_3
      
  • Добавьте удаленный URL следующим образом

    1. Аккаунт 1

      git remote add origin git@gitlab.com-account_1:group_name/repo_name.git
      
    2. Счет 2

      git remote add origin git@gitlab.com-Account2:group_name/repo_name.git
      
    3. Аккаунт 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):

  1. Проверьте наличие ключей 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 снова.
  2. Свяжите ключ 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).
  3. Свяжите ключ ssh с учетной записью gitHub. Повторите вышеуказанный шаг для своей второй учетной записи.
  4. Отредактируйте глобальную конфигурацию 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" в репо, где вы хотите совершить фиксацию из другой учетной записи.

В остальном настройка такая же:

  1. Создайте новый SSH-ключ для второй учетной записи с ssh-keygen -t rsa -f ~/.ssh -f ~/.ssh/custom_id_rsa

  2. Войдите в github с другой учетной записью, перейдите на https://github.com/settings/keys и вставьте содержимое~/.ssh/custom_id_rsa.pub

  3. Убедитесь, что вы используете 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.

Источник: https://docs.github.com/en/free-pro-team@latest/github/authenticating-to-github/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

A. Создание пар открытого и закрытого ключей

  1. Запустите git bash
  2. Бежать ssh-keygen -t ed25519 -C "your_email@example.com"
  3. Когда вам будет предложено "Введите файл для сохранения ключа", нажмите Enter, чтобы принять значение по умолчанию.
  4. Нажмите Enter, чтобы ввести пустую кодовую фразу.
  5. Запустите ssh-агент: eval $(ssh-agent)
  6. Добавьте закрытый ключ в ssh-агент и сохраните кодовую фразу: ssh-add ~/.ssh/id_ed25519

Б. Добавьте ключи SSH в учетную запись GitHub

  1. Скопируйте открытый ключ в буфер обмена: clip < ~/.ssh/id_ed25519.pub
  2. На GitHub перейдите в Профиль -> Настройки -> Ключи SSH -> Новый ключ SSH.
  3. Дайте название. Например, "Windows на MacBook Pro".
  4. Вставьте ключ и нажмите "Добавить ключ SSH".

C. Проверить соединение SSH

  1. Войти: ssh -T git@github.com
  2. Нажмите "да" для любого предупреждающего сообщения.
  3. Он должен показать: "Привет, имя пользователя!...", что означает успешный тест.

D. Настройте локальный репозиторий для использования ключей SSH

  1. Изменить адрес электронной почты и имя пользователя:
git config user.email your_email@example.com
git config user.name github_username
  1. Обновите удаленные ссылки, чтобы использовать 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 с другим открытым ключом для одного репо.

решение:

  1. создайте новый ключ: ssh-keygen -t rsa -b 4096 -f ~ /.ssh / alt_rsa

  2. добавьте ключ в набор ключей: ssh-add -K ~ /.ssh / alt_rsa

  3. скопируйте и добавьте ключ pub в учетную запись github: (см. инструкции github)

  4. проверьте ключ с помощью github: ssh -i ~ /.ssh / alt_rsa T git@github.com

  5. клонировать репо с использованием протокола git (не HTTP): git clone git@github:myaccount...

  6. в клонированном репо:

    git config core.sshCommand "ssh -i ~ /.ssh / alt_rsa -F /dev / null"
    git config user.name [myaccount]
    git config user.email [электронная почта myaccount]

  7. теперь вы сможете правильно использовать 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.

Другие вопросы по тегам