Я обнаружил, что использование master
немного сбивает с толку, так как я никогда не знал, имеете ли вы в виду хранилище платформы в целом или только ее основную ветвь.
Мое решение для этого будет следующим:
- У вас есть один центральный репозиторий для платформы .
- У вас есть один центральный репозиторий для проекта .
- Каждый разработчик имеет свой собственный локальный репозиторий.
Центральный репозиторий платформы
Это место, куда идет только код платформы.Используйте, например, свое существующее хранилище в качестве отправной точки.
Центральный репозиторий проектов
Это клон репозитория платформы, в котором хранится весь код проекта.Инициируйте его с помощью
$ git clone --bare /path/to/platform
Локальное хранилище разработчика
Инициация
Вы, как разработчик, начинаете с клонирования репозитория проекта.
$ git clone /path/to/project
Внесение изменений в проект
Теперь внесите свои изменения, зафиксируйте их и отправьте в проекты с открытым репо.
$ editor some-file
$ git add -p some-file
$ git commit
$ git push
Извлеките изменения, сделанные другими разработчиками, в проекты с открытым репо с помощьюиспользование git pull
.
Внесение изменений в платформу
Поскольку вы также хотите внести изменения в саму платформу, вам также необходим способ получить доступ к репозиторию платформы.Таким образом, вы добавляете его в качестве удаленного репо в локальное репо:
$ git remote add platform /path/to/platform
$ git fetch platform
Как вы теперь можете видеть с git branch -a
, ваше локальное репо знает о платформе.Теперь вы хотите внести некоторые изменения в платформу.Сначала вы создаете локальную ветку central , которая является клоном главной ветки репозитория платформы:
$ git checkout -b central platform/master
Вы всегда можете проверить, на какой ветке вы находитесь, используя git branch
или git status
.Теперь вы вносите свои изменения и фиксируете их (в центральном, где вы находитесь).Поскольку central подключен к platform / master (checkout cat .git/config
), вы можете отправить свои изменения в репозиторий платформы, просто используя git push
.Также git pull
работает без каких-либо других аргументов.
Используйте git checkout master
и git checkout central
для переключения между ветками.
Получите новую версию платформы в свой проект
Примечание: Вы должны выполнить работу из предыдущего раздела .
Сначала перейдите в ветку вашей платформы и добавьте новую версию платформы:
$ git checkout central
$ git pull
Теперь вернитесь в ветку вашего проекта и объедините изменения, сделанные на платформе, с веткой вашего проекта.
$ git checkout master
$ git merge central
Если возникает конфликт, происходит что-то подобное:
$ git merge central
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.
Откройте файлы с конфликтами, разрешите их, добавьте их в промежуточную область и подтвердите слияние:
$ editor index.html
$ git add index.html
$ git commit
Теперь внесите изменения в репозиторий проекта:
$ git push
Подробнее о конфликтах слияния: Pro Git: базовые конфликты слияния
Если вы не хотите менять репозиторий платформ, но объедините изменения оттуда в свой проект, используйте
$ git remote add platform /path/to/platform
$ git fetch platform
$ git merge platform/master
git remote add
нужна только пихтав первый раз ты сливаешься.Два других всегда требуются.
Часть о слиянии основана на Pro Git Book , который лицензирован по лицензии cc-by-sa.Все остальное содержание этого поста может считаться общественным достоянием.