Я клонировал мастер Git и внес много изменений в клон. С тех пор я внес эти изменения в клон и теперь хочу, чтобы мастер был точной копией того, что находится в клоне.
Я пробовал Git push на клоне, чтобы передать изменения мастеру, но ничего, что я делаю, не обновляет мастер.
Как сделать мастер точную копию того, что находится на клоне? Каков командный рабочий процесс обновления клона и синхронизации мастера с клоном?
Есть два вида репозиториев git: голые и не голые. Не чистый репозиторий - это любой репозиторий, у которого есть «рабочая копия», то есть некоторая часть репозитория, которая в настоящее время проверена.
Вы может отправляете в репозиторий non-bare, но он не обновляет извлеченную рабочую копию, даже если извлеченная ветка совпадает с веткой, которую вы отправили. Это связано с тем, что в извлеченной копии могут быть изменения, которые не были зафиксированы, и git никогда не уничтожит изменения без вашего явного запроса (обычно такие команды имеют аргумент --hard)
Прочтите Почему я не вижу изменений в удаленном репо после "git push"? и Как мне использовать "git push" для синхронизации с хоста с брандмауэром? для полного описания проблемы и потенциального решения. Предупреждение: если вы нажали на удаленное репо, любые незавершенные изменения в этом удаленном репо должны быть отменены.
В общем, похоже, что тот подход, который вам нужен, на самом деле не принят gitters, потому что он действительно не соответствует менталитету распределенного репозитория. Вы несете ответственность за то, чтобы ваша копия репо была актуальной.
Git в большей степени построен на вытягивании, чем на выталкивании. Конечно, можно эмулировать централизованную систему с помощью Git, это то, чем мы занимаемся в нашем офисе. Для нас преимущества Git - это простота ветвления, а не децентрализованный характер системы управления версиями.
Если вы создали свой собственный клон, к которому легко получить доступ из мастера, то вы можете легко перенести изменения из клона в мастер. Только:
git pull /path/to/clone
Это перенесет изменения из ГОЛОВКИ клона в ГОЛОВУ мастера.
Другой распространенный случай - это когда клон находится в другой сети или в чем-то, к чему напрямую от мастера нелегко добраться. В этом случае вы можете использовать одно из:
Мне нравятся ответы Гарета и Грега. Я просто добавлю, что мне очень удобно использовать чистый репозиторий для синхронизации работы с другими. Это позволяет любому отправлять / извлекать свои изменения (включая ветки) в чистый репозиторий, а затем другие могут извлекать / извлекать / объединять по своему усмотрению. Это не то же самое, что иметь единый центральный репозиторий, поскольку каждый клон является полноценным репозиторием.
Гарет, спасибо за это объяснение. Является ли каноническим решением необходимость в третьем репозитории, к которому не прикреплено дерево? Разве это не возвращение к концепции svn центрального репозитория?