Home > настройка, программирование > Subrepos/Субрепозитории в Mercurial

Subrepos/Субрепозитории в Mercurial

Бывает, что вы используете в ваших проектах несколько тулкитов, фреймворков и тд. И держать копии репозиториев фреймворков в репозитории некрасиво да и мониторить изменения сложно. Для решения этой проблемы в Mercurial есть механизм Subrepos.

Дано

У нас есть проект. Большой и жирный. Там используется фреймворк для PHP, для Javascript и для CSS.  Это всё имеется у вас и в других проектах и переодически кто-то да что-то вносит в них. То есть, у нас есть такая структура проектов:

  • one_project
    • Zend_Framawork
    • My_CSS
    • JQuery
  • second_project
    • JQuery
    • Zend_Framawork
  • Zend_Framawork
  • JQuery
  • My_CSS

И вот в проекте one_project изменили что-то в My_CSS. Что делать? Есть вариант вручную изменять и во втором проекте. Но это не выход, да и проблема ещё та.

Что делать?

А давайте создадим репозитории для наших библиотек и  подключим их к основным проектам. Будем иметь список репозиториев:

  • one_project
  • second_project
  • Zend_Framawork
  • JQuery
  • My_CSS

Теперь каждая библиотека отдельная и можно вносить изменения и получать их по отдельности. Можно это делать руками и даная структура позволяет этим заниматся, но мы же упрощаем себе жизнь, а не запутываем себя и разработчиков!

Создаём субрепозитории

Пускай у нас уже есть развёрнутый репозиторий.

wert2all@linux:~/phpProjects/featerequest> hg status
M classes/Ext/Controller/Auth.php
M classes/Ext/Controller/Index.php
M conf/config.php
M static/css/reset.css
! templates/default/index/index.html
! templates/default/main.html
? classes/Smarty/.DS_Store
? templates/default/index/index.tpl
? templates/default/main.tpl
wert2all@linux:~/phpProjects/featerequest>

Создадим ещё один репозиторий:

wert2all@linux:~/phpProjects/featerequest> hg init library
wert2all@linux:~/phpProjects/featerequest> ls
classes  featerequest.kdev4  _index.html  info.php  library  templates
conf     files               index.php    init.php  static   tmp
wert2all@linux:~/phpProjects/featerequest>

Появился каталог library в который мы вкинем наш репозиторий с нужным фреймворком. Все репозитории у меня хранятся на другом сервере ивот их структура:

repo@linux:~> ls -l
загалом 20768
drwxr-xr-x  3 repo nobody    4096 вер  4 16:47 featuresrequest
drwxr-xr-x  8 repo nobody    4096 сер  3 12:52 W_library
repo@linux:~>

featuresrequest – это мой проект. W_library – набор библиотек, тоесть субрепозиторий. Вот его мне и надо подключить в library.

Приступим:

wert2all@linux:~/phpProjects/featerequest> echo library=../W_library > .hgsub
wert2all@linux:~/phpProjects/featerequest> cat .hgsub
library=../W_library
wert2all@linux:~/phpProjects/featerequest>

Мы сдали файл .hgsub и указали где лежит наш субрепозиторий.

Теперь создадим файл hgrc в нашем субрепозитории, чтобы Mercurial знал откуда его получать:

wert2all@linux:~/phpProjects/featerequest> vi library/.hg/hgrc

[paths]
default = ssh://repo@localhost//home/repo/W_library

Я указал свой путь к репозитарию. Теперь можно получить этот субрепозитарий:

wert2all@linux:~/phpProjects/featerequest> cd library/
wert2all@linux:~/phpProjects/featerequest/library> hg pull
Password:
pulling from ssh://repo@localhost//home/repo/W_library
requesting all changes
adding changesets
adding manifests
adding file changes
added 3 changesets with 2964 changes to 2876 files
(run 'hg update' to get a working copy)
wert2all@linux:~/phpProjects/featerequest/library> hg update
2876 files updated, 0 files merged, 0 files removed, 0 files unresolved
wert2all@linux:~/phpProjects/featerequest/library>

Теперь можно делать комиты в разне репозитории и пушить на сервер. И никаких копирований.

wert2all@linux:~/phpProjects/featerequest> hg push
Password:
pushing to ssh://repo@localhost//home/repo/featuresrequest
pushing subrepo library to ssh://repo@localhost//home/repo/W_library
Password:
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 88 changes to 88 files
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 13 changesets with 3341 changes to 3130 files
wert2all@linux:~/phpProjects/featerequest>

Почитать

Всёэто я взял с Mercurial Wiki

  1. No comments yet.
  1. No trackbacks yet.