Рабочий процесс Git: без сервера

git должен быть децентрализованной системой, но все учебники и лучшие рабочие процессы, которые я нашел в google, предлагают использовать сервер (обычно github, или настроить свой собственный)

Я использую Git для небольших личных проектов (2-3 человека), где я могу найти рекомендуемый рабочий процесс для синхронизации изменений непосредственно между машинами членов команды. В качестве альтернативы, каковы некоторые убедительные аргументы, почему я должен избегать этого и вместо этого настроить "центральный" сервер?

спасибо,
Бен!--1-->

7 ответов


зависит от того, что вы подразумеваете под "сервер". Git будет работать без центрального сервера, хотя многие команды считают удобным иметь центральный репозиторий.

Если под " сервером "вы подразумеваете" установить серверное программное обеспечение", git также будет работать (центральный репозиторий или нет) без специального программного обеспечения, через ssh или в файловой системе.

посмотреть этот документ для возможных рабочих процессов

рабочий процесс с общим репозиторием

рабочего процесса многие используют то, что все разработчики "толкают" (отправляют) свои изменения в общий репозиторий и получают все изменения из этого репозитория. Что-то вроде этого:--1-->

  • разработчик a толкает к центральному
  • разработчик B нажимает на центральный
  • разработчик C тянет (получение изменений от A и B)
  • разработчик a тянет (получение изменений от B)
  • ...

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

рабочий процесс с электронной почтой

вы также можете использовать git без сервера, просто используя электронную почту. В этом случае поток будет таким:

  • разработчик a отправляет изменения по электронной почте команде
  • другие разработчики применяют изменения из писем

Это можно сделать даже полуавтоматическим способом

рабочий процесс без центрального сервера

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

  • разработчик A вносит изменения
  • разработчик B вносит изменения
  • разработчик C извлекает изменения из A
  • разработчик C вытягивает изменения из B
  • разработчик B тянет изменения из
  • ...
  • никто и никогда не должен толкать

IMHO этот тип рабочего процесса быстро приведет к путанице и сбою.


что вам нужно сделать сначала, это подумать, какой рабочий процесс у вас уже есть и настроить git для работы с этим. Как только у вас что-то работает, вы можете настроить его. Нет необходимости настраивать отдельный компьютер в качестве сервера. Если вы привыкли иметь центральный репозиторий, все, что вам нужно сделать, это создать голый репозиторий, к которому все подталкивают. Почему не в локальной сети?

Центральный РЕПО:

mkdir foo.git
cd foo.git
git init --bare

ваш РЕПО:

mkdir foo
cd foo
git init
// add files
git add .
git commit -m "Initial commit"
git remote add origin //path/to/central/repo/foo.git
git push origin master

другие РЕПО:

git clone //path/to/central/repo/foo.git

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


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

в качестве конкретного примера рассмотрим Linux и Linus Торвальдс - нет центрального репозитория, к которому все подталкивают, но Линус поддерживает репозиторий, который содержит весь код, который он считает "готовым" (и так делают несколько других людей, для разных определений "готов"). Таким образом, у вас есть каноническое определение того, что такое код, и место для определения ваших выпусков.


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


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

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

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

Это для меня главная причина иметь центральный сервер, и на самом деле это не ошибка с Git, а скорее следствие работы с ноутбуками.


посмотреть Git для начинающих: полное практическое руководство

раздел " как настроить общий репозиторий команды?"


Git работает довольно хорошо с такой настройкой, хотя вы захотите избежать нажатия изменений в чужой проверенной ветке ( https://git.wiki.kernel.org/index.php/GitFaq#Why_won.27t_I_see_changes_in_the_remote_repo_after_.22git_push.22.3F ). У вас может быть ветвь интеграции, в которую вы нажимаете код и объединяете изменения других людей.

Я думаю, что основная причина, по которой используется центральное РЕПО, заключается в том, что его можно принять за каноническую базу для всего вашего кода, в то время как может быть немного сложнее рассуждать о том, что вы должны сливаться, когда у вас есть 3 или более ветвей разработки.