Git: развертывание на веб-сайте из двух репозиториев - PullRequest
0 голосов
/ 27 сентября 2018

Я хотел бы использовать git для загрузки файлов на мой веб-сайт.Тем не менее, сайт разработан с использованием двух разных git-репозиториев.Каждый репозиторий содержит файлы для отдельной части сайта.

Вот часть, которая работает:

У меня есть веб-сайт на example.com.На этом удаленном сервере я установил папку /var/www/example/web/, из которой обслуживается сайт.Я также создал папку на /var/www/example/git/web.git/ и инициализировал ее как пустой git-репозиторий.Файл hooks/post-receive в этой папке представляет собой исполняемый текстовый файл со следующим содержимым:

#!/bin/sh
GIT_WORK_TREE=/var/www/example/web git checkout -f

На моей машине для разработки у меня есть локальный репозиторий git с удаленной веткой с именем dotcom:

git remote -v
dotcom  ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git (fetch)
dotcom  ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git (push)

Когда я звоню git push dotcom master, эта часть сайта обновляется, как и ожидалось.

Вот часть, которую мне нужно выяснить:

У меня есть второй репозиторий, гдеЯ разрабатываю новое веб-приложение.Я использую сайт разработки на 'example.net, чтобы проверить это.Сайт на example.net работает нормально, но некоторые части приложения готовы к развертыванию на example.com.Я не хочу развертывать все в example.com: только те части, которые готовы.

Вот что я попробовал:

Во втором хранилище я создал несвязанную ветвь:

git checkout --orphan fordotcom

Я расшифровал все части проекта, которые я не хочу загружать в example.com.

git rm --cached <foldername>

Я создал удаленную ветку для этого хранилища, указывая на example.comсервер:

git remote add dotcom2 ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git

Я использовал git push dotcom2 fordotcom для загрузки необходимых файлов на сервер.Однако загруженные файлы не копируются в папку web.Предположительно, это потому, что они не находятся в ветке под названием master

git push dotcom2 fordotcom
Counting objects: 111, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (105/105), done.
Writing objects: 100% (111/111), 30.69 MiB | 3.91 MiB/s, done.
Total 111 (delta 0), reused 0 (delta 0)
To ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git
 * [new branch]      fordotcom -> fordotcom

Что было бы хорошим решением для этого?Я могу себе представить:

  1. Слияние файлов fordotcom с master на удаленном сервере (но возможно ли это, учитывая, что они приходят из другого хранилища?)
  2. Копирование файлов из второго репозитория вручную в первый репозиторий (но тогда любые обновления второго репозитория не будут автоматически применяться к первому)
  3. Добавление соответствующих папок второго репозитория в первый репозиторий таким же образомфайлы отслеживаются обоими репозиториями (но разумно ли и как мне это сделать, учитывая, что репозитории имеют разные корневые папки?)
  4. Создание папки git/app.git/ рядом с папкой git/web.git/ и использование этогодля удаленного для второго хранилища (но вызовет ли это конфликт, если два хранилища попытаются обновить файлы в одном месте?)
  5. Принятие какого-то совершенно другого решения, которое вы можете предложить, потому что у вас больше опытаиспользуя мерзавца, чем у меня.

1 Ответ

0 голосов
/ 28 сентября 2018

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

Но git checkout -f проверяет ветку по умолчанию:master.
Это подтолкнет другую ветвь:

#!/bin/bash

while read oldrev newrev ref
do
    branch=`echo $ref | cut -d/ -f3`
    GIT_WORK_TREE=/path/to/local/checkout git checkout -f $branch
done

Или рассмотрите эту суть .

Но убедитесь, что ваша вторая ветвь имеет полный наборфайлов, необходимых для вашего веб-сайта, или вы должны переопределить / удалить файлы в папке назначения /var/www/example/web с помощью силы git checkout (git checkout -f)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...