Перенос файлов сайта с VPS (сервера) на локальный компьютер с помощью Git
Описанный в данной статье вариант предполагает, что вы правите сайт в основном на удаленном сервере, а на локальном компьютере выполняете пулы (загрузку изменений с веб-сервера). Обратный вариант (правка на локальном, пуши на сервер), описан в предыдущей статье. Если вам нужно организовать двусторонний поток, потребуется больше знаний о Git и более сложная схема работы.
Если разработка сайта была начата на удаленном сервере, там был инициирован git-репозиторий, то проще всего его загрузить на локальный компьютер с помощью команды git clone
. В дальнейшем, при создании коммитов на VPS, их можно "дозагружать" в локальную версию проекта с помощью пулов.
pl@home:~$ git clone ssh://tech@pas1.ru/home/tech/test-with-git Клонирование в «test-with-git»... remote: Enumerating objects: 10, done. remote: Counting objects: 100% (10/10), done. remote: Compressing objects: 100% (7/7), done. remote: Total 10 (delta 2), reused 0 (delta 0), pack-reused 0 Получение объектов: 100% (10/10), готово. Определение изменений: 100% (2/2), готово. pl@home:~$ cd test-with-git/ pl@home:~/test-with-git$ ls file1.txt file2.txt file3.txt file4.txt pl@home:~/test-with-git$ git status Текущая ветка: master Эта ветка соответствует «origin/master». нечего коммитить, нет изменений в рабочем каталоге pl@home:~/test-with-git$ git log --oneline f8ee49a (HEAD -> master, origin/master, origin/HEAD) 4 server 52052bc 3 server b0c5b96 2 server d9481d8 1 server pl@home:~$ git remote -v origin ssh://tech@pas1.ru/home/tech/test-with-git (fetch) origin ssh://tech@pas1.ru/home/tech/test-with-git (push)
Если же разработка была начата на локальном компьютере, затем было решено ее вести на VPS, то может быть проще перенести туда git-репозиторий копированием (например, с помощью утилиты scp). После этого установить связь между локальным и удаленным репозиторием. Далее уже выполнять обычные пулы.
$ scp -r test-project2 tech@pas1.ru:/home/tech/
Если копируется архив, не забудьте добавить в него скрытые каталоги и файлы. При копировании сайта в каталог /var/www/ скорее всего это надо будет делать через root (root@site.com:/var/www/) и уже на сервере менять владельца каталога сайта.
Устанавливаем связь локального репозитория с только что скопированным удаленным:
pl@home:~$ cd test-project2 pl@home:~/test-project2$ git remote add live ssh://tech@pas1.ru/home/tech/test-project2 pl@home:~/test-project2$ git remote -v live ssh://tech@pas1.ru/home/tech/test-project2 (fetch) live ssh://tech@pas1.ru/home/tech/test-project2 (push)
Теперь представим, что мы внесли изменения в проекте на сервере и выполнили там коммит:
tech@server:~/test-project2$ vim server-file.txt tech@server:~/test-project2$ touch NEW_FILE.html tech@server:~/test-project2$ git add . tech@server:~/test-project2$ git commit -m "Отредактирован server-file.txt, создан NEW_FILE.html" [master 99a99ef] Отредактирован server-file.txt, создан NEW_FILE.html 2 files changed, 1 insertion(+) create mode 100644 NEW_FILE.html
Для загрузки коммитов на локальный компьютер используется команда git pull
:
pl@home:~/test-project2$ ls docs only_my_notes.txt program.py readme.md server-file.txt text.txt pl@home:~/test-project2$ cat server-file.txt pl@home:~/test-project2$ git pull live master Из ssh://pas1.ru/home/tech/test-project2 * branch master -> FETCH_HEAD Обновление 5b5a1d0..99a99ef Fast-forward NEW_FILE.html | 0 server-file.txt | 1 + 2 files changed, 1 insertion(+) create mode 100644 NEW_FILE.html pl@home:~/test-project2$ ls docs NEW_FILE.html only_my_notes.txt program.py readme.md server-file.txt text.txt pl@home:~/test-project2$ cat server-file.txt hello pl@home:~/test-project2$ git log --oneline -2 99a99ef (HEAD -> master, live/master, live/HEAD) Отредактирован server-file.txt, создан NEW_FILE.html b2792ec тест удаления из индекса