Я только начал использовать git, и меня впечатлили отличия рабочего процесса от SVN, но я столкнулся с одним вопросом о структуре / настройке, который, как представляется, в документации не объясняет, как настроить интуитивно, и я 'Мне интересно, если это вообще возможно.
Моя установка состоит в том, что у меня есть несколько компьютеров, с которых я занимаюсь разработкой (настольный компьютер и ноутбук), поэтому, чтобы упростить синхронизацию и обеспечить резервное копирование для репозитория git, я установил «публичный» пустой репозиторий намой домашний сервер Linux, в который я могу подключиться как с настольного компьютера, так и с ноутбука.Это на самом деле не общедоступно, поскольку для доступа к нему требуется SSH-доступ к блоку.
Моя проблема возникает, когда я делаю изменения на своем рабочем столе, я могу легко перенести изменения в репозиторий сервера (у меня есть mirror
установлен флаг для origin
удаленного в этом хранилище), и используя gitx
, я вижу, что локальное и удаленное состояния выглядят одинаково, и каждый из моих отдельных коммитов был зарегистрирован на сервере.
Вопрос в том, когда я переключаюсь на свой ноутбук, которым я пользуюсь довольно редко, git-репозиторий, вероятно, имеет несколько коммитов за серверной версией и нуждается в обновлении.Я начал использовать git pull
, чтобы получить эти изменения локально, но вместо того, чтобы дублировать все отдельные коммиты на сервере в локальный репозиторий, он добавляет один новый коммит 'merge' в локальный репозиторий, а gitx
показывает слияние в удаленномветка репозитория в этой точке.
Существует ли команда / рабочий процесс, который позволил бы мне обновить локальный репозиторий до точного состояния удаленного репозитория (например, если я сделаю git push --mirror
, данные не будут потеряны)?Должен ли я каждый раз удалять свой локальный репозиторий и git clone
снова каждый раз?
В настоящее время никому больше не понадобится доступ к этому репозиторию, хотя в будущем он может стать общедоступным репозиторием для извлеченияот, так что ответы, которые не разрушают эту возможность, были бы оценены.
Редактировать: Мои коммиты включают в себя перебазирование веток с главной ветки;это может быть то, что вызывает команду git pull
, чтобы показать как слияние?Является ли флаг --rebase
тем, что мне нужно?
Решение Объяснение: Оказывается, я сделал следующее для настройки своих репозиториев:
- Использованиеноутбук для инициализации git-репозитория
- Передать репозиторий ноутбука на сервер (совершить A )
- Внести изменения и зафиксировать их на ноутбуке (ноутбукпри фиксации B )
- Настольный сервер клонирует репозиторий (commit A )
- Вносит изменения на рабочий стол и фиксирует (commit C * 1048)*, D , E , включая перебазирование ветвей)
- Рабочий стол переносится на сервер (сервер переходит к E )
- Когда ноутбук извлекает данные с сервера, это приводит к слиянию (поскольку B не может перемотать назад к E ).
- Ноутбук объединяется и передает изменения на сервер
- Рабочий стол теперь также должен объединяться.
Из-за этого дополнительного коммита, который был непреднамеренной ошибкой новичка, я подумал, что этовсегда будет слияние.По предложению Xentac я вернулся и обнаружил на ноутбуке, что сделал слияние, которое не было отправлено на сервер, что было причиной, и как только я получил все три по-настоящему синхронно, git pull --ff
(принудительноforward merge) работает нормально и предупреждает меня, если что-то не синхронизировано, перед слиянием.