Синхронизировать каталог удаленного сервера с локальным git-репозиторием
Я хочу синхронизировать каталог /home/myproject
моей удаленной машины с, в качестве источника, каталогом D:\myproject\
моей локальной машины. Я хотел бы использовать git
(также извлечь выгоду из истории коммитов и т. д.)
Я сделал это на удаленной машине (создание чистого хранилища, см. Также В чем разница между "git init" и "git init --bare"?):
mkdir /home/myproject.git
cd /home/myproject.git
git init --bare
и это на локальной машине (с текущей директорией D:\myproject\
):
git init
git add main.py # D:\myproject\main.py exists on local machine
git commit -m "First"
git remote add dest root@203.0.113.0:/home/myproject.git # via ssh
git push dest master
Это работает, теперь удаленный сервер /home/myproject.git
синхронизируется, но каталог /home/myproject/
(это должно содержать, например, /home/myproject/main.py
) до сих пор не существует!
Поэтому я должен сделать это на удаленном сервере:
cd /home
git clone myproject.git myproject
и сейчас /home/myproject/main.py
существует.
Проблема: каждый раз, когда я делаю git push
на локальной машине, это удаленный сервер /home/myproject.git
который обновляется, а не /home/myproject/
,
Вопрос: как настроить эти репозитории так, чтобы git push
автоматически обновляет все файлы в /home/myproject
такие как /home/myproject/main.py
, а не только /home/myproject.git
?
2 ответа
Вот более простое решение (не требующее "чистого" хранилища или скрипта "post-receive hook"):
На удаленном компьютере создайте целевой репозиторий и настройте его следующим образом:
mkdir /home/myproject && cd /home/myproject git init git config receive.denyCurrentBranch updateInstead
На локальной машине (из рабочего каталога
D:\myproject\
), создайте исходный репозиторий и отправьте его:git init git add main.py git commit -m "First" git remote add dest root@203.0.113.0:/home/myproject git push -u dest master
Сейчас
/home/myproject
обновляется на далекой машине!
Примечание: для этого требуется версия git>= 2.4. Если у вас его нет и он недоступен в вашем текущем выпуске, это может помочь: add-apt-repository ppa:git-core/ppa; apt update; apt install git
,
Как объяснено в этом руководстве, вот рабочее решение:
На локальной машине (из рабочего каталога
D:\myproject\
), создайте репозиторий:git init git add main.py git commit -m "First" git remote add dest root@203.0.113.0:/home/myproject.git
На удаленном компьютере создайте "пустой репозиторий" + каталог назначения:
mkdir /home/myproject.git && cd /home/myproject.git && git init --bare echo -e '#!/bin/sh\nGIT_WORK_TREE=/home/myproject git checkout -f' > hooks/post-receive chmod +x hooks/post-receive mkdir /home/myproject
На локальной машине:
git push -u dest master # later we can just do: git push
Сейчас /home/myproject
обновляется на далекой машине!