Как синхронизировать локальный каталог с сервером с помощью Git?

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

Я привык к FTP, но он медленный и подвержен ошибкам.

У меня SSH доступ к серверу. Я могу запустить Git на сервере.

Я также хочу, чтобы избежать сторонних Git хостинг как Github или Bitbucket. Я хочу иметь возможность напрямую загружать на свой сервер.

23
задан laggingreflex
22.02.2023 10:52 Количество просмотров материала 3081
Распечатать страницу

1 ответ

на локальная машина:

  1. инициализировать каталог для синхронизации в качестве репозитория Git

    git init
    

    зафиксировать любой существующий код

    git add -A
    git commit -am "initial commit"
    
  2. установить свой пульт на сервер

    git remote set-url origin user@server:/path/to/dir/on/server
    

    здесь

    • user это имя пользователя, которое вы используете для SSH для вашего server. Напр. root@10.10.10.10

    • /path/to/dir/on/server каталог сервер, на котором вы хотите синхронизировать изменения с

    Side-note: желательно идти password-less для SSH-авторизации

на удаленной машине:

  1. инициализировать пустой каталог на сервере

    mkdir /path/to/dir/on/server
    cd /path/to/dir/on/server
    git init
    
  2. установите его конфигурацию, чтобы игнорировать обновления извлеченной ветви

    git config receive.denyCurrentBranch ignore
    

    это необходимо, потому что (цитируя точную ошибку, вы будете получите, если вы этого не сделаете)"обновление текущей ветви в непустом репозитории запрещено, потому что это сделает индекс и рабочее дерево несовместимыми с тем, что вы нажали, и потребует "git reset --hard", чтобы соответствовать рабочему дереву HEAD." (мы на самом деле сделаем это на следующем шаге).

  3. Set up a post-receive git hook:

    создайте файл post-receive на .git/hooks каталог и откройте его в редактор:

    vim .git/hooks/post-receive
    

    поместите в него следующее:

    #!/bin/sh
    git --git-dir=. --work-tree=.. checkout -f
    

    установите его режим в исполняемый файл:

    chmod +x .git/hooks/post-receive
    

    это будет проверить ваши последние изменения на сервере реж всякий раз, когда вы нажимаете любой.

  • один-вкладыш для всех выше:

    dir=<dir>; mkdir $dir && cd $dir && git init && git config receive.denyCurrentBranch ignore && printf '#!/bin/sh\ngit --git-dir=. --work-tree=.. checkout -f' > .git/hooks/post-receive && chmod +x .git/hooks/post-receive
    

теперь на локальной машине можно сделать так:

git commit -am "Some changes"
git push

и ваш локальный каталог будет синхронизирован с сервером dir.


дополнительный рецепт, который я часто использую: на местной машине я держу origin удаленное имя для Github / Bitbucket, который является "домом" проекта, и специальный server удаленное имя, где он получает развернуты. Я также создаю ветку git (которая также называется) server и настроить его, чтобы всегда нажимать на server пульт дистанционного управления:

git config branch.server.remote server
git config remote.server.push server:master

таким образом, когда я на ветку master это подталкивает к origin (гитхаб/системе Bitbucket и т. д.) и когда я нахожусь на server филиал он толкает на сервер.

2
отвечен laggingreflex 2023-02-23 18:40

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх