Подтвердить что ты не робот

Отдельный файл как подмодуль Git

Я пытаюсь установить лучшие методы для общего кода среди репозиториев Git.

До сих пор я, очевидно, сталкивался с подмодулями, которые кажутся похожими на них - почти - соответствуют законопроекту. Мой проект представляет собой структуру PHP MVC с простой структурой:

  • /приложение
  • core.php
  • /ядро ​​

Где app - это папка, содержащая контроллеры приложений, модели, представления и т.д., в то время как core содержит файлы общего назначения, например. контроллер входа. Сам файл core.php является глобальным обработчиком для всех запросов.

Таким образом, общий код среди всех моих развертываний этой структуры MVC - core.php и core.

Я вижу, как можно превратить core в подмодуль Git, но не core.php.

Возможно ли это? Нужно ли мне перепроектировать мою фреймворк, чтобы core.php находился внутри папки core, чтобы я мог сделать всю папку подмодулем, или есть лучший способ?

4b9b3361

Ответ 1

Возможно, вам лучше всего поддерживать core.php и core в отдельном репо, а затем использовать его как удаленный. Затем вы можете управлять им, потянув его в любой проект, который он использует. Для этого просто запустите новый проект как отдельный репозиторий git, а затем потяните репозиторий "core" в качестве поддерева.

В этой главе показано, как это сделать:

Обновлено: http://git-scm.com/book/en/v2/Git-Tools-Advanced-Merging#_subtree_merge Оригинальная ссылка: https://git-scm.com/book/en/v1/Git-Tools-Subtree-Merging

Это немного лучше для вас, чем настройка, описанная в предыдущем разделе книги (6.6).

Посмотрите на это; это может быть полезно.

Ответ 2

Если вы можете использовать символические ссылки (например, вы не используете Windows), вы можете настроить core и core.php следующим образом:

# "base" repository layout:
core/
core.app

# each app repository layout:
base/
  core/
  core.php
core -> base/core/
core.php -> base/core.php
app/

В каждом репозитории приложений каталог base/ представляет собой либо подмодуль, который использует "базовый" репозиторий, либо слияние поддерева "базового" репозитория.

Оба метода позволят вам вносить изменения в базовый код в контексте конкретного приложения, а затем возвращать эти изменения обратно в основной базовый репозиторий. При использовании подмодулей вы должны быть осторожны, чтобы всегда публиковать новые базовые коммиты перед публикацией любого приложения, которое связывает эти новые базы с фиксацией (это не проблема при использовании слияния поддерева, потому что каждое приложение "плоское" и эффективно имеет свою собственную копию основание).

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

Subtree

git init newapp
cd newapp
ln -s base/core
ln -s base/core.php
git add core core.php
git commit -m'point to base (to be added next)'

# hook up base
git subtree add --prefix=base [email protected]:me/app_base.git master

mkdir app
# edit app/bar.php

# update base
git subtree pull --prefix=base [email protected]:me/app_base.git master

.
|-- .git/
|   |-- ...
|   `-- ...
|-- app/
|   `-- bar.php
|-- base/
|   |-- core/
|   |   `-- foo.php
|   `-- core.php
|-- core -> base/core/
`-- core.php -> base/core.php

Submodule

git init newapp
cd newapp
ln -s base/core
ln -s base/core.php
git add core core.php
git commit -m'point to base (to be added next)'

# hook up "base"
git submodule add [email protected]:me/app_base.git base
git commit -m'incorporate base'

mkdir app
# edit app/bar.php

# update base
(cd base && git fetch origin && git merge origin/master)
git add base
git commit -m'updated base'
.
|-- .git/
|   |-- ...
|   `-- ...
|-- .gitmodules
|-- app/
|   `-- bar.php
|-- base/
|   |-- .git/
|   |   |-- ...
|   |   `-- ...
|   |-- core/
|   |   `-- foo.php
|   `-- core.php
|-- core -> base/core/
`-- core.php -> base/core.php

Ответ 3

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

rmk answer, предлагая вам сделать это всего за один репо, использование ядра и core.php в качестве отправной точки еще одно разумное. Вы должны принять решение на основе ожидаемого рабочего процесса. Подмодуль будет хорошим, если вы планируете модифицировать контент * ядра отдельно от проектов, которые его используют; вы можете затем обновить подмодули в различных проектах, которые его используют. Базовый репозиторий будет хорош, если вы хотите изменить основное * содержимое в соответствии с конкретным проектом; вы можете перейти от базового репо, чтобы получать обновления, объединяя их с изменениями, внесенными вами в репо проекта.