LINUX.ORG.RU

Использование git на нескольких равноправных компьютерах

 ,


2

2

Есть несколько компьютеров (допустим, в локальной сети). Например ноутбук и десктоп. Есть репозиторий git, с которым хочется работать на каждом из них. То есть репозиторий не должен быть bare, и в любой момент в working tree могут быть какие-то изменения, как подготовленные к коммиту (staged), так и нет. Надо, чтобы с любого компа на любой можно было делать push и pull/fetch.

Хорошо бы, чтобы результат работы push с первого компа на второй был бы таким же, как результат fetch, выполненного со второго компьютера.

Видел такую статью, где предлагается сделать специальную ветку типа laptop-master, но при таком походе, как я понимаю, условие «хорошо бы» не выполняется (потому что в одном случае получим обновления в ветке laptop/master, а в другом в laptop-master). Появилась идея: делать push в remote-ветку, типа laptop/master, в ту же самую, в которую делался бы fetch, но не понял, можно ли так сделать.

В общем, помогите понять, как все это правильно настроить.

★★★★★

Для локальной сети хорошо подходит Gitolite. Установка проще простого. В результате у тебя будет специальный юзер на десктопе, git, который будет хостить твои репы.

rupert ★★★★★
()
Ответ на: комментарий от Lrrr

Такой подход не даст возможность на разных компах одновременно работать над разными ветками. Если 2 компа в локальной сети, это не значит, что с ними попеременно работает один пользователь.

В целом хочется найти именно децентрализованное решение, основанное на стандартных командах git: push, fetch. А то интересно получается: вроде git децентрализован, но как работать, так сразу центральный сервер нужен.

Klymedy ★★★★★
() автор топика

Я бы посмотрел на хуки после приёма данных. Чтобы работало на текущей ветке, может понадобиться слать на inbox/branchname, а потом в хуке уже применять изменения к branchname.

xaizek ★★★★★
()

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

Иметь рабочие копии репозиториев на каждом компе, а также bare repo где угодно в локалке, через который push/fetch на который происходит синхронизация разработки, и не городить огород?

То есть репозиторий не должен быть bare

Нет, должен быть: не надо смешивать разработку и дистрибуцию исходников

и в любой момент в working tree могут быть какие-то изменения, как подготовленные к коммиту (staged), так и нет

Ну и прекрасно

Crocodoom ★★★★★
()
Ответ на: комментарий от Klymedy

В целом хочется найти именно децентрализованное решение, основанное на стандартных командах git: push, fetch. А то интересно получается: вроде git децентрализован, но как работать, так сразу центральный сервер нужен

Не обязательно. Но тебе в любом случае лучше завести единый общий origin для всех твоих ПК в локалке. А вот как это будет устроено физически и где origin реально будет хостится - зависит уже от конкретного случая

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

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

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Klymedy

Эта проблема актуальна, если компов (центров разработки) больше двух. У тебя сколько?

Есть несколько компьютеров (допустим, в локальной сети). Например ноутбук и десктоп.

Для ноутбука & десктопа можно обойтись origin-ом на десктопе

Crocodoom ★★★★★
()
Последнее исправление: Crocodoom (всего исправлений: 1)

Попробовал сделать тестовый репозиторий, внести какие-то изменения на втором компе, а потом сделать оттуда push в ветку laptop/master, и еще вдобавок fetch. Получил вот это:

* 5472350 (laptop/master, laptop/master) second change
| * d8090bc (HEAD -> master) first change
|/  
* d6aaa2f initial commit

в одном случае laptop/master красного цвета, как remote-ветка, в другом зеленого, как обычная. Можно ли как-то их отождествить, а лучше сразу делать push в remote-ветки на других компах?

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Crocodoom

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

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Klymedy

Вроде бы примерно разобрался. Главное не пушить те ветки, для которых на том компе нет remote-версии. То есть сначала делать на ноутбуке делать git fetch desktop, а потом на десктопе git push laptop master:desktop/master. Как-то так получается. Ну и если та ветка не активна, то можно сразу в нее пушить.

Klymedy ★★★★★
() автор топика
Ответ на: комментарий от Klymedy

Сейчас пока два, но хочется чтобы могло быть и больше, где-то в пределах 5

В таком случае можно делать пуш на все компы сети, которые онлайн. Fetch делаем аналогично со всех доступных компов. Алиасом, естественно

Если где-то разошлась история, оно ругнётся и ударит по рукам - и хорошо; но если у тебя нет диссоциативного расстройства личности или маховика времени, и разработка на 5 устройствах согласована - то это будет корректный способ раскатать изменения по локалке без привлечения лишних сущностей.

Crocodoom ★★★★★
()
Ответ на: комментарий от Crocodoom

Хотя, имея локалку на 5 полноценных компов для разработки, я бы не поскупился на нормальный NAS или хотя бы нормальный роутер с шареным USB HDD. Ибо у локалки всё равно есть сетевой центр , которому доверяют все клиенты - децентрализация тут имеет мало смысла

Crocodoom ★★★★★
()
Ответ на: комментарий от Klymedy

Когда-то, давным-давно, у меня были два ремоута друг на друга, в которые делались commit и push. Но работал я либо с одной машины, либо с другой. локалка без внешней сети, деревянные игрушки.

А вот так чтобы прям работать одновременно на двух компах и оно друг с другом не конфиликтовало… Можно наверное, но надо аккуратно синкаться и желательно одни и тебе куски кода не трогать.

Но да, лучше иметь третье место через которое синкаться.

Dark_SavanT ★★★★★
()
Последнее исправление: Dark_SavanT (всего исправлений: 1)

Fossil может синхронизировать такое, там как то можно указать список репозиториев куда синхронизировать. Ну я бы сделал файлик на bash , его запускаешь и он синхронизирует со всеми репозиториями. Сам например лежит тоже в репозитории, чтобы добавить какой то нужно его модифицировать.

zerhud
()

Появилась идея: делать push в remote-ветку, типа laptop/master, в ту же самую, в которую делался бы fetch, но не понял, можно ли так сделать.

Зачем тебе вообще делать push в этой схеме? Всё что нужно для децентрализованной работы - настроить remote на каждой машине по числу остальных машин и делать с них pull/fetch/merge по необходимости.

slovazap ★★★★★
()