Ответы пользователя по тегу Git
  • Как деплоить небольшие проекты?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    1. Хорошая ли идея стягивать все исключительно по тегам т.е. поставил я на фронте и на беке тег v0.4 и скрипт на сервере стянул и то и другое
    2. Самонаписанный скрипт постоянно чекающий теги гитлаба это вообще идея хорошая? В чем +\- деплоя по тегам?


    Метки ставить можно. Даже полезно релизы метками отмечать. Всегда можно определить, на какой комит надо откатиться, чтобы локально восстановить версию кода как на сервере. И release notice писать по git log между метками, а не в памяти держать.

    Постоянно чекать git не надо. Лишняя нагрузка на проц. Совершенно лишняя. Рекомендую веб-хуки или деплоить по SSH команде.

    3. Как быть с адресами и портами.

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

    10+ вариантов на странице https://css-tricks.com/deployment/
    Я для разного размера проектов пользовался
    1. deployhq - как только обновляется ветка master - сервис обновляет сервер по SSH
    2. веб-хуками из bitbacket + самописным веб-скриптом на PHP без таймлимита - как только приходит хук об обновлении ветки master, выполняется скрипт типа такого
    cd /var/www/project
    cp web/closed.bak web/closed.html # закрыть приложение
    git pull
    composer update && php yii migrate # как то код бэка обновить
    npm run build # как то код фронта обновить
    rm web/closed.html # открыть приложение

    3. такой же командой, запускаемой через ssh, без веб-хуков. Это когда понадобилось сразу бэк и фронт пересобирать из разных репо и из разных веток. Ну типа демо из ветки develop, а релизы из ветки master на несколько серверов.
    4. настраивали Jenkins для авто-установки

    В принципе устраивает
    Ответ написан
  • Как создавать миграцию SQL с Git коммитом?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    На примере фреймворка Yii
    www.yiiframework.com/doc/guide/1.1/ru/database.mig...
    www.yiiframework.com/doc-2.0/guide-db-migrations.html
    www.youtube.com/watch?v=cugnRoZ1ick&feature=youtu.be

    Миграции - это классы на PHP. Они размещаются в git.
    Класс миграций содержит метод для апгрейда (наката) и даунгрейта (отката) изменений.

    В базе данных есть таблица с списком установленных файлов миграций.
    При установке или обновлении проекта, специальная команда выполняет анализ директории с файлами миграций (их может быть несколько), сверяет с таблицей.
    Предлагает установить (накатить) те файлы миграций, которых нет в базе.

    Можно попросить отменить (откатить) изменение или установить его ещё раз.

    В миграции можно и структуру таблица поменять (миграция модели), и данные изменить (миграция данных).

    У нас в скрипте установки (на тостере: Какой workflow front-end разработки у вас? ) делается бакап базы перед обновлением и после обновления. Есть ручной скрипт отката, чтобы базу восстанавить.
    А в идеальном случае надо постараться так написать код, чтобы он мог без сбоев работать и с старой, и с новой моделью базы.
    Ответ написан
  • Как командно разрабатывать php проект?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Инфраструктура
    * Создайте репозиторий на Bitbucket или GitHub.
    * Создайте себе локально копию репозитория и локально поднимите базу данных с одинаковой структурой
    * Если в базе требуются изменения, создавайте "миграции", которые обновят структуру данных или сами данные.
    * Свои изменения по коду, так же как и миграции, отправляйте в репозиторий

    Ещё есть возможность создания виртуальных серверов для разработки или использование online IDE. Решает кучу проблем, если интернет быстрый.
    * https://compilr.com/ Полноценная среда разработки
    * https://koding.com/ Среда разработки с предустановленным веб-сервером и элементами социальной сети
    * online-php.com Online IDE
    * https://codeanywhere.com/ Среда разработки. Код можно хранить в облаке, а также в Dropbox, Google Drive, FTP, github.
    Другие тулзы для совместной работы в online

    Промежуточные версии
    Если вы географически недалеко друг от друга, то просто периодически показывайте, что у вас получается.
    Если нет, пользуйтесь Skype Shared Screen, Join.me и другие аналогичные продукты, чтобы вместе смотреть и обсуждать голосом. А лучше TeamViewer, чтобы можно было вместе и посмотреть, и поправить.

    Обновление сервера
    Изменения на сервер устанавливайте из того-же репозитория. Не забудьте про миграции. Озаботьтесь вопросами безопасности. Хотя бы так: скрыть файлы .git
    Ответ написан
  • Можно ли смержить бинарные файлы с решением конфликтов, и если нет, почему нет решений на эту тему?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Когда-то давно я ломал сохранялки от игры Fallout с помощью консольной утилиты fc
    fc /b file1 file2


    Инструменты сравнения


    Ещё нужно учесть, что многие форматы файлов поддерживают сжатие. Тот же PNG, BMP и TIFF и их предварительно надо распаковать например в BMP без сжатия. А некоторые форматы расжимать бесполезно, потому что сжатие было с потерями, например, JPG.

    Всегда можно загрузить два PNG в фотошоп в два слоя, наложить слои в режиме "Разница" (Difference) и увидеть изменения. Сравнить два PNG можно даже через консоль, с помощью www.imagemagick.org/script/compare.php

    Вообще это сложно, потому что для этого надо уметь смотреть вот сюда take.ms/ix8AI и видеть вот это take.ms/oRhXI
    Это могут немногие. Я таких не знаю.
    Ответ написан
  • Как настроить ssh для git?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Git для Windows:
    страница проекта git-scm.com
    страница выбора дистрибутива git-scm.com/download/win

    После установки появится появится возможность через консоль gitbash выполнять команды unix
    В частности создать папку для ключей и сгенерировать обычные Unix ключи

    mkdir -p /c/project/.ssh
    ssh-keygen -f /c/project/.ssh/id_rsa -C any_comment


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

    Публичный читается так:
    $ cat /c/project/.ssh/id_rsa.pub


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

    touch ~/.ssh/config
    notepad ~/.ssh/config


    Туда нужно внести такие строки

    Host github.com
    HostName github.com
    Port 22
    IdentityFile /c/project/.ssh/id_rsa


    Далее нужно клонировать ваш репозиторий с использованием SSH : пример получения ссылки take.ms/h3QCp

    git clone git@github.com:sample-username/sample-repo.git


    В общем то никакой магии
    Ответ написан
  • Как организовать контроль версий двух одинаковых сайтов?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Нужно 3 ветки в репозитории - ядро + сайт1 + сайт2

    в репозиториях сайт1 и сайт2 делаете git submodule ядро

    теперь сайт1 и сайт2 содержат ядро как часть кода

    но это сработает только в том случае, когда сайт1 и сайт2 используют ядро, но не модифицируют его. Допустимо наследование, замена классов, настройка через файл конфигурации

    Например, ядро содержит файл HttpRequest.php с классом HttpRequest
    А в приложении сайт1 требуется дополнительные функции в этом классе
    Тогда возможны два варианта решения в зависимости от того, что реализовано в ядре:

    1. Настройка автозагрузки файлов
    Создаём копию файла Site1HttpRequest.php c определением класса HttpRequest в коде сайт1
    Настраиваем autoloader для сайт1 так, чтобы при обращении к определению класса HttpRequest использовался файл Site1HttpRequest.php

    2. Локатор (инверсия зависимостей)
    В коде ядра создаём класс-локатор для хранения часто используемых экземпляров, которые он возвращает по ключевому имени. Например сущность с ключом request - это экземпляр класса HttpRequest.
    В коде сайт1 создаём класс Site1HttpRequest, который наследует HttpRequest из ядра, расширяем или переопределяем функционал.
    В настройках класса-локатора для сайт1 пишем, что если требуется экземпляр к кодом request, то должен загрузиться класс Site1HttpRequest.

    Ссылки и куски кода:
    1. git submodules
    2. Использование таблицы классов в фреймворке Yii
    Yii::$classMap=array(
            'HttpRequest'=>'/path/to/HttpRequest.php', // <-- можно указать другой путь к классу
    );
    Yii::createWebApplication($config)->run();

    3. Application - класс-локатор в фреймворке Yii
    # @file protected/config/main.php
    array(
        'components' => array(
             'request' => array(
                'class' => 'HttpRequest', // <-- можно указать другой класс
            ),
        ),
    );
    Ответ написан
  • Знакомство школьников с git и github… Стоит ли? И с чего начать?

    copist
    @copist
    Мидл, хочешь стать синьором? http://copi.st/ExhE
    Нет, дайте им общую информацию о принципах версионности, задачах, которые решают средства контроля версий.
    Ответ написан