Перенос проекта GIT на другой сервер
Опубликовано: 27.05.2023
В данной инструкции мы рассмотрим несколько примеров, как можно выполнить перенос со всеми настройками git-проекта в другой git-репозиторий. Предполагается, что у нас уже подготовлен новый репозиторий, куда нужно отправить проект, а также у нас есть представление о работе с командой git. В конце инструкции приведены соответствующие ссылки.
Полный перенос проекта
Сначала рассмотрим вариант переноса проекта как есть — со всеми настройками, ветками, коммитами, тегами и так далее. Для этого на свой рабочий компьютер открываем командную строку и клонируем проект с опцией mirror:
git clone —mirror https://gitlab.dmosk.ru/master/test.git test
* данной командой мы склонируем проект по пути https://gitlab.dmosk.ru/master/test.git и сохраним его в текущем каталоге, папке test.
Перейдем в созданную папку:
На данном этапе у нас есть полная копия проекта, но она привязана к текущему репозиторию. Это можно посмотреть командой:
git remote show origin
Мы увидим что-то на подобие:
* remote origin
Fetch URL: https://gitlab.dmosk.ru/master/test.git
Push URL: https://gitlab.dmosk.ru/master/test.git
Отвязываем его командой:
git remote rm origin
Создаем пустой проект в новом репозитории. Смотрим ссылку на него и делаем привязку с нашим локальным проектом, например:
git remote add origin https://gitlab.com/dmosk.ru/test.git
* где https://gitlab.com/dmosk.ru/test.git — путь до нового репозитория.
Отправляем файлы в подключенный репозиторий:
git push origin —all
Выборочный перенос
Предположим, нам нужно перенести не все ветки. Это тоже можно сделать.
Начинаем с клонирования проекта на локальный компьютер:
git clone https://gitlab.dmosk.ru/master/test.git test
* данной командой мы склонируем проект по пути https://gitlab.dmosk.ru/master/test.git и сохраним его в текущем каталоге, папке test.
Перейдем в созданную папку:
Смотрим список всех веток командой:
Мы должны увидеть одну основную ветку, как закаченную, остальные с префиксом remotes/origin/.
Переключаемся на те ветки, которые нам нужно перенести в новый репозиторий, например:
git checkout branch1
git checkout branch2
Можно еще раз посмотреть на список веток:
Мы должны увидеть, что загруженные ветки стали без префикса remotes/origin/.
И так, у нас есть копия проекта с нужными нам ветками, и она привязана к текущему репозиторию. Проверим:
git remote show origin
Мы увидим что-то на подобие:
* remote origin
Fetch URL: https://gitlab.dmosk.ru/master/test.git
Push URL: https://gitlab.dmosk.ru/master/test.git
Отвязываем его командой:
git remote rm origin
Создаем пустой проект в новом репозитории. Смотрим ссылку на него и делаем привязку с нашим локальным проектом, например:
git remote add origin https://gitlab.com/dmosk.ru/test.git
* где https://gitlab.com/dmosk.ru/test.git — путь до нового репозитория.
Отправляем файлы в подключенный репозиторий:
AgiosAndreas / repo-full-copy.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters
# Клонируем исходный репозиторий без рабочего каталога (—bare) |
git clone —bare https://github.com/exampleuser/old-repository.git |
cd old-repository.git |
# Делаем mirror-push(будут скопированы все ветки и тэги) в новый репозиторий |
git push —mirror https://github.com/exampleuser/new-repository.git |
cd .. |
# Удаляем папку с репозиторием |
rm -rf old-repository.git |
Как перенести коммиты из одного репозитория Git в другой?
Есть два репозитория. Из первого репозитория импортированы данные в другой репозиторий. В другом были сделаны изменения. Далее в первом другие изменения, и нужно как-то перенести их во второй. Если это возможно, то как?
Лучший ответ
Делаешь git clone первого, открываешь .git/config, меняешь там в [remote «origin»] параметр url на url второго репозитория (я использую http-доступ), делаешь git push. Если изменения были в обоих, сперва делай git pull и разрешай конфликты, а уже потом push.
Остальные ответы
Как обычно: добавляешь удаленный репозиторий, и merge с любой его веткой. Типа
git remote add первый …
git fetch первый
git merge первый/master
В чем именно сложность? В политиках merge? Так они в справке расписаны.
Перенос git репозитория
Небольшой набор команд для переноса одного git репозитория в другой. Я, например, пользовался при переносе из Github в Gitlab.
git clone --bare git@git.test.com:my-repo-a.git cd my-repo-a.git git fetch origin git remote add new-origin git@git.test.com:my-repo-b.git git push --mirror new-origin git remote rm origin git remote rename new-origin origin
Давай разберем команды:
git clone —bare — клонируем не сам репозиторий, а директорию .git
git fetch origin — убеждаемся, что у нас все изменения присутствуют
git remote add — добавляем новый remote репозиторий
git push —mirror new-origin — загружаем весь наш репозиторий в новый. mirror передает все refs — тэги, бранчи
git remote rm — удаляем старый origin локально
git remote rename — переименовываем new-origin в origin, чтобы было проще работать