github как прослойка для синхронизации dev и production

Заранее простите, вопрос не связан напрямую с modx, но я знаю это сообщество как отзывчивое и опытное, поэтому спрошу совета.

Вопрос об использовании git и github для синхронизации между сайтом на котором ведется разработка (dev) и работающим (production).

Очень часто бывает ситуация, когда приходит уже работающий проект, без разницы на каком движке. Сео специалисты и прочие товарищи говорят — жуть — все нужно переделывать. Чтобы не работать на живом сайте, делаю тестовый (копию рабочего), работаю с ним, затем вручную через FTP переношу изменения.
Но ведь вроде как раз это и делает система версий GIT.

Короче говоря, ближе к делу. Пытаюсь сегодня выстроить некую схему работы с двумя сайтами на разных доменах, один их которых dev второй production с возможностью синхронизации через github. И что-то не складывается у меня этот велосипед.

Есть site.ru и dev-site.ru (полная копия первого). В IDE создаю проект локальный, подключаюсь к серверу на котором dev, выбираю какие папки из сайта мне понадобятся при разработке, настраиваю синхронизацию. Локальный проект на компьютере беру под контроль версий, создаю на github репозиторий и пушу туда изменения. Добиваюсь желаемого результата на dev и хочу перенести изменения на production.
Подключаюсь через SSH к серверу, захожу в папку с живым проектом и дальше я чего-то не понимаю. Я вижу только 2 способа получить изменения из репозитория на github. Первый — склонировать его. Однако клонирование всегда происходит в папку, а нужно чтобы файлы попали в корень. Зачем мне папка внутри сайта, из которой потом придется руками разносить все файлы по нужным директориям. Есть возможность при клонировании указать в качестве имени папки точку, однако это работает только если директория пустая. А в нашем случае корневая директория работающего сайта не может быть пустой. Второй способ — инициализировать в корне работающего сайта новый репозиторий, подключить удаленный репозиторий github через git remote add и сделать pull с него. Но и тут неудача. Через некоторый промежуток времени консоль выдает, что fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

Буду рад советам, как кто решает такую казалось бы элементарную задачу.
Спасибо.
Александр Мельник
11 февраля 2018, 19:57
modx.pro
1
2 919
0

Комментарии: 14

Михаил
12 февраля 2018, 07:35
0
очень сильно Вам может помочь Gitify. Я использую в принципе все норм. Gitify
    Александр Мельник
    12 февраля 2018, 09:13
    0
    Спасибо.
    Сразу скажу несколько НО:
    — Gitify это компонент для MODX, а мне бы хотелось рассмотреть вопрос шире, как работать просто с файлами, не важно какая CMS или движок
    — Gitify можно использовать начиная проект с нуля, но он врядли поможет на готовом работающем сайте, который необходимо переделать.
    — В свое время этот компонент мне показался слишком уж мудренным и глючным. Возможно его уже улучшили.

    Но хотелось бы немного абстрагироваться именно от MODX в данном вопросе, так как сайты приходят на совершенно разных движках — simpla, openncart, bitrix, joomla, wordpress, modx и так далее… Ну и плюс, хотелось бы рассмотреть именно не тот случай, когда начинаем разработку с нуля, а когда есть готовый работающий сайт.
      Іван Клімчук
      12 февраля 2018, 10:22
      0
      Прежде чем что-то завявлять, стоит таки изучить инструмент. Gitify не компонент для MODX, это отдельный инструмент, который работает через консоль с сайтом на MODX. И он подходит как и для новых сайтов, так и для уже существующих. И он не решает проблему умения работать с Git, скорее помогает сдружить MODX и Git. Т.е. не волшебная кнопка «сделать хорошо», но вполне удобный инструмент.
      Что касается работы Git, то вам определенно стоит почитать документацию по этому инструменту. Потому что единственно верный способ работы — это второй. И ошибка про права — это полная хрень. Настройте правильно окружение, а потом уже сетуйте на git, который странную ошибку показывает. Да, документация по git даст ответы на ваши глобальные вопросы, как работать с контролем версий файлов независимо от CMS.
        Александр Мельник
        12 февраля 2018, 10:54
        0
        Я не сетую на git, Иван.
        Я прошу совета — чувствуете разницу?
          Александр Мельник
          12 февраля 2018, 12:21
          0
          И кстати, да. Я не прав был говоря слово — «компонент» о Gitify
          Инструмент более правильно и я смотрю он значительно «вырос» за последнее время.
          Но по прежнему это только для MODX, а мой вопрос о том как только при помощи чистого gita синхронизировать изменения между двумя сайтами. Документация я конечно читал, но не нашел в ней изящного решения своего вопроса. Может оно там и есть, но я не увидел. Поэтому и прошу совета, ведь это естественно просить совета, когда не знаешь.
            Іван Клімчук
            12 февраля 2018, 12:27
            0
            В случае с MODX нет элегантного решения на чистом git, потому что MODX хранит код элементов в БД. Отсюда и необходимость прослойки в виде Gitify (либо других способов и подходов).
              Александр Мельник
              12 февраля 2018, 13:13
              0
              Да, я понимаю это, спасибо.
              Но скажем можно воспользоваться статичными файлами, феномными файловыми элементами, классным компонентом того же Зернова — gitmodx и работать с файлами в modx.
              А значит можно и не используя Gitify синхронизировать два сайта на modx между собой — только чистым git.
              И наиболее правильным мне кажется создание чистого репозитория на рабочем сайте, подключение к нему удаленного репозитория с github где лежат уже все изменения и забирать их оттуда pull ом.
              Просто в таком вот виде git не хочет получать информацию с подключенного удаленного репозитория. Ругается что его нет, хотя при команде git remote вполне себе показывает что он подключен. В документации говорится о каком то открытом ключе SSH, возможно нужно мне смотреть в эту строну.

              Но в любом случае спасибо.

                Іван Клімчук
                12 февраля 2018, 13:19
                0
                Именно в эту сторону и стоит смотреть. Вам и Артем, в принципе, уже ответил, что стоит ознакомиться подробнее с темой «Как работать с Git?». Благо, литературы и статей навалом (на русском тоже предостаточно).
      Артём Зернов
      12 февраля 2018, 09:55
      +1
      Я явно вижу, что ты не до конца понимаешь сути работы git и отдельных его фишек. Поэтому советую больше почитать про git, его возможности и команды.

      Как решается твоя проблема (как я ее решаю):
      1. Приходит готовый сайт, я создаю под него отдельный репозиторий
      2. Создаю .gitignore файл, в который я дописываю все те файлы, которые не нужно хранить под контролем версий (туда относятся всякие изображения, добавляемые админом при создании новых ресурсов или редактировании старых, туда относятся папки с кэшем, и туда же относятся файлы-конфиги, в которых содержатся различные переменные, специфичные для того хоста, на котором этот сайт разворачивается)
      3. Все конфиги я копирую в папку или файл с суфиксом .sample (то есть чтобы ты при разворачивании где-то в другом месте мог их скопировать, удалить .sample и прописать в них настройки для конкретного хоста)
      4. Заливаю все это в свой репозиторий, делаю коммит и пуш (commit + push). То, что прописано в .gitignore туда не попадает.
      5. На рабочем сервере сначала удаляю папку сайта (либо делаю бэкап), потом клонирую репозиторий в папку с таким же названием, как бывшая папка сайта, потом делаю конфиги из .sample-конфигов. Настраиваю БД и прочие стандартные вещи.
      6. Копирую через FTP или SSH папки, которые не вошли в репозиторий (как правило, это только картинки, кэш копировать смысла нет)

      И все!

      Теперь, если ты делаешь изменения на своем локальном сервере, ты их заливаешь в репозиторий, а потом на сервере ты их вытягиваешь из репозитория командой git pull — и все это происходит в рабочем каталоге сайта.
        Александр Мельник
        12 февраля 2018, 10:25
        0
        Спасибо, Артем. И за оперативность в том числе)
        Но в целом, ты описал туже проблему что и я, просто путь решения такой — ты удаляешь весь сайт с рабочего сервера, чтобы была возможность склонировать туда репозиторий. Именно об этом я и спрашивал, ведь нельзя склонировать не в пустую папку.

        В целом схема понятная, спасибо за нее.
        Просто то что ты описал, возможно только в случае разработки на локальном сервере и только при полном копировании сайта. Я часто сталкиваюсь с тем, что локальный сервер работает непредсказуемо. Поэтому в описанной мной выше схеме в локальном репозитории и в удаленном соответственно, находятся только те папки, который нужны для разработки. Поскольку сайт продолжает работать на удаленном сервере, а мы лишь синхронизируем при помощи IDE файлы, то вообще исчезает необходимость копировать весь сайт. В deployment IDE выбрал какие файлы папки нужны и работаем с ними. В итоге получаем — сайт dev, который работает так как нам нужно. Локальный репозиторий, в котором все изменения, которые мы внесли на dev, удаленный репозиторий, такой же как и локальный.

        И все чудно, кроме того, что я пока не могу найти способа средствами только git получить изменения на основном рабочем сервере.
          Володя
          12 февраля 2018, 11:00
          0
          И все чудно, кроме того, что я пока не могу найти способа средствами только git получить изменения на основном рабочем сервере.
          настраиваете вебхук примерно вот так gist.github.com/vgrish/a1600a6aa77c1cf33a68e473b7ff82a1
          заливаются новые файлы и собирается пакет…
      Дмитрий
      12 февраля 2018, 15:10
      0
      Вот еще прикольная статья, можно ознакомится. Очень подробно расписано
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      14