Git-репозитории на виртуальном хостинге с доступом по ssh - несколько пользователей / одна учетная запись ssh - PullRequest
4 голосов
/ 30 марта 2012

Я являюсь частью небольшой команды, пытающейся начать программирование проекта.Я решил, что пришло время дать git шанс (не более svn) и пытался выяснить, можем ли мы использовать наш общий веб-хостинг для развертывания там «публичного» хранилища, чтобы мы могли легко выдвигать / извлекать из него иБудьте в курсе всех остальных изменений.

Проблема, с которой я столкнулся сейчас, заключается в том, что у нас есть только одна учетная запись ssh для этого хостинга.Используя svn в прошлом, я мог применить имя пользователя svn для данной пары ключей ssh, однако я не могу сделать что-то подобное с git (другими словами, привязать пару ключей ssh ​​к определенному dev).Я не возражаю против того, чтобы у всех были права на чтение / запись везде, так как все, что является частным, должно оставаться на машине друг друга.Наконец, такие решения, как Gitosis, не могут быть использованы.

Я думаю, у меня вопрос к вам: как дается ответственность за толчок мерзавца?Это связано с используемой учетной записью ssh или адресом электронной почты, указанным в git config?Могу ли я создать разные ключи ssh для каждого разработчика (хотя и для одной и той же учетной записи ssh) и просто отправить их разработчикам?

Ответы [ 6 ]

8 голосов
/ 30 марта 2012

Обычно у вас есть пользователь git, для которого все используют коммиты, и у них есть ssh-ключи на сервере, чтобы вы могли войти в систему. Я использую gitolite для управления моим репозиторием git на работе. Однако вы можете сделать это только с помощью ssh.

Войдите в свой веб-хостинг, сделайте папку для вашего проекта. Затем попросите ваших разработчиков создать открытые ключи rsa и скопировать их в домашнюю папку вашего веб-хостинга. Скопируйте их в ~ / .ssh / authorized_keys. Теперь все ваши разработчики смогут подключиться к этой машине. Теперь у вас есть git pull webhostUsername @ somehost: project.git

Пример установки пустой директории:

ssh user@host.com
mkdir someProject.git
cd someProject.git
git init --bare
cd ~
git clone user@host:someProject.git test
cd test
touch README
git add README
git commit -m "added readme"
git push

Добавить разработчиков в этот аккаунт

scp someuser_id.pub user@host.com:
ssh user@host.com
cat someuser_if.pub >> ~/.ssh/authorized_keys

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

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

5 голосов
/ 23 августа 2012

У нас была похожая проблема: один сервер с клонированным репозиторием git и использованным, к которому разработчики подключались с использованием ключей SSH.Наша проблема заключалась в том, что нам нужен был точный коммиттер, который отправлял данные с этого сервера на Github.

git config, который может быть запущен, вероятно, с .bascrc во время входа в систему, не помогает, поскольку при этом устанавливаются настройки (user.nameи user.email) в домашнем каталоге пользователей с поддержкой SSH и, следовательно, для всех подключающихся разработчиков.Поэтому последний, устанавливающий соединение, отменяет настройку, которую только что установил другой разработчик.

Я обнаружил, что в этой статье вам также может понадобиться Перенос настроек Git на .Речь идет о настройке переменных:

GIT_AUTHOR_NAME="Developer Name"
GIT_AUTHOR_EMAIL=foo@example.org
GIT_COMMITTER_NAME="$GIT_AUTHOR_NAME"
GIT_COMMITTER_EMAIL="$GIT_AUTHOR_EMAIL"

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

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

1 голос
/ 30 марта 2012

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

git config --global user.name "Example Name"
git config --global user.email "example@email.address.com"

Вы можете проверить, какие у вас текущие настройки:

git config --list

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

Глобальные настройки могут быть переопределены переменными среды (см. Страница справочника git-commit-tree для подробной информации), но если нет ни перечисленных выше переменных среды, ни глобальных настроек, git будет использовать настройки, записанные для системной учетной записи, использованной для совершения фиксации (имя пользователя и хоста.)

0 голосов
/ 29 июня 2012

Так же, как обновление, я закончил тем, что делал выше с помощью специального скрипта gitserve, который нашел где-то вокруг (извините, у меня больше нет ссылки):

#!/usr/bin/env ruby

# user and permissions are passed from authorized_keys

user = ARGV[0]
permissions = ARGV[1]
command = ENV['SSH_ORIGINAL_COMMAND']
abort unless user and permissions and command

# check the supplied command contains a valid git action 

valid_actions = ['git-receive-pack', 'git-upload-pack']
action = command.split[0]
abort unless valid_actions.include? action

# check the permissions for this user

abort "read denied for #{user}" unless permissions =~ /r/
abort "write denied for #{user}" if action == 'git-receive-pack' and permissions !~ /w/

STDERR.write "user #{user} authorized\n"

# user made a valid request so handing over to git-shell

Kernel.exec 'git', 'shell', '-c', command

Мой файл .authorized_keys содержит записи, начинающиеся так:

command="/path/to/custom/script <username> <permissions>",no-port-forwarding,no-agent-forwarding,no-X11-forwarding,no-pty ssh-rsa ...

где разрешения = r, w или rw. Спасибо всем за ваши комментарии!

0 голосов
/ 31 марта 2012

Попробуйте бесплатное решение для хостинга, которое может предложить много преимуществ по сравнению с хостингом на вашем сервере.Преимущества, такие как расширенные рабочие процессы запросов на слияние, веб-браузеры кода со всеми видами функций и т. Д.

Возможно, вы захотите проверить Assembla - http://www.assembla.com. Они просто выпускают свои расширенные рабочие процессы запросов на слияние для Gitкоторые были очень полезны: http://blog.assembla.com/assemblablog/tabid/12618/bid/80158/Announcing-Advanced-Merge-Requests-for-Git.aspx

0 голосов
/ 30 марта 2012

С Gitosis вы по сути настроите одну учетную запись оболочки, которая принимает несколько ключей SSH.У каждого разработчика есть свой собственный ключ, и его коммиты правильно присваиваются владельцу ключа, а не владельцу учетной записи оболочки.

...