2016-09-16 2 views
5

Я читал много информации, но все еще не могу понять. Предположим, у нас есть серверная машина и клиентская машина. Клиент подключается к серверу через ssh. Нет никакой аутентификации на сервере для git. Я рассматриваю простейшую конфигурацию - есть три клиента и один сервер. На сервере git repo хранитсяGit - требуется git на сервере?

Нужно ли устанавливать git на сервере в этом случае? Я запутался, так как команды git push и git clone выполняются с использованием git на стороне клиента.

+0

Это зависит от того, что вы хотите сделать с git на сервере ... – deceze

+0

@deceze Я считаю самый простой вариант тремя клиентами и одним сервером. На сервере сохраняется git-репо. –

+0

Здесь вы найдете полезную информацию: https://git-scm.com/book/en/v1/Git-on-the-Server – xbonez

ответ

6

Как и другие отметили, вы не нужен «сервер» в том смысле, «одну большую машину, где-то в Интернете», но если вы используете git push, машина, на которой вы запускаете git push, является технически клиентской машиной, и тот, который вы нажимаете, является сервером во время этой операции.

Когда вы запустите git push, Git по существу работает ssh [email protected] 'git-receive-pack /path/to/repo', то есть он запускает git-receive-pack на сервере. Затем местные git push разговаривают с удаленным git-receive-pack через SSH-соединение.

Вкратце: вам нужно Git на сервере при нажатии SSH. Не обязательно полная установка, но, по крайней мере, исполняемый файл git-receive-pack для нажатия и git-upload-pack для извлечения/вытягивания.

Также можно нажать на удаленный компьютер без Git, установленного там, используя другие протоколы (например, webdav), но я бы не рекомендовал его.

+0

Благодарим вас за ответ. Git-receive-pack создает некоторый сокет, через который он работает с git клиента? –

+0

Не совсем: он общается через stdin/stdout, которые подключены к SSH-соединению. Если ваш вопрос «какие порты я должен открыть на сервере», тогда вам нужно всего лишь SSH. Что касается сети, это просто SSH-соединение. –

+0

Большое спасибо. Вы даже не представляете, как долго я не мог решить этот вопрос. –

0

Git - это распределенное управление версиями. Вам не нужно иметь сервер. Вы и ваш друг можете работать на ваших 2 машинах с git pull и git push без сервера (преимущество распределенного контроля версий).

Вы всегда можете использовать бесплатный сервер (для небольших команд), как https://bitbucket.org/

1

просто чтобы добавить к очень хорошим ответам уже здесь.

понятие «сервер», когда дело доходит до git, сбивает с толку. Нам нравится думать, что есть какой-то центральный момент, где все «живет», в нашей технической жизни мы считаем, что сервер для этого. Мы считаем эту идею удобной (правильно или неправильно)

Будучи распределенной системой, каждая клонированная копия git-ball является технически репозиторием.

Это, как говорится, еще очень хорошая идея иметь некоторую «центральную» точку управления для вашего репозитория.

Bitbucket или github, или даже ваша собственная коробка, сидящая где-то, может выступать в качестве хранилища «мастера».

Профессиональное использование git обычно организовано с помощью «master» repo, на битбакете, которое доступно для записи только pull requests. Члены команды будут разветвлять репозиторий, выполнять свою работу, а затем, после того, как они отправятся в свой собственный репозиторий, выдайте запрос на перенос на репозиторий «master». Затем может состояться просмотр однорангового кода и успешные запросы на загрузку, объединенные в основной репозиторий.

Это способствует много хорошей практике, а также означает, что у вас есть хороший чистый репозиторий, резервное копирование которого осуществляется на каком-то сервисе elses.

Мы (в моей организации), возможно, более 100 проектов работают таким образом, на многих языках и работают очень хорошо.

Есть несколько рабочих процессов, использующих это в качестве основы. Посмотрите here для разумно хорошее описание.

Смежные вопросы