Работа с репозиторием (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 месяцев


Сообщение #21 Neo » 18.06.2012, 19:13

Можно ли вместо Mercurial юзать Git?
Neo
Гость

Сообщение #22 VEG » 18.06.2012, 21:26

Neo,
По крайней мере для Mercurial есть плагин для работы с Git. Скорее всего что-то подобное должно быть и для Git. Только зачем вам это? На мой взгляд Mercurial во многом превосходит Git, и необходимости в последнем нет.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #23 Neo » 19.06.2012, 11:41

У некоторых хостеров установлен Git, но нет Mercurial.
Нужный мне хостер ответил, что может по запросу поставить Mercurial, поэтому вопрос о git отпадает.
Neo
Гость

Сообщение #24 Heroin » 28.08.2012, 22:53

masterhost

Владимир Тетерин Здравствуйте, Иван! Пожалуйста, сформулируйте Ваш вопрос.

Иван Добрый вечер. Я хотел уточнить возможно ли установить Mercurial для прощадки u287718

11:50 pm Владимир Тетерин В рамках виртуального сервере ей не хватит ресурсов.

Только выделенные сервера

* masterhost…service/hosting/vps/unix/
* http://masterhost.ru/service/hardware/rent/

Heroin M
Аватара
Откуда: syzran
Репутация: 39
С нами: 11 лет 11 месяцев

Сообщение #25 VEG » 29.08.2012, 00:20

Heroin, поинтересуйтесь ради интереса, какой это части Mercurial не хватит ресурсов :) Буд-то это тяжёлый инструмент, ну насмешили...
Вообще если у вас есть SSH, по идее вы в каком-то ограниченном виде можете и сами поставить Mercurial. Нужен только Python на хостинге. По крайней мере подобные статьи в интернете встречал. Но сам такого никогда не делал.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #26 Heroin » 29.08.2012, 21:44

Еще пообщался

Станислав ГрызловЗдравствуйте, Иван! Пожалуйста, сформулируйте Ваш вопрос.

Иван Добрый вечер. Я хотел уточнить возможно ли установить Mercurial для прощадки u287718

Станислав ГрызловНет, невозможно.

Иван почему?

Станислав ГрызловВиртуальный хостинг не предоставляет возможности установки собственного ПО на сервер. Для таких целей есть VPS:
masterhost…service/hosting/vps/unix/

Иван просто вчера Владимир Тетерин обмолвился что нельзя из за того что нагрузка на сервер и все такое. Интересно что за нагрузка такая от Mercurial

10:43 pm Станислав ГрызловПо какой причине Владимир пришел к выводу что будет создаваться нагрузка и, тем более, какая именно - я не знаю.
Heroin M
Аватара
Откуда: syzran
Репутация: 39
С нами: 11 лет 11 месяцев

Сообщение #27 VEG » 29.08.2012, 22:47

Heroin, зато на сколько я знаю Мастерхост уже позволяет выбрать сервер с PHP 5.3 :)
Вот nic.ru пока что не шевелится с PHP 5.2 переходить. Однако, у них так организован хостинг, что можно самостоятельно скомпилировать и установить нужную версию PHP как модуль Apache (на других хостингах обычно можно только как CGI, что замедляет работу сайта). Остаётся надеяться, когда наиболее популярные скрипты откажутся от PHP 5.2, хостеры начнут шевелиться, и предоставят пользователям более полный выбор версий PHP. Правда популярные скрипты не отказываются от PHP 5.2 потому что хостеры ленятся обновляться до новых версий PHP. Замкнутый круг, никто не решится действовать первым толком. Вот разработчики phpBB немного порадовали. Решились. Может не передумают :)
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #28 botyk » 01.09.2012, 17:22

Я вобще не понял и кажется трудно. Был бы хорошо если кто нибудь сделал видео мануал или патч обновления типа как здесь: http://bb3x.ru/download

* ПАКЕТ ОБНОВЛЕНИЯ
* ИЗМЕНЁННЫЕ ФАЙЛЫ
* PATCH-ФАЙЛЫ
* ИЗМЕНЕНИЯ КОДА

и потом как в ручную обновить sql?
botyk
Репутация: 38
С нами: 11 лет 6 месяцев

Сообщение #29 NO SWEAR » 01.09.2012, 18:42

botyk:Я вобще не понял и кажется трудно. Был бы хорошо если кто нибудь сделал видео мануал или патч обновления типа как здесь: http://bb3x.ru/download

* ПАКЕТ ОБНОВЛЕНИЯ
* ИЗМЕНЁННЫЕ ФАЙЛЫ
* PATCH-ФАЙЛЫ
* ИЗМЕНЕНИЯ КОДА

и потом как в ручную обновить sql?
botyk, в вашем случае осуществлять переход с версии на версию так как описано здесь в нижней части описания. а насчет обновления баз вручную то при наличии в корне сайта папки "install" из нового дистрибутива, запустите install/database_update.php
NO SWEAR M
Аватара
Репутация: 115
С нами: 11 лет 7 месяцев

Сообщение #30 VEG » 01.09.2012, 20:20

botyk, вы можете не пользоваться репозиторием. Если вы не собираетесь серьёзно переделывать phpBBex, то вам подойдёт и стандартный способ обновления (что по ссылке от NO SWEAR). Он заключается в замене файлов старой версии на файлы новой версии и ручной перенос ваших правок. Количество изменений в каждой новой версии phpBBex настолько велико, что выпускать текстовые инструкции по внесению правок нецелесообразно — вам на самом деле будет быстрее повторить свои правки, чем вручную и безошибочно внести все изменения phpBBex. Для примера я выкладывал файл с изменениями между 1.3.0 и 1.4.0 — там более 6000 строк мелких правок получилось. Если же у вас слишком много модификаций, то для экономии времени всё-таки стоит немного изучить Mercurial. То что вы будете вручную делать 10 часов, он сделает за 5 минут. И это не преувеличение :) Для примера наш пользователь shvager написал пошаговую инструкцию по обновлению через Mercurial для новичков.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #31 botyk » 01.09.2012, 22:49

NO SWEAR, VEG,
Спасибо вам!

у меня только 1 мода Полнофункциональный спойлер для phpBBex от Bricklayer и все.
а Mercurial хостинг не позволяет!
botyk
Репутация: 38
С нами: 11 лет 6 месяцев

Сообщение #32 VEG » 01.09.2012, 23:18

botyk:а Mercurial хостинг не позволяет!
На хостинге Mercurial не обязателен. Вы можете всё делать на локалке и потом результат выливать на хостинг. :)
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Игнорирование папок в репозитории

Сообщение #33 Алексей » 17.09.2012, 09:24

Какие папки и файлы в репозитории форума нужно игнорировать, например, папку cache чтобы не отслеживались изменения в них? Как это лучше сделать c TortoiseHg?
Алексей
Гость

Сообщение #34 VEG » 17.09.2012, 11:03

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

Сообщение #35 Алексей » 17.09.2012, 18:44

VEG, большое спасибо за поддержку.
Ещё один вопрос:

1 вариант:
У меня был форум phpBB v3.0.11, установил по вашей инструкции phpBBex v1.0.4, сконвертировав имеющуюся базу для phpBBex, установил mChat от AllCity, теперь я хотел бы отслеживать изменения с репозитория phpBBex (у меня локальная папка форума Z:\home\phpbb.311\www).
Команда
Код: Выделить всё
hg clone https://code.google.com/p/phpbbex/ Z:\home\phpbbex.311\www
выдает ошибку, что в папке есть файлы.
Команда
Код: Выделить всё
hg pull https://code.google.com/p/phpbbex/
в папке Z:\home\phpbbex.311\www выдает ошибку repository is unrelated?

Или правильнее проделать другую последовательность:
2 вариант:
1. Клонировать репозиторий в пустую папку, например,
Код: Выделить всё
hg clone https://code.google.com/p/phpbbex/ Z:\home\phpbbex.104\www
2. Создать свою ветку
Код: Выделить всё
hg branch my
3. В папку Z:\home\phpbbex.104\www скопировать файл config.php и папку images из папки форума phpBB v3.0.11 (Z:\home\phpbb.311\www), базы уже сконвертированы в phpbbex.
4. Установить чат и проделать другие изменения в Z:\home\phpbbex.104\www.
5. Применить изменения
Код: Выделить всё
hg add
hg commit -u --имя
6. Затем отслеживать изменения с репозитория phpBBex с помощью команды
Код: Выделить всё
hg pull https://code.google.com/p/phpbbex/

По второму варианту вроде все получилось, но правильно ли я действую? Почему 1 вариант не срабатывает?
Алексей
Гость

Сообщение #36 VEG » 17.09.2012, 18:56

Алексей, первый вариант совершенно некорректен, потому что Mercurial не может знать, корректные ли файлы у вас в том каталоге, и подойдут ли они к репозиторию. Это нормально, потому что структура форума в репозитории и в архиве несколько отличается (это описано в замечаниях в первом сообщении). То есть для установки форума из репозитория архив не нужно вообще скачивать, нужно просто клонировать репозиторий до нужной версии в пустой каталог. И да, на данный момент последняя версия phpBBex — 1.4.0, а не 1.0.4.
Код: Выделить всё
hg clone -r v1.4.0 https://code.google.com/p/phpbbex/ forum

Второй вариант корректен и наиболее профессионален, поскольку вы собственные изменения тоже держите под управлением Mercurial. Но при таком варианте вам нужно будет немножко больше разобраться с Mercurial и для объединения изменений использовать «hg merge default» вместо «hg update».

Самый простой вариант — это сделать клон репозитория, но не создавать ветки и не коммитить свои изменения, а хранить все ваши правки в текущем рабочем каталоге и обновлять их при помощи простого «hg update» (после «hg pull»). Этот вариант проще, но если у вас много правок и вы хотите удобно отслеживать все свои изменения, то лучше конечно вариант со своей веткой, о котором вы писали.

Чтобы понять какой вариант для вас лучше — проще всего попробовать оба :) Я на сайтах, где нужно сделать всего несколько мелких правок, пользуюсь самым простым вариантом без создания отдельной ветки. Если же что-то значительное (например, версия с галереей) — создаю отдельную ветку и работаю в ней, периодически объединяя изменения с основной веткой.

Добавлено спустя 1 минуту 43 секунды:
Алексей:hg commit -u --имя
Вы можете задать имя по умолчанию и множество другого в настройках TortoiseHg (чтобы каждый раз не писать то же самое).
Алексей:hg pull https://code.google.com/p/phpbbex/
Если вы сделали клон из этого репозитория, при получении изменений не нужно каждый раз указывать адрес — он будет использоватся автоматически.
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #37 Алексей » 18.09.2012, 13:22

VEG, спасибо. Всё понял.

Если кому надо ссылки на книги и документацию по Mercurial на русском:
http://bacher09.org/2012/02/hgbook-in-russian/
http://mkharitonov.net/hg/help/ru/
http://mercurial.ru/
Алексей M
Аватара
Репутация: 19
С нами: 11 лет 6 месяцев

Сообщение #38 Алексей » 19.09.2012, 12:52

У меня KDiff3 который входит в комплект TortoiseHG выдает ошибки при открытии кофликтующих файлов при слиянии (после команды hg merge).
Проблему решил установкой KDiff3 c первоисточника http://sourceforge.net/projects/kdiff3/files/, русский язык туда уже входит.
Последний раз редактировалось Алексей 19.09.2012, 13:03, всего редактировалось 1 раз.
Алексей M
Аватара
Репутация: 19
С нами: 11 лет 6 месяцев

Сообщение #39 VEG » 19.09.2012, 12:53

Алексей, странно, я с такими проблемами не сталкивался :think:
VEG M
Автор темы, Администратор
Аватара
Откуда: Finland
Репутация: 1653
С нами: 11 лет 11 месяцев

Сообщение #40 factotum » 19.09.2012, 13:31

было бы приятно увидеть краткое руководство как склонировать последние изменения / gallery.

Добавлено спустя 1 час 53 минуты 7 секунд:
разобрался через GUI :)
factotum
Откуда: Люксембург
Репутация: 234
С нами: 11 лет 11 месяцев

Пред.След.

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



cron