Перенос проекта 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 — путь до нового репозитория.
Отправляем файлы в подключенный репозиторий:
Резервное копирование репозиториев с github, gitlab
Резервное копирование репозиториев с git серверов на основе github и gitlab по токену. Скрипт скачивает все Ваши репозитории доступные по токену и архивирует их. Давно хотел написать такой инструмент т.к. использую и те и те сервера в работе и личных целях. У меня полно старых проектов которые хранятся только на git, если с ним что-то случится, то их уже не будет.
Как пользоваться
Написано на python3, необходимая версии >= 3.7, скачиваем с github, устанавливаем зависимости и запускаем:
git clone https://github.com/dvjdjvu/gitReposDownloader cd gitReposDownloader curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg \ && sudo chmod go+r /usr/share/keyrings/githubcli-archive-keyring.gpg \ && echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null \ && sudo apt update \ && sudo apt install gh libomp-dev -y pip3 install -r requirements.txt
./src/main.py -s github.com -t ghp_TOKEN
Для работы с gitlab используется модуль python-gitlab. Взаимодействие с github идет через утилиту gh, которая запомнит токен. Удалить токен из памяти gh:
gh auth logout
В директории запуска скрипта создается архив имя_сервера.tar.gz или скрипт выводит ошибку причины не скачивания репозиториев.
Скачивание распараллелено в multiprocessing.cpu_count() потоков.
Git для начинающих. Урок 2.
Создание и клонирование репозитория
Краткое содержание урока, основные инструкции для командной строки, полезные ссылки и советы.
Что такое репозиторий
Это каталог в файловой системе, где хранится информация о проекте:
- файлы и папки проекта
- история проекта
- настройки проекта
- служебная информация
Информация о репозитории хранится в скрытой папке .git в корне проекта.
Можно ли работать с git локально
Да, можно. Но при этом проект находится только на нашей машине и в случае поломки железа или случайной потери данных мы не сможем восстановить проект.
Локальный репозиторий
Это репозиторий, который хранится на нашей машине, в рабочей папке проекта. Это та самая скрытая папка .git
Удаленный репозиторий, зачем он нужен
Это репозиторий, который хранится в облаке, на сторонних сервисах, специально созданных под работу с проектами git.
Плюсы удаленного репозитория
- выполняет роль резервной копии
- возможность работать в команде
- некоторые дополнительные возможности, которые предоставляет хостинг. Например, визуализация истории или возможность работать над проектом прямо в веб-интерфейсе
Что такое клонирование
Это копирование удаленного репозитория на локальную машину. Обычно это первое действие при работе с проектом. При клонировании на нашу машину копируются файлы и папки проекта и вся его история. То есть мы получаем доступ к истории не с момента начала нашей работы над проектом, а с самого начала проекта.
Как клонировать готовый проект
В первую очередь, нужно получить ссылку на проект. Мы можем найти ее сами или получим готовую, например, на новой работе. Возьмем для примера репозиторий vuejs — https://github.com/vuejs/vue.git
Наберем в командной строке
$ git clone https://github.com/vuejs/vue.git
При этом в текущем каталоге создастся папка vue, в ней окажутся все файлы проекта vue и специальная скрытая папка .git, то есть сам репозиторий, или информация о нем.
Как клонировать проект в другую папку
При клонировании по умолчанию создается папка с таким же названием, как и у репозитория. Но можно склонировать репозиторий и в другую папку вот так
$ git clone https://github.com/vuejs/vue.git vue-new
Где vue-new — нужное название папки.
Свой удаленный репозиторий
Для своих проектов нам понадобится собственный репозиторий. Можно работать и локально, но плюсы удаленного мы уже рассматривали выше. Теперь нужно выбрать хостинг для наших git-проектов.
Где держать репозиторий
Есть множество вариантов, самые известные — это github и bitbucket. Нужно выбирать.
На самом деле не парьтесь. У них схожий функционал, и в начале работы с git мы не заметим разницы. bitbucket мне нравится больше из-за интерфейса, но в уроках выберем github из-за его большей популярности.
Чтобы продолжить уроки, нужно зарегистрироваться на github. Если у вас нет там аккаунта, то форму регистрации увидите сразу на главной странице — https://github.com/
Как создать репозиторий в github
После регистрации создание репозитория доступно с главной страницы github. При создании нужно указать название проекта и тип (публичный или приватный). На остальное пока не обращаем внимания.
Права на репозиторий, публичные и приватные
Есть 2 типа репозиториев:
- публичный (public), открыт всем
- приватный (private), доступен только определенному кругу лиц — в первую очередь, нам самим
Публичные репозитории хороши для opensource-проектов и чтобы показать в резюме. Пока нам это не нужно.
Для себя будем создавать приватные репозитории. Для этого нам понадобятся ssh-ключи.
Что такое ssh-ключи
ssh-ключи используются для идентификации клиента на сервере при подключении по безопасному ssh-протоколу. Другими словами, ssh-ключ нужен для того, чтобы пускать на сервер только определенных клиентов. Только тех, кому разрешен доступ к проекту.
ssh-ключ не имеет прямого отношения к git, но так репозитории находятся на удаленных серверах, то ssh-ключи используются для разграничения доступа к приватным репозиториям.
ssh-ключ состоит из пары ключей: публичного и приватного ключа. Это просто 2 текстовых файла:
- /домашний-каталог/.ssh/id_rsa.pub — публичный
- /домашний-каталог/.ssh/id_rsa — приватный
Публичный ключ передается сторонним серверам, например, github, для открытия доступа на эти сервера. Приватный ключ хранится только на нашей машине и никому не передается. То есть когда у нас просят ssh-ключ, чтобы дать доступ на какой-нибудь сервер, мы отдаем именно публичный ключ, id_rsa.pub
Как сгенерировать ssh-ключ
ssh-ключи сами собой не появляются, но стоит проверить, возможно, они были установлены раньше. Запустим в терминале команды
$ cd ~/.ssh $ ls -l
Если видим файлы id_rsa и id_rsa.pub — отлично, ключи уже есть.
Если этих файлов нет, то нужно сгенерировать ключи утилитой ssh-keygen. В Windows она устанавливается вместе с git, в Linux и MacOS при необходимости установите. В Linux, например, вот так
$ sudo apt install ssh-keygen
После этого нужно сгенерировать пару ключей, запустив команду в терминале
$ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
$ ls -l total 24 -rw------- 1 sn8 sn8 1675 Feb 11 2017 id_rsa -rw-r--r-- 1 sn8 sn8 392 Feb 11 2017 id_rsa.pub -rw-r--r-- 1 sn8 sn8 5746 Oct 28 21:52 known_hosts
Появились файлы id_rsa и id_rsa.pub — значит, ключи успешно сгенерированы.
known_hosts — это файл, в котором ssh прописывает сервера, на которые мы заходим. При первом подключении к github нужно будет разрешить доступ к github.com (напечатать yes в терминале)
Как добавить ssh-ключ в настройках github
Открываем публичный ключ id_rsa.pub и копируем его содержимое. В настройках github ищем раздел «SSH и GPG keys» — https://github.com/settings/keys. Жмем «New SSH key», задаем название ключа, например, имя, и вставляем форму публичный ключ, прямо текстом. Все, теперь у нас есть доступ к нашим приватным репозиториям.
Два способа создания проекта
Первый, когда мы начинаем новый проект. Удобнее будет создать репозиторий на github и склонировать пустой проект на локальную машину.
Второй, когда у нас уже есть проект. Нужно зайти в папку проекта и связать его с уже существующим репозиторием на github. Это называется инициализация.
Рассмотрим оба способа.
Пустой проект
Создаем приватный репозиторий на github, назовем его first-site. Я зарегистрировался под именем Webdevkin, моя ссылка для клонирования будет такая — git@github.com:Webdevkin/first-site.git. Ваша зависит от имени пользователя.
Идем в командную строку и запускаем
$ git clone git@github.com:Webdevkin/first-site.git
В текущей папке получим новую папку с названием first-site — это и есть наш проект.
P.S. У вас склонировать этот репозиторий не получится — он закрытый. Создайте свой 🙂
Непустой проект
Допустим, у нас на локальной машине уже есть проект second-site. Создаем в github репозиторий second-site. Заходим в папку проекта и выполняем команды
$ git init $ git add . $ git commit -m "Initial commit" $ git remote add origin git@github.com:Webdevkin/second-site.git $ git push -u origin master
Все, можно приступать к работе над проектом. Команды add, commit и push мы разберем в следующих уроках.
Это единственный урок, в котором мы разбирались с тонкостями репозиториев. В дальнейшем будем считать, что репозиторий = проект.
Что могу посоветовать
- github или bitbucket? Для личных проектов неважно, оба сервиса разрешают бесплатно создавать приватные репозитории. Для open source или резюме — github
- не увлекайтесь клонированием в папку со своим названием. Есть шанс запутаться, самому или коллегам
- не путайте публичный и приватный ключи. Отдаем вовне только публичный ключ id_rsa.pub
- при смене рабочей машины можно не генерировать ssh-ключи заново, а скопировать их со старой машины. Тогда не придется заново прописывать новые ключи на серверах
Немного подробнее о копировании ssh-ключей
Как скопировать ssh-ключи с одной машины на другую
Хочу немного затронуть эту тему отдельно. Генерировать ключ на новой машине не обязательно. Но нужно выполнить такие действия
- Скопировать id_rsa и id_rsa.pub со старой машины на новую
- Посмотреть права на файлы, возможно, ключи окажутся слишком «открытыми» для записи и потребуется сменить им права доступа — sudo chmod 700 ~/.ssh/*
- Выполнить команду ssh-add
Ссылки, которые могут пригодиться
- github — https://github.com/
- bitbucket — https://bitbucket.org/
- подробнее об ssh-ключах (en) — connecting-to-github-with-ssh
На этом все. В следующем уроке мы сделаем первые изменения в проекте и начнем понимать, в чем заключается прелесть git.
Спасибо за внимание и до встречи!
Все уроки курса
- Вводный урок
- 1. Установка и базовая настройка git
- 2. Создание и клонирование репозитория git
- 3. Делаем первые изменения, git status и git diff
- 4. Коммиты и история коммитов, git commit, git log и git show
- 5. Подробнее об истории коммитов. Путешествие по истории
- 6. Работа с сервером, git push и git pull
- 7. Ветки — главная фишка git, git branch и git checkout
- 8. Работа с ветками на сервере, git fetch
- 9. Слияния или мерджи веток, git merge
- 10. Конфликты и их разрешение
- Платная часть курса. Презентация
- * 11. Работа с gitignore и git exclude
- * 12. Буфер обмена git, git stash
- * 13. Копирование коммитов, git cherry-pick
- * 14. Отмена и редактирование последнего коммита
- * 15. Отмена произвольного коммита, git revert
- 16. Склеивание коммитов, git rebase —interactive и git reflog
- * 17. Зачем склеивать коммиты. Плюсы и минусы сквоша
- * 18. Работа с git rebase. Отличия от merge
- * 19. Что такое git push —force и как с ним работать
- * 20. Ищем баги с помощью git, git bisect
- * 21. Как и зачем работать с тегами git
- * 22. Процессы: github flow и git flow
- * 23. Псевдонимы в git
- 24. Мердж-реквесты
- * 25. Форки
Работа с Git на хостинге
Git — система контроля версий, которая позволяет хранить и отслеживать внесенные в файлы изменения. С Git над одним проектом могут работать несколько разработчиков.
Для создания проекта (например, сайта) с использованием Git вам понадобится:
- Локальный репозиторий — хранилище Git на локальном компьютере. Сначала вы работаете над проектом на своем рабочем компьютере и сохраняете изменения в локальный репозиторий с помощью коммита (commit). Затем помещаете (push) изменения в удаленный репозиторий. Если над проектом работают несколько разработчиков, у каждого свой локальный репозиторий.
- Удаленный репозиторий — система управления репозиториями кода для Git. Например: GitHub, GitLab, Bitbucket. После завершения локальной работы над кодом каждый разработчик проекта отправляет свою часть кода или изменения в удаленный репозиторий, где всё сливается (merge) воедино, а затем разворачивается (deploy) на сервер проекта.
- Сервер проекта — это виртуальный хостинг, VPS или любой другой сервер. Развернуть свой проект можно несколькими способами. Существуют системы автоматического развёртывания из удаленного репозитория, а также ручное клонирование с помощью Git.
На хостинге Рег.ру установлен Git, благодаря чему вы сможете упростить процесс разработки и публикации сайта. Обратите внимание: на хостинге Рег.ру по умолчанию используется Git версии 1.7.1. Для запуска версии 2.19.2 используйте алиас git2192.
Ниже рассмотрим, как поместить код в удалённый репозиторий на примере GitHub и как клонировать файлы на услугу хостинга.
Подготовка к работе
- Для работы вам необходимо скачать Git с официального сайта и установить на свой локальный компьютер. Для пользователей Linux Git, как правило, доступен из коробки. Для пользователей Windows рекомендуем использовать графические оболочки, например SmartGit или GitKraken.
- Работа с Git происходит через терминал. Если у вас нет локального репозитория, создайте его в каталоге проекта с помощью команды git init
- Файлы, которые необходимо отправить в удалённый репозиторий, добавьте с помощью команды git add каталог/название_файла или же выполните команду git add . , чтобы добавить все папки и файлы, которые находятся в каталоге вашего проекта.
- Создайте коммит с помощью команды
git commit -m "any comment"
Готово, вы создали репозиторий, добавили туда файлы проекта и сделали свой первый коммит. Подробнее о работе с Git, создании веток, слиянии, откате изменений и прочих командах вы можете узнать в официальной документации.
Отправка изменений в удаленный репозиторий
Все команды будут выстроены на примере работы с GitHub. Работа с другими хранилищами репозитория происходит по аналогии.
На сайте GitHub создайте репозиторий. После этого вы получите ссылку на ваш репозиторий, например: https://github.com/userName/regru-hosting.git
На локальном компьютере, в терминале, добавьте ссылку удалённого репозитория с помощью команды:
git remote add origin https://github.com/userName/regru-hosting.git
Затем отправьте изменения в удаленный репозиторий с помощью команды:
git push origin master
Система запросит ваш логин и пароль от GitHub.
Готово, после завершения отправки ваши файлы появятся в удалённом репозитории на GitHub.
Публикация сайта с GitHub на хостинг
Чтобы клонировать изменения с GitHub на хостинг Рег.ру:
Выполните команду:
git clone https://github.com/mrradu/regru-hosting.git.
Важно: в конце команды должна стоять точка. Это нужно для копирования самих файлов из репозитория в корневой каталог. Иначе в корневой каталог будет загружен каталог репозитория, а уже затем в него сами файлы.
В дальнейшем вместо команды из 3 шага вы можете выполнить команду git pull , которая будет синхронизировать файлы на хостинге с файлами из репозитория.
Готово, теперь вы можете работать над проектом локально, сохранять свои изменения в удалённом репозитории, а затем публиковать их на хостинг.
Создание открытого SSH-ключа
Проверьте, есть ли SSH-ключи на вашем хостинге. Для этого:
Перейдите в каталог, в котором они хранятся:
cd ~/.ssh