Инструменты пользователя

Инструменты сайта


vcs:multiple-gitlab-accounts-ssh-config

Различия

Здесь показаны различия между двумя версиями данной страницы.

Ссылка на это сравнение

vcs:multiple-gitlab-accounts-ssh-config [2016/05/30 21:58] (текущий)
Строка 1: Строка 1:
 +====== GitHub/​GitLab:​ одновременная работа с несколькими репозитариями ======
  
 +===== Введение =====
 +По долгу службы приходится много работать с git, и чаще всего это клиент командной строки. Я не использую различные gui клиенты,​ а их на самом деле уже достаточно много:
 +  * [[https://​www.sourcetreeapp.com/​|source tree]]
 +  * [[https://​tortoisegit.org/​|tortoise git]]
 +  * [[https://​desktop.github.com/​|GitHub Desktop]]
 +  * [[http://​www.collab.net/​products/​giteye|giteye]]
 +  * [[https://​git-for-windows.github.io/​|git for windows]]
 +  * [[https://​gitextensions.github.io/​|Git Extensions]]
 +
 +Возможно дело привычки,​ а возможно,​ мне просто не нужны все возможности таких клиентов. Как правило мне хватает git клиента из состава [[http://​cmder.net/​|cmder]],​ без которого работа в консоли windows это просто сущий ад.
 +
 +Так как большая часть репозитариев использует аутентификацию по ключам,​ то для быстрого доступа очень удобно использовать настройки ssh клиента,​ которые описываются в файле ~/​.ssh/​config и имеют вид
 +
 +<​html>​
 +<pre class="​hl_js ini">​
 +Host gitlab.example.com
 +    HostName gitlab.example.com
 +    User git
 +    IdentityFile ~/​.ssh/​gitlab.example.com.key
 +    IdentitiesOnly yes
 +    PreferredAuthentications publickey
 +</​pre>​
 +</​html>​
 +
 +В случае windows файл будет располагаться в C:​\Users\alex\.ssh\config. Но в определенный момент возникает проблема,​ как производить аутентификацию,​ когда url репозитария один и тот же, а меняется лишь имя репозитария,​ ну например,​
 +
 +<cli>
 +ssh://​git@gitlab.example.com:​2222/​GROUP1/​project11.git
 +ssh://​git@gitlab.example.com:​2222/​GROUP2/​project21.git
 +ssh://​git@gitlab.example.com:​2222/​GROUP3/​project31.git
 +</​cli>​
 +
 +Есть несколько путей решения данной проблемы. Ниже рассмотрим их.
 +
 +
 +
 +===== Настройка ssh клиента =====
 +
 +Первый способ заключается в использовании т.н. алиасов,​ т.е. когда в Host мы указываем уникальный идентификатор для связки host + repostory. Ну например
 +
 +<cli>
 +Host group1-project1
 +    HostName gitlab.example.com
 +    User git
 +    IdentityFile ~/​.ssh/​group1_project1.key
 +    IdentitiesOnly yes
 +    PreferredAuthentications publickey
 +</​cli>​
 +
 +И затем при работе с этим репозитарием использовать
 +<cli prompt='​λ'>​
 +λ git clone ssh://​group1-project1:​2222/​GROUP1/​project11.git
 +</​cli>​
 +
 +Итак, мой тестовый config файл имеет вид
 +<cli prompt='​λ'>​
 +λ cat ~/​.ssh/​config
 +Host github-casperjs
 +    HostName gitlab.example.net
 +    User git
 +    IdentityFile ~/​.ssh/​github_casperjs.key
 +    IdentitiesOnly yes
 +    PreferredAuthentications publickey
 +
 +Host github-phantomjs
 +    HostName gitlab.example.net
 +    User git
 +    IdentityFile ~/​.ssh/​github_phantomjs.key
 +    IdentitiesOnly yes
 +    PreferredAuthentications publickey
 +</​cli>​
 +
 +А теперь пробуем клонировать проекты
 +<cli prompt='​λ'>​
 +λ git clone ssh://​github-casperjs:​2222/​github/​casperjs.git
 +Cloning into '​casperjs'​...
 +remote: Counting objects: 14841, done.
 +remote: Compressing objects: 100% (5441/​5441),​ done.
 +remote: Total 14841 (delta 9312), reused 14841 (delta 9312)
 +Receiving objects: 100% (14841/​14841),​ 8.50 MiB | 1.53 MiB/s, done.
 +Resolving deltas: 100% (9312/​9312),​ done.
 +Checking connectivity... done.
 +Checking out files: 100% (285/285), done.
 +
 +λ git clone ssh://​github-phantomjs:​2222/​github/​phantomjs.git
 +Cloning into '​phantomjs'​...
 +remote: Counting objects: 63957, done.
 +remote: Compressing objects: 100% (30569/​30569),​ done.
 +remote: Total 63957 (delta 31979), reused 63574 (delta 31601)
 +Receiving objects: 100% (63957/​63957),​ 127.61 MiB | 1.28 MiB/s, done.
 +Resolving deltas: 100% (31979/​31979),​ done.
 +Checking connectivity... done.
 +Checking out files: 100% (638/638), done.
 +</​cli>​
 +
 +Как видим, все работает.
 +
 +
 +
 +===== Использование GIT_SSH_COMMAND =====
 +Альтернативный вариант заключается в использовании переменной окружения **GIT_SSH_COMMAND**. Но данный вариант будет работать только на linux, ну либо при использовании git bash
 +<cli prompt='​$'>​
 +$ GIT_SSH_COMMAND="​ssh -i ~/​.ssh/​github_casperjs.key"​ git clone git@gitlab.example.net:​2222/​github/​casperjs.git
 +Cloning into '​casperjs'​...
 +remote: Counting objects: 14841, done.
 +remote: Compressing objects: 100% (5441/​5441),​ done.
 +remote: Total 14841 (delta 9312), reused 14841 (delta 9312)
 +Receiving objects: 100% (14841/​14841),​ 8.50 MiB | 1.53 MiB/s, done.
 +Resolving deltas: 100% (9312/​9312),​ done.
 +Checking connectivity... done.
 +Checking out files: 100% (285/285), done.
 +</​cli>​
vcs/multiple-gitlab-accounts-ssh-config.txt · Последние изменения: 2016/05/30 21:58 (внешнее изменение)