Работа с репозиторием (Mercurial на Google Code)

Список разделов phpBBex 1.x (поддерживается) Мастерская 1.x

Описание: Только готовые решения! Статьи, заметки, моды и другие полезности для phpBBex 1.x и phpBB 3.0.x.
Модератор: Поддержка

Сообщение #1 VEG » 22.04.2012, 18:11

Разработка phpBBex ведётся под управлением системы управления версиями Mercurial. Если вы разберётесь с ним, то получите удобный и быстрый инструмент для обновления вашего форума. Mercurial может сам загружать все самые свежие изменения в phpBBex прямо на ваш хостинг (через SSH), автоматически объединяя (если это возможно) ваши правки со свежим кодом phpBBex. Это намного удобнее, чем самостоятельно загружать все файлы и вручную переносить свои правки на новые версии. Mercurial стоит того, чтобы потратить время на его изучение.

Обратите внимание, что для использования Mercurial на вашем хостинге, он должен быть там установлен. Проверить, установлен ли у вас Mercurial очень просто — нужно подключиться по SSH и ввести команду hg version. Если вы увидите не ошибку, а информацию о версии — значит всё установлено. Иначе обратитесь в техническую поддержку хостинга, чтобы они вам установили Mercurial — как правило, хостеры без проблем соглашаются на это. На некоторых хостингах вы можете установить Mercurial и самостоятельно, но проще всё-таки через тех-поддержку, не зря же вы им деньги платите.

Хостинги, на которых был замечен предустановленный Mercurial:
  • nic.ru (на 201 тарифе)

Рассмотрим работу на вашем локальном компьютере. Для начала работы скачайте и установите подходящую версию TortoiseHg. Работать с Mercurial можно как при помощи GUI, так и при помощи командной строки. Управлять репозиторием значительно проще из командной строки, поэтому здесь будут примеры именно для неё.

Создать каталог forum с локальной копией репозитория phpBBex:
Код: Выделить всё
hg clone https://code.google.com/p/phpbbex/ forum
Загрузить обновления в ваш локальный репозиторий (выполнять в каталоге с форумом):
Код: Выделить всё
hg pull
Объединить все ваши правки с изменениями из последней версии phpBBex в репозитории (выполнять в каталоге с форумом):
Код: Выделить всё
hg update
Для обновления до конкретной стабильной версии команда выглядит так:
Код: Выделить всё
hg update v1.3.0

При обновлении могут возникнуть конфликты, если вы исправляли тот же код, который исправлен и в новой версии phpBBex. Если у вас не слишком много правок по отношению к phpBBex, то вероятность конфликта невелика. С установленным TortoiseHg в случае конфликта выскочит графическое окошко для разрешения конфликта (там будет код оригинала, ваш код, код из нового phpBBex), где вы сможете объединить ваш код и код из нового phpBBex.
Без TortoiseHg команда hg update просто отрапортует, что «n files unresolved» с n больше нуля (читайте что пишут эти команды), а перед этим укажет в каких файлах проблемы. Внутри тех файлов проблемные участки будут помечены знаками <<< (поиском по файлу найдёте), и будет вставлен как ваш, так и код из нового phpBBex. Вы должны объединить этот участок и сохранить.

Чтобы разобраться с Mercurial, рекомендуем серию статей о Mercurial для новичков: Hg Init. Скорее всего, когда вы начнёте пользоваться Mercurial, не будете понимать, как вы жили без него раньше :)

Пример работы

1. В Total Commander заходим в каталог, где нужно будет создать каталог с форумом
2. Запускаем консоль в текущем каталоге (внизу есть поле для ввода команд — пишем cmd и жмём enter)
3. Скачиваем phpBBex v1.2.0 в подкаталог forum командой:
Код: Выделить всё
hg clone -r v1.2.0 https://code.google.com/p/phpbbex/ forum
4. Закрываем консоль. У нас появился каталог forum с файлами phpBBex версии 1.2.0
5. Изменяем что-нибудь (например, в шаблоне)
6. В каталоге forum запускаем cmd
7. Скачиваем последние изменения (рабочий каталог не изменится, они закачаются в каталог .hg)
Код: Выделить всё
hg pull
8. Обновляем код в рабочем каталоге до версии 1.3.0
Код: Выделить всё
hg update v1.3.0
В результате у вас должен получиться phpBBex версии 1.3.0, но с вашими правками.

Замечания касательно репозитория phpBBex

1. В репозитории каталог install называется install_forum. Это сделано для того, чтобы вы могли иметь рабочий форум и беспрепятственно обновлять из репозитория инсталляционные файлы. Для установки чистого phpBBex переименуйте install_forum в install. После установки переименуйте этот каталог обратно в install_forum.
2. В репозитории вы найдёте файлы стиля subsilver2. Это не рабочий стиль. Не устанавливайте его в админке. Удалять эти файлы также не стоит — в будущих версиях phpBBex, возможно, subsilver2 станет вторым поддерживаемым стилем. Они понадобятся для корректного обновления файлов.
3. Не стоит удалять какие-то файлы из стандартного репозитория только потому, что они вам не нравятся (например, каталог docs). Это может вызвать определённые трудности при обновлении. Хотя на самом деле любые удалённые файлы можно легко вернуть командой hg revert :)
4. Все файлы, которые напрямую не относятся к скриптам (дампы, бэкапы, ваши временные файлы, архивы модов и т.д.), необходимо хранить в подкаталоге work — этот каталог игнорируется системой контроля версий.
5. Учтите, что Mercurial обновляет только код. При изменениях в базе вы должны самостоятельно обновить свою копию. Если вы пользуетесь стабильными версиями, достаточно при переходе на очередную стабильную версию выполнить SQL код из инструкции по обновлению. Если же вы обновляетесь и до промежуточных версий, вы должны отслеживать изменения в схеме базы самостоятельно. При помощи Hg Workbench вы сможете посмотреть все изменения в файле ./install_forum/phpbbex.sql — новые инструкции из этого файла и необходимо выполнять.

Полезные команды для получения различий в коде между версиями

Получение изменений в стиле между версиями 1.5.3 и 1.6.0:
Код: Выделить всё
hg diff -r v1.5.3 -r v1.6.0 ./styles/prosilver/ > prosilver.diff
Получение изменений в стиле между версией 1.6.0 и последней в репозитории:
Код: Выделить всё
hg diff -r v1.6.0 ./styles/prosilver/ > prosilver.diff
Получение изменений в русскоязычных языковых файлах между версиями 1.5.3 и 1.6.0:
Код: Выделить всё
hg diff -r v1.5.3 -r v1.6.0 ./language/ru/ > langru.diff
Получение изменений в русскоязычных языковых файлах между версией 1.6.0 и последней в репозитории:
Код: Выделить всё
hg diff -r v1.6.0 ./language/ru/ > langru.diff

Все эти команды выводят данные в diff файле унифицированного формата.
Подробное описание унифицированного формата diff
Унифицированный формат вывода начинается с двухстрочного заголовка, который выглядит так:
--- FROM-FILE FROM-FILE-MODIFICATION-TIME
+++ TO-FILE TO-FILE-MODIFICATION-TIME


Потом следует один или несколько ханков различий; каждый ханк показывает одно место, где файлы различаются. Унифицированный формат ханка выглядит так:
@@ FROM-FILE-RANGE TO-FILE-RANGE @@
LINE-FROM-EITHER-FILE
LINE-FROM-EITHER-FILE...


Строки общие для обоих файлов начинаются с символа пробела. Различающиеся строки имеют один из следующих символов-индикаторов в левой колонке:
+ — в этом месте строка была прибавлена к первому файлу.
- — в этом месте строка была удалена из первого файла.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев


Сообщение #41 shrby » 28.09.2012, 20:01

Сделал запрос хостеру, установили на хостинг доступ по SSH, подключился, начал вводить команды, которые указаны в этой теме, в итоге:
Изображение
То есть я правильно понимаю, что на хостинге не установлен Mercurial? :help:
shrby M
Откуда: Беларусь
Репутация: 0
С нами: 11 лет 9 месяцев

Сообщение #42 VEG » 28.09.2012, 20:09

shrby, верно. Можете попробовать попросить хостера установить Mercurial, обоснуйте зачем он нужен. Если повезёт, поставит. Если же нет, вы можете при желании работать с репозиторием на локальной машине, а конечный вариант файлов вы сможете закидывать в архиве и одной командой (unzip) извлекать содержимое на сервере. Тоже достаточно быстрый вариант, хотя и не такой удобный.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #43 shrby » 28.09.2012, 20:13

VEG:Можете попробовать попросить хостера установить Mercurial, обоснуйте зачем он нужен. Если повезёт, поставит.
Уже отписал, посмотрим, что скажет :think:
shrby M
Откуда: Беларусь
Репутация: 0
С нами: 11 лет 9 месяцев

Сообщение #44 factotum » 28.09.2012, 20:36

VEG:Тоже достаточно быстрый вариант, хотя и не такой удобный.
еще исключенныe файлы удалять вручную :(
factotum
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Сообщение #45 VEG » 28.09.2012, 21:17

factotum, перед заливкой вы можете удалять все каталоги без пользовательских файлов. Там всего несколько каталогов нужно сохранить: каталог с файлами и каталог с аватарами (если я не ошибаюсь :) ).
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #46 VEG » 02.10.2012, 21:30

Уточнение насчёт обновления базы

Учтите, что Mercurial обновляет только код. При изменениях в базе вы должны самостоятельно обновить свою копию. Если вы пользуетесь стабильными версиями, достаточно при переходе на очередную стабильную версию выполнить SQL код из инструкции по обновлению. Если же вы обновляетесь и до промежуточных версий, вы должны отслеживать изменения в схеме базы самостоятельно. При помощи Hg Workbench вы сможете посмотреть все изменения в файле ./install_forum/phpbbex.sql — новые инструкции из этого файла и необходимо выполнять.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #47 daftMan » 28.11.2012, 16:09

Ну и инструкция по установке Меркулы для пользователей Макинтоша. Может кому полезным будет, хотя совершенно никаких сложностей тут нет :-)

1) Скачиваем последний бинарник под конкретную версию Os X с сайта (на данный момент есть версии для 10.6/10.7/10.8)
http://mercurial.berkwood.com
2) Распаковываем и устанавливаем его
3) Открываем «Терминал» (ака консоль), переходим в необходимый каталог. У меня стоит МАМП, форум буду тестировать на нём:
cd /Applications/MAMP/htdocs
4) Создаём каталог, и загружаем локальную копию из репозитария одной командой:
hg clone https://code.google.com/p/phpbbex/ forum

Остальное всё точно так-же как в статье. И да, работа идёт исключительно в консоли.
daftMan
Репутация: 17
С нами: 11 лет 4 месяца

Сообщение #48 Валентин » 28.12.2012, 13:08

Помогите разобраться, как правильно реализовать 3-х ходовку:
1. Создаю локальную копию репозитария:
Код: Выделить всё
hg clone https://code.google.com/p/phpbbex/ Forum_Rep
2. В папке Forum_Rep удаляю все, кроме папки .hg и файлов .hgignore и .hgtags (рабочую папку и файлы самого TortoiseHg) и копирую в нее все из рабочий папки /forum со своего хостинга. По команде:
Код: Выделить всё
hg status
вижу, где отличия от репозитария.
3. Делаю команду:
Код: Выделить всё
hg add
для добавления изменений в локальный репозитарий
4. Делаю команду
Код: Выделить всё
hg commit
выскакивает окно блокнота, куда вписываю название новой версии, закрываю блокнот, подтверждаю изменения и новая версия записывается.
А что дальше?
По-идее периодически делаю команду:
hg pull
которая сливает с главного репозитария изменения в локальный, если изменения были, то дальше непонятно, т.к. есть три команды:
hg update
которая применит эти изменения для файлов локального репозитария (это я правильно понимаю?);
hg merge
которая сливает изменения с разных источников:
hg commit
которая как выше было описано создает новую версию на основе изменений.
Что, в каком порядке и как правильно применять?
Как в конце сделать zip архив, куда войдут все измененные файлы с путями для заливки на сервер?

Добавлено спустя 3 минуты 51 секунду:
Ну и еще вопрос, как дальше быть с изменениями в реальном форуме, как затягивать эти изменеия в локальный репозитарий?
Валентин
Гость

Сообщение #49 VEG » 28.12.2012, 17:10

Валентин, вам проще не делать своих коммитов вообще. То есть не нужно делать hg add и hg commit. Просто работайте в текущем рабочем каталоге. Для загрузки обновлений используется hg pull, а для объединения изменений новой версии phpBBex с вашей версией выполняйте команду hg update (вместо hg merge).
Вариант с коммитами подходит для более серьёзной разработки. Как правило, для небольших форумов в этом нет необходимости.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #50 Валентин » 05.01.2013, 01:36

Т.е. самая простая схема работы выглядит так:
1. Создаю локальную копию репозитария:
Код: Выделить всё
hg clone https://code.google.com/p/phpbbex/ Forum_Rep
2. В папке Forum_Rep удаляю все, кроме папки .hg и файлов .hgignore и .hgtags (рабочую папку и файлы самого TortoiseHg) и копирую в нее все из рабочий папки /forum со своего хостинга. По команде:
Код: Выделить всё
hg status
вижу, где отличия от репозитария.
3. Периодически делаю команду:
Код: Выделить всё
hg pull
которая сливает с главного репозитария изменения в локальный, и, если изменения были, то дальше выполняю команду:
Код: Выделить всё
hg update
которая объединит изменения (мои и с глобального репозитария) для файлов локального репозитария.

Остались вопросы:
1. Как в конце сделать zip архив, куда войдут все измененные файлы с путями для заливки на хостинг?
2. Как быть с изменениями в реальном форуме (например при работе AutoMOD), как, когда и в каком порядке затягивать эти изменения в локальный репозитарий?
Валентин
Гость

Сообщение #51 VEG » 05.01.2013, 16:01

Валентин:Т.е. самая простая схема работы выглядит так:
Верно.
Валентин:Остались вопросы:
1. Как в конце сделать zip архив, куда войдут все измененные файлы с путями для заливки на хостинг?
2. Как быть с изменениями в реальном форуме (например при работе AutoMOD), как, когда и в каком порядке затягивать эти изменения в локальный репозитарий?
Это не в компетенции Mercurial. Проще всего вы можете это сделать каким-нибудь софтом для синхронизации локального каталога с каталогом на сервере через FTP. Даже в Total Commander есть подобная функциональность. Либо же можно архивировать полную копию всех файлов и извлекать содержимое архива на сервере (архив будет всё равно небольшим, поэтому не критично, что там будут включены не изменённые файлы).
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #52 alex88 » 05.02.2013, 14:46

Вопрос такой. Я все настроил, все супер, внес изменения в пару файлов, теперь на них красный кружок с воскл. знаком, я сделал в cmd hg pull, hg update, но значек на файлах не изменился. Я так понимаю нужна синхронизация или что? Подскажите что сделать? Использую open-server на локальном пк
alex88
Репутация: 6
С нами: 11 лет 6 месяцев

Сообщение #53 VEG » 05.02.2013, 15:19

alex88:теперь на них красный кружок с воскл. знаком
Это значит, что в этих файлах есть ваши правки и это не оригиналы из репозитория. Так и должно быть.

Добавлено спустя 50 секунд:
Для того, чтобы ваши изменения не выделялись красным, нужно научиться «коммитить» ваши изменения. Но это несколько сложнее, чем просто работа в рабочем каталоге.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #54 alex88 » 05.02.2013, 19:39

VEG, благодарю.
Ребята, кто тоже только начал работать с Mercurical, вот как увидеть свои правки
alex88
Репутация: 6
С нами: 11 лет 6 месяцев

Сообщение #55 VEG » 05.02.2013, 22:14

alex88, вы можете все используемые часто функции вынести на уровень вверх. Например, вот моё меню:
Изображение
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #56 alex88 » 11.02.2013, 20:47

привет, я только что обновился, скопировал код который надо выполнить в моей базе из \install_forum\phpbbex.sql и при выполнении получил такую ошибку:
Код: Выделить всё
SQL-запрос:

+ REPLACE INTO phpbb_config( config_name, config_value )
VALUES (

'style_back_to_top',  '1'
);

Ответ MySQL:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '+REPLACE INTO phpbb_config (config_name, config_value) VALUES ('style_back_to_to' at line 1
alex88
Репутация: 6
С нами: 11 лет 6 месяцев

Сообщение #57 VEG » 11.02.2013, 20:49

alex88, вы забыли удалить «+» из diff файла. «+» обозначает добавленную строку, «-» — удалённую.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #58 alex88 » 11.02.2013, 20:50

а то есть плюсы и минусы копировать не надо?
alex88
Репутация: 6
С нами: 11 лет 6 месяцев

Сообщение #59 VEG » 11.02.2013, 20:54

alex88:а то есть плюсы и минусы копировать не надо?
Строки с минусами вообще не выполняйте. Если я их удалил из файла обновления, значит они уже устарели и их не нужно выполнять :) Инструкции с «+» в самом начале строки (они не просто так отображаются зелёным) обычно нужно выполнить (обязательно, если там описаны изменения в структуре базы). Вообще в последних изменениях эти инструкции не обязательны — они всего лишь задают настройки по умолчанию для новых опций. Вы можете просто зайти в админку и выбрать там сразу подходящие значения :)
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #60 alex88 » 11.02.2013, 20:58

понял, значит выполнять нужно только зеленые)
alex88
Репутация: 6
С нами: 11 лет 6 месяцев

Пред.След.

Вернуться в Мастерская 1.x