мерзавец слияния веток в голом хранилище - PullRequest
9 голосов
/ 02 ноября 2011

Я хотел бы создать следующую настройку для моих репозиториев git:

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

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

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

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

Я могуНе могу понять, как объединить ветви в голом хранилище.git-merge и git-checkout, похоже, не работают без рабочего дерева.

Итак, мой вопрос состоит из двух частей:

  1. Существует ли стандартный способ объединения ветвейв голом репо?
  2. Разве это не просто, потому что настройки моих репо плохие?(В каком случае, как бы вы изменили эту архитектуру для передового опыта?)

Ответы [ 3 ]

13 голосов
/ 07 марта 2016

Обратите внимание, что это на самом деле может быть сделано на голом репо, но вы должны работать с обычным интерфейсом.

$ git read-tree -i -m branch1 branch2
$ COMMIT=$(git commit-tree $(git write-tree) -p branch1 -p branch2 < commit message)
$ git update-ref mergedbranch $COMMIT
11 голосов
/ 02 ноября 2011

git checkout проверяет ветку в рабочем дереве - как вы думаете, это должно было работать без рабочего дерева?И git merge, и большинство других команд не работают, потому что в пустом хранилище нет HEAD.

Чтобы ответить на ваш вопрос: вы не работаете в пустом хранилище.Пустой репозиторий предназначен только для хранения данных;если вы хотите работать с ним, используйте клон, который не является голым.

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

2 голосов
/ 14 мая 2012

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

...