Стратегия слияния поддерева Git или команда поддерева?

Я начинаю новый проект Zend Framework, в котором я буду сотрудничать с дизайнером. Я собираюсь поддерживать этот код проекта с помощью git, и обычно дизайнеры не говорят на git (или на любом другом языке программирования), поэтому я хочу облегчить ему задачу, иначе я боюсь, что он вообще не будет использовать git. Мой план - дать ему немного Git gui, и с этим он должен использовать только базовые функции git, такие как фиксация, diff, выборка, слияние, push и pull.

Я использую gitolite для поддержки общей копии нашего репозитория git, и поскольку он имеет детализированная система разрешений,Я дам дизайнеру доступ RW только к выделенной ветке (дизайну) и доступ для чтения к другим ветвям.

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

Уменьшенная структура для его ветви должна быть такой:

/
    application/
        layouts/
            scripts/
        views/
            scripts/
    public/
        css/
        images/
        js/

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

Некоторые ссылки, которые я уже читал, заставляют меня думать, что то, о чем я прошу, возможно:

Вот мой вопрос:

  1. Как создать сокращенную ветку дизайн ( git checkout -b design и git mv / rm ]?)
  2. Как настроить git для отслеживания изменений в разных ветках (чтобы я мог git merge design из основной ветки и наоборот)

Обновление:

Я обнаружил еще одно возможный подход к проблеме, заданной этими двумя вопросами SO

Я попытался реализовать первое после git rm all-undeeded-stuff в ветке дизайна, я делаю фиксацию в главной ветке, которая включает файл в пути из белого списка и другой файл в черных списках путей, но git merge завершился ошибкой со следующим сообщением

CONFLICT (delete/modify): application/Bootstrap.php deleted in HEAD and modified in master. Version master of application/Bootstrap.php left in tree.

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

Я еще не пробовал второй подход (.gitignore), но если я понял, что этот подход не соответствует моим потребностям, потому что он будет игнорировать только файлы из черного списка в ветке дизайна, но они будут извлечены в ветке дизайна, нарушив мои требования.

Я продвинул свои эксперименты на ] GitHub

Обновление 2:

Я думаю, что в настоящее время для этого нет решения. С текущей реализацией git это просто недостижимо.

Я бы хотел возразить, но боюсь, что этого не произойдет.

5
задан Community 23 May 2017 в 12:27
поделиться