git setup для нескольких репозиториев на одном сервере - PullRequest
20 голосов
/ 06 марта 2011

Наверное, простой вопрос, но я в недоумении ...

В github можно добавить ключ развертывания для каждого хранилища, который дает доступ только к этому единственному хранилищу.

Но для одного клиента у меня есть два проекта, управляемых с помощью git на одном сервере (проект A и проект B). Если я использую открытый ключ для проекта A, github говорит мне, что я не могу использовать его в качестве ключа развертывания для проекта B и наоборот.

Как я могу создать еще один открытый ключ и настроить git для использования одного ключа для проекта A и другого для проекта B?

Ответы [ 2 ]

41 голосов
/ 06 марта 2011

Для этого ssh можно использовать ~/.ssh/config, создать псевдоним имени хоста и получить доступ к github с разными именами хоста для обоих проектов.Я понятия не имею, существует ли способ git config (или git remote).

Host a.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-a-id_rsa

Host b.github.com
HostName github.com
User git
IdentityFile ~/.ssh/project-b-id_rsa

Затем используйте a.github.com:user/project-a.git или b.github.com:user/project-b.git (или аналогичный) в качестве URL-адреса хранилища.

2 голосов
/ 22 октября 2014

Допустим, alice - пользователь github.com с 2 или более закрытыми репозиториями repoN.В этом примере мы будем работать только с двумя репозиториями с именами repo1 и repo2

https://github.com/alice/repo1

https://github.com/alice/repo2

Вам нужно вытащить изэти хранилища без ввода пароля, вероятно, на сервере или на нескольких серверах.Например, вы хотите выполнить git pull origin master и хотите, чтобы это происходило без запроса пароля.

Вам не нравится иметь дело с ssh-agent, вы обнаружили (или обнаруживаете сейчас)о ~/.ssh/config файле, который сообщает вашему ssh-клиенту, какой закрытый ключ использовать в зависимости от имени хоста и имени пользователя, с простой записью конфигурации, которая выглядит следующим образом:

Host github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/alice_github.id_rsa
  IdentitiesOnly yes

Итак, вы пошли дальше и создали свой (alice_github.id_rsa, alice_github.id_rsa.pub) keypair, вы также пошли в файл хранилища .git/config и изменили URL своего удаленного origin, чтобы он был примерно таким:

[remote "origin"]
        url = "ssh://git@github.com/alice/repo1.git"

И, наконец, вы пошли в хранилище Settings > Deploy keys раздел и добавил содержимое alice_github.id_rsa.pub

На этом этапе вы могли бы сделать ваш git pull origin master без ввода пароля без проблем.

а как насчет второго хранилища?

Таким образом, ваш инстинкт будет заключаться в том, чтобы захватить этот ключ и добавить его к repo2 ключам Deploy, но github.com выдаст ошибку и скажет, что ключ уже используется.

Теперь выиди и сгенерируй другой ключ (конечно, используя ssh-keygen -t rsa -C "alice@alice.com" без паролей), и, чтобы это не стало беспорядком, теперь ты назовешь свои ключи так:

  • repo1 пара ключей:(repo1.alice_github.id_rsa, repo1.alice_github.id_rsa.pub)
  • repo2 пара ключей: (repo2.alice_github.id_rsa, repo2.alice_github.id_rsa.pub)

Теперь вы добавите новый открытый ключ в конфигурацию repo2 Deploy keys на github.com, но теперьу вас есть проблема с ssh.

Как ssh может сказать, какой ключ использовать, если репозитории размещены в одном и том же github.com домене?

Ваш файл .ssh/config указывает на github.com, и он не знает, какойключ, который нужно использовать, когда пришло время сделать это.

Итак, я нашел трюк с github.com.Вы можете сообщить своему SSH-клиенту, что каждый репозиторий находится в отдельном поддомене github.com, в этих случаях они будут repo1.github.com и repo2.github.com

Итак, во-первых, нужно отредактировать файлы .git/config на вашемклоны репо, поэтому они выглядят так:

для репо1

[remote "origin"]
        url = "ssh://git@repo1.github.com/alice/repo1.git"

для репо2

[удаленный "источник"] url = "ssh: // git @repo2.github.com/alice/repo2.git"

И затем, в вашем файле .ssh/config, теперь вы сможете ввести конфигурацию для каждого субдомена:)

Host repo1.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo1.alice_github.id_rsa
  IdentitiesOnly yes

Host repo2.github.com
  HostName github.com
  User git
  IdentityFile /home/alice/.ssh/repo2.alice_github.id_rsa
  IdentitiesOnly yes

Теперь вы можете git pull origin master без ввода каких-либо паролей из обоих репозиториев.

Если у вас несколько компьютеров, вы можете скопировать ключи на каждую из машин и использовать их повторно, но я бы посоветовал сделатьработа ногами, чтобы генерировать 1 ключ на машину и репо.У вас будет намного больше ключей для обработки, но вы будете менее уязвимы, если кто-то будет взломан.

...