Мастер GIT-репозиторий с общими суб-репозиториями - PullRequest
0 голосов
/ 07 декабря 2011

Я создал базовую систему администратора, используя RoR . Он имеет очень базовые функции, такие как пользователи, роли, функции безопасности и базовый пользовательский интерфейс. Я хочу поместить этот проект в главный репозиторий GIT.

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

МАСТЕР-ПРОЕКТ

ОСНОВНОЙ ПРОЕКТ > ПОДПРОЕКТ № 1

МАСТЕР-ПРОЕКТ > ПОДПРОЕКТ № 2

Таким образом, оба подпроекта идентичны основному проекту на данный момент. Если я хочу сделать универсальное изменение кода для любого файла в MASTER PROJECT , как мне сделать это изменение распространяющимся на все подпроекты. Это мой ПЕРВЫЙ ВОПРОС .

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

Что делать, если я хочу изменить код определенного файла в одном из подпроектов?

Например: если я настрою макет в SUB PROJECT # 2 (application.html.erb), я хочу, чтобы это изменение затронуло только SUB PROJECT # 2 . Я хочу, чтобы все подпроекты использовали application.html.erb из MASTER PROJECT , ЕСЛИ он не был изменен (настроен). Было бы хорошо, если бы SUB PROJECT # 2 содержал только один настроенный файл. Все остальные отсутствующие файлы возвращаются на MASTER PROJECT .

ТРЕТИЙ ВОПРОС:

Если я внесу изменение в application.html.erb в MASTER PROJECT , предполагается, что это будет изменение для всех подпроектов, ЕСЛИ В одном из субпроектов не настроено изменение этого файла уже. В этом случае SUB PROJECT # 2 делает.

Я бы хотел, чтобы GIT либо:

a) Пропустить обновление на application.html.erb в SUB PROJECT # 2

OR

b) Запросить предупреждение для какого-либо слияния.

Это имеет смысл? Возможна ли эта настройка? Как бы это называется? С чего начать?

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Вопрос 1 :

Вы можете использовать ветви, чтобы отслеживать это. Однако вам также следует подумать, нужен ли вам просто набор шаблонов.

Git не выполняет автоматическое слияние само по себе. Вы можете написать скрипт для этого, но в противном случае вам нужно будет вручную выполнить git merge для каждой ветви подпроекта.

Вопрос 2 :

Любая ветвь, которую вы создаете, изначально будет идентична исходной ветке (master) во время создания ветки. Он не изменится, пока вы не зафиксируете изменения или не объедините изменения из главной ветви. Не имеет смысла, чтобы эта ветвь содержала только один настроенный файл, поэтому вы можете подумать, почему вы спрашиваете об этом, если хотите использовать ветки контроля версий. Ветвь может содержать только модификации в одном файле, но это ничего не обеспечивает.

Вопрос 3 :

Это то, для чего предназначен git. Когда вы делаете git merge в ветке подпроекта, git попытается автоматически объединить содержимое, и в случае неудачи он отметит конфликт и позволит вам выполнить объединение вручную. Вы также можете указать git использовать другую стратегию слияния, например, «сохранить локальную версию», но это более продвинутый метод, и, вероятно, это не то, что вам нужно.

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

0 голосов
/ 07 декабря 2011

Может быть, это правильный выбор, чтобы поместить ваш мастер-проект в его собственный репозиторий и создать новый для каждого проекта. Существует подмодуль git , который позволяет вам интегрировать другие репозитории в проект. Вы должны стараться вносить изменения, относящиеся к конкретному проекту, только в соответствующих репозиториях. Изменения в основном проекте можно обновить через подмодуль git!

...