Я запускаю новый проект Zend Framework, в котором я буду сотрудничать с дизайнером. Я буду поддерживать этот код проекта с помощью git, и обычно дизайнеры не говорят git (или любой язык программирования), поэтому я хочу облегчить ему задачу, иначе я боюсь, что он не будет использовать git вообще. Мой план состоит в том, чтобы дать ему несколько GUI git, и с ним он должен использовать только базовые функции git, такие как фиксация, различие, выборка, слияние, push и pull.
Я использую gitolite для хранения общей копии нашего репозитория git, и поскольку у него есть расширенная система разрешений, я дам доступ дизайнеру RW только для выделенной ветки (дизайна) и доступа для чтения к другим ветвям.
Чтобы все было просто, я хотел бы поделиться с ним только некоторыми папками в основном проекте (который следует рекомендуемая структура ZF), для которого он действительно нуждается в доступе для выполнения своей работы. В то же время я хочу, чтобы мы оба все еще сливались друг с другом.
Сокращенная структура для его ветки должна быть следующей:
<project name>/
application/
layouts/
scripts/
views/
scripts/
public/
css/
images/
js/
Я знаю, что я мог бы использовать подмодули для этой задачи, но мне будет больно поддерживать, потому что я должен разделить мой проект на (по крайней мере) 4 подрепозитория, он должен иметь доступ только к субрепозиториям, и у него будет 3 репозитория работать с. По этой причине, если это единственное решение, я откажусь от этой идеи.
Некоторые ссылки, которые я уже прочитал, заставляют меня думать, что то, что я прошу, возможно:
Вот мой вопрос:
- Как создать уменьшенную ветвь
design
(git checkout -b design
иgit mv/rm
?) - Как настроить git отслеживать изменения в ветвях (поэтому я могу
git merge design
от главной ветки и наоборот)
Обновление:
Я обнаружил еще один возможный подход к проблеме, заданной этими двумя вопросами SO
- Как сообщить git, чтобы всегда выбирать локальную версию для конфликтующих слияний в определенном файле?
- Как настроить драйвер git для игнорирования папки при слиянии.
Я попытался реализовать первый после git rm all-unneeded-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 это просто невозможно.
Я бы хотел, чтобы меня противоречили, но я боюсь, что этого не произойдет.