Настройте репозиторий git на рабочем сервере с удалённым источником.

Вопрос или проблема

Это может быть расплывчатый вопрос, но я не могу в данный момент найти хорошее решение в своей голове.

У меня есть приложение BookStack, работающее на сервере компании. Чтобы упростить и обеспечить безопасность, у меня есть пользовательский файл .gitignore, который игнорирует все, кроме наших пользовательских расширений и конфигурации .env.

Идея заключается в том, что разработчики могут добавить репозиторий в качестве удаленного источника в директорию с BookStack вместе с макетом базы данных, чтобы протестировать его безопасно.

Это нормально до тех пор, пока мне не нужно извлекать данные из репозитория BookStack. Если я сейчас добавлю BookStack в качестве удаленного источника на производственном сервере, это будет конфликтовать с .gitignore при обновлении.

У вас есть какие-либо советы, как я мог бы решить эту проблему, кроме как разрешать этот конфликт при каждом обновлении?

Это просто идея и небольшое общее руководство о том, что вы могли бы сделать с worktree.

Как уже упоминалось, есть несколько возможностей.

Вы также можете использовать отдельные ветки для настроек или использовать автоматизированный пользовательский скрипт и так далее.

Git Worktree для чистого разделения

С помощью Git Worktree вы можете создать две отдельные рабочие директории для одного и того же репозитория:

  • Одна для изменений из upstream (BookStack).
  • Одна для ваших собственных настроек (Custom Code).

Это избегает конфликтов и позволяет управлять обеими версиями параллельно.

Шаги:

  • Клонируйте ваш репозиторий на сервер

  • Добавьте репозиторий BookStack как upstream удаленный

  • Создайте новую рабочую директорию (Worktree) для ветки upstream

  • Работайте в основной директории на отдельной ветке

  • Обновите upstream worktree с помощью git pull

  • Слейте изменения в вашу пользовательскую ветку, если нужно

  • Используйте .git/info/exclude для игнорирования таких файлов, как .env или пользовательские расширения

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

Вы можете использовать обе версии параллельно без постоянного переключения веток.

worktree

git-worktree – Управление несколькими рабочими деревьями

Для чего бы я использовал git-worktree?

Git Worktree

.git/info/exclude

Исключение локальных файлов без создания файла .gitignore

gitignore – Указывает на намеренно непрослеживаемые файлы, которые нужно игнорировать

Когда вы бы использовали .git/info/exclude вместо .gitignore для исключения файлов?

Ответ или решение

Настройка Git-репозитория на производственном сервере с удаленным источником может представлять собой сложную задачу, особенно когда речь идет о сочетании upstream-обновлений и пользовательских изменений. Рассмотрим, как можно использовать возможности Git для эффективного управления вашим проектом, сохраняя при этом его целостность и надежность.

Теория

Ваша задача состоит в том, чтобы интегрировать изменения из основного репозитория (BookStack) с вашими собственными модификациями, не создавая при этом конфликтов. Это стандартная проблема управления конфигурацией в системах контроля версий, которую можно решить с помощью расширенных возможностей Git, таких как worktree и индивидуальное игнорирование файлов с помощью .git/info/exclude.

Git Worktree — это мощный инструмент, который позволяет работать с несколькими рабочими деревьями (directories) в одном репозитории. Это дает возможность параллельно отслеживать изменения в основном репозитории и в вашей собственной ветке с доработками.

Пример

Рассмотрим пример применения worktree для разделения upstream кода и пользовательских изменений:

  1. Клонируйте основной репозиторий на ваш сервер. Это обеспечит вам доступ к коду BookStack:

    git clone <repository-url> bookstack-main
  2. Добавьте репозиторий BookStack как удаленный источник (upstream):

    cd bookstack-main
    git remote add upstream <upstream-repo-url>
  3. Создайте новое рабочее дерево (worktree) для upstream-времени:

    git worktree add ../bookstack-upstream master

    Это позволит вам отделить upstream изменения от ваших пользовательских настроек.

  4. Работайте в основном каталоге (bookstack-main) на отдельной ветке, содержащей ваши кастомизации:

    git checkout -b custom-branch
  5. Для обновления ветки upstream, перейдите в рабочее дерево и выполните pull:

    cd ../bookstack-upstream
    git pull
  6. Сливайте изменения в вашу кастомизированную ветку по мере необходимости:

    cd ../bookstack-main
    git checkout custom-branch
    git merge upstream/master
  7. Настройте .git/info/exclude, чтобы игнорировать локальные файлы, такие как .env:

    • Откройте файл .git/info/exclude и добавьте в него необходимые исключения.

Применение

Применение вышеописанного подхода позволяет отделить upstream код от пользовательских изменений, что значительно упрощает процесс обновления и поддержания консистентности системы:

  • Совместимость с обновлениями: Вы можете обновлять upstream-ветку без риска переписывания ваших пользовательских настроек.
  • Снижение конфликтов: Разделение на различные рабочие области позволяет избежать прямых конфликтов между upstream и пользовательскими модификациями.
  • Гибкость тестирования: Использование отдельных ветвей избавляет вас от необходимости переключаться между различными версиями кода вручную, предлагая при этом возможность использования различных конфигураций и тестирования на реальных данных.

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

Оцените материал
Добавить комментарий

Капча загружается...