Настройка Git репозитория для разработки с двух машин? - PullRequest
5 голосов
/ 30 января 2010

Я только начал использовать 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) работает нормально и предупреждает меня, если что-то не синхронизировано, перед слиянием.

Ответы [ 2 ]

4 голосов
/ 30 января 2010

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

Если вы хотите продолжать вносить изменения, которые не сохраняются на вашем сервере, а просто хранятся на вашем ноутбуке, вам нужно git fetch, а затем git rebase origin/master. Выборка загрузит коммиты с сервера, но не изменит ваши локальные ветви, а rebase восстановит изменения основной ветви вашего ноутбука поверх основной ветви сервера (origin / master).

Вероятно, было бы лучше, чтобы эти коммиты не болтались. Разве они не могут быть интегрированы во всю кодовую базу, чтобы иметь только одну общую историю?

1 голос
/ 30 января 2010

Я собирался предложить использовать флаг --ff, но на странице руководства сказано, что это поведение по умолчанию. Вы можете попробовать git pull --ff и посмотреть, будет ли это иметь значение.

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

Ваш ноутбук настроен как зеркало сервера, как ваш рабочий стол?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...