Не удается выполнить переход из одного простого репозитория git в другой

#git

#git

Вопрос:

Вот моя настройка:

У меня есть «главный» репозиторий git с размещенным сервисом. Весь код должен заканчиваться здесь. Назовите это «master».

Из-за разрешений (желающих ограничить количество SSH-ключей, используемых для размещенной службы) и из-за того, что я изначально начал кодировать, указывая на другой репозиторий, у меня есть пустой репозиторий на VPS. Назовите это ‘VPS’.

Я работаю локально над разработкой, подключаюсь к VPS, периодически захожу на VPS и подключаюсь к master.

Проблема, с которой я столкнулся, заключается в том, что я развернул свой веб-сайт путем клонирования из master. Я внес некоторые изменения и вернул их в master. Итак, теперь мне нужно выполнить git pull на VPS, чтобы он получил последний код от master. К сожалению, когда я пытаюсь это сделать, git сообщает мне, что я не могу этого сделать с пустым репозиторием. Чтобы усложнить ситуацию, я этого не осознавал, поэтому я перенес некоторый новый код из development на VPS, поэтому VPS частично пропускает некоторые коммиты в журнале (т. Е. Не самые последние коммиты, сделанные во всем коде).

Как я могу это исправить, и что было бы хорошим способом настройки, чтобы я мог нажимать и извлекать из VPS?

Спасибо

— редактировать —

Хорошо, итак, мне нужно иметь возможность объединить последние 3 коммита с VPS в новый клон master. Как я могу это сделать и как мне следует настроить репозитории в git?

Комментарии:

1. Извлеките данные как из master, так и из VPS в развернутом репозитории веб-сайта и объедините их там, затем нажмите на master / VPS.

2. @Artefact2 — развернутый сайт имеет доступ только к master, к сожалению, не к VPS.

Ответ №1:

git pull эквивалентно git fetch git merge .

Очевидно, что для слияния требуется рабочая копия (чтобы иметь возможность разрешать конфликты, если таковые имеются).

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

Комментарии:

1. Хм… git fetch Сработало на VPS, но мне нужно каким-то образом объединить изменения, которые я отправил непосредственно в master, поскольку они не были внесены, потому что с тех пор я перешел на VPS. Я клонировал master где-то в другом месте. Могу ли я перенести последние 3 коммита на VPS в это новое репозиторий? Это то, что мне нужно сделать…

Ответ №2:

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

Вы могли бы сделать это на своей локальной машине разработки. Создайте оба пульта управления master и VPS, извлекайте данные из обоих и объедините их оба в вашей локальной ветке development master. Затем перенесите эту ветку на VPS, затем перенесите ее с VPS на master. Оба этих перехода должны выполняться с ускорением и работать (при условии, что за это время никто не внес никаких изменений в VPS или master, в этом случае снова произойдет слияние).

Другой альтернативой является преобразование VPS из простого в обычный и выполнение слияния там. Вы можете сделать это, воссоздав VPS (клонирование с master без переключателя —bare). Если вы создадите его заново в том же месте, удаленные настройки для локальной разработки по-прежнему будут указывать на это.

Комментарии:

1. Я вроде бы сделал это вторым способом, но это не совсем сработало, поэтому в итоге я использовал git diff и patch. Не идеально, поскольку я потерял некоторые метаданные, но не конец света. Спасибо.

Ответ №3:

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

Комментарии:

1. Я не знал о возможности извлекать / нажимать из обоих. Итак, я клонировал из proxy.git голое репозиторий, cd в не голый клон, извлекал из master.git голое репозиторий (при извлечении также выполнялось слияние), затем нажимал на proxy.git. Наконец, я зашел на cd в proxy.git и нажал на master.git. <теперь два простых репозитория синхронизированы>. Затем я протестировал путем клонирования как из master.git, так и из proxy.git. Проводилось сравнение каталогов по содержимому с использованием kompare , и содержимое было идентичным. —> похоже, установить два пульта было бы намного проще?