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

Board index phpBBex 1.x Мастерская

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

Post #1by 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:
Code: Select all
hg clone https://code.google.com/p/phpbbex/ forum
Загрузить обновления в ваш локальный репозиторий (выполнять в каталоге с форумом):
Code: Select all
hg pull
Объединить все ваши правки с изменениями из последней версии phpBBex в репозитории (выполнять в каталоге с форумом):
Code: Select all
hg update
Для обновления до конкретной стабильной версии команда выглядит так:
Code: Select all
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 командой:
Code: Select all
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)
Code: Select all
hg pull
8. Обновляем код в рабочем каталоге до версии 1.3.0
Code: Select all
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:
Code: Select all
hg diff -r v1.5.3 -r v1.6.0 ./styles/prosilver/ > prosilver.diff
Получение изменений в стиле между версией 1.6.0 и последней в репозитории:
Code: Select all
hg diff -r v1.6.0 ./styles/prosilver/ > prosilver.diff
Получение изменений в русскоязычных языковых файлах между версиями 1.5.3 и 1.6.0:
Code: Select all
hg diff -r v1.5.3 -r v1.6.0 ./language/ru/ > langru.diff
Получение изменений в русскоязычных языковых файлах между версией 1.6.0 и последней в репозитории:
Code: Select all
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
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months


Post #41by shrby » 28.09.2012, 20:01

Сделал запрос хостеру, установили на хостинг доступ по SSH, подключился, начал вводить команды, которые указаны в этой теме, в итоге:
Image
То есть я правильно понимаю, что на хостинге не установлен Mercurial? :help:
shrby M
Новичок
Age: 27
Location: Беларусь
Reputation: 0
With us: 5 years 6 months

Post #42by VEG » 28.09.2012, 20:09

shrby, верно. Можете попробовать попросить хостера установить Mercurial, обоснуйте зачем он нужен. Если повезёт, поставит. Если же нет, вы можете при желании работать с репозиторием на локальной машине, а конечный вариант файлов вы сможете закидывать в архиве и одной командой (unzip) извлекать содержимое на сервере. Тоже достаточно быстрый вариант, хотя и не такой удобный.
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #43by shrby » 28.09.2012, 20:13

VEG wrote:Можете попробовать попросить хостера установить Mercurial, обоснуйте зачем он нужен. Если повезёт, поставит.
Уже отписал, посмотрим, что скажет :think:
shrby M
Новичок
Age: 27
Location: Беларусь
Reputation: 0
With us: 5 years 6 months

Post #44by factotum » 28.09.2012, 20:36

VEG wrote:Тоже достаточно быстрый вариант, хотя и не такой удобный.
еще исключенныe файлы удалять вручную :(
Если "улучшение" стало "граблями" - Вы его переросли
factotum
Гуру
Location: Люксембург
Reputation: 232
With us: 5 years 8 months

Post #45by VEG » 28.09.2012, 21:17

factotum, перед заливкой вы можете удалять все каталоги без пользовательских файлов. Там всего несколько каталогов нужно сохранить: каталог с файлами и каталог с аватарами (если я не ошибаюсь :) ).
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #46by VEG » 02.10.2012, 21:30

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

Учтите, что Mercurial обновляет только код. При изменениях в базе вы должны самостоятельно обновить свою копию. Если вы пользуетесь стабильными версиями, достаточно при переходе на очередную стабильную версию выполнить SQL код из инструкции по обновлению. Если же вы обновляетесь и до промежуточных версий, вы должны отслеживать изменения в схеме базы самостоятельно. При помощи Hg Workbench вы сможете посмотреть все изменения в файле ./install_forum/phpbbex.sql — новые инструкции из этого файла и необходимо выполнять.
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #47by 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
Новичок
Reputation: 17
With us: 5 years 1 month

Post #48by Валентин » 28.12.2012, 13:08

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

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

Post #49by VEG » 28.12.2012, 17:10

Валентин, вам проще не делать своих коммитов вообще. То есть не нужно делать hg add и hg commit. Просто работайте в текущем рабочем каталоге. Для загрузки обновлений используется hg pull, а для объединения изменений новой версии phpBBex с вашей версией выполняйте команду hg update (вместо hg merge).
Вариант с коммитами подходит для более серьёзной разработки. Как правило, для небольших форумов в этом нет необходимости.
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #50by Валентин » 05.01.2013, 01:36

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

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

Post #51by VEG » 05.01.2013, 16:01

Валентин wrote:Т.е. самая простая схема работы выглядит так:
Верно.
Валентин wrote:Остались вопросы:
1. Как в конце сделать zip архив, куда войдут все измененные файлы с путями для заливки на хостинг?
2. Как быть с изменениями в реальном форуме (например при работе AutoMOD), как, когда и в каком порядке затягивать эти изменения в локальный репозитарий?
Это не в компетенции Mercurial. Проще всего вы можете это сделать каким-нибудь софтом для синхронизации локального каталога с каталогом на сервере через FTP. Даже в Total Commander есть подобная функциональность. Либо же можно архивировать полную копию всех файлов и извлекать содержимое архива на сервере (архив будет всё равно небольшим, поэтому не критично, что там будут включены не изменённые файлы).
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #52by alex88 » 05.02.2013, 14:46

Вопрос такой. Я все настроил, все супер, внес изменения в пару файлов, теперь на них красный кружок с воскл. знаком, я сделал в cmd hg pull, hg update, но значек на файлах не изменился. Я так понимаю нужна синхронизация или что? Подскажите что сделать? Использую open-server на локальном пк
alex88
Новичок
Reputation: 6
With us: 5 years 3 months

Post #53by VEG » 05.02.2013, 15:19

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

Добавлено спустя 50 секунд:
Для того, чтобы ваши изменения не выделялись красным, нужно научиться «коммитить» ваши изменения. Но это несколько сложнее, чем просто работа в рабочем каталоге.
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #54by alex88 » 05.02.2013, 19:39

VEG, благодарю.
Ребята, кто тоже только начал работать с Mercurical, вот как увидеть свои правки
alex88
Новичок
Reputation: 6
With us: 5 years 3 months

Post #55by VEG » 05.02.2013, 22:14

alex88, вы можете все используемые часто функции вынести на уровень вверх. Например, вот моё меню:
Image
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #56by alex88 » 11.02.2013, 20:47

привет, я только что обновился, скопировал код который надо выполнить в моей базе из \install_forum\phpbbex.sql и при выполнении получил такую ошибку:
Code: Select all
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
Новичок
Reputation: 6
With us: 5 years 3 months

Post #57by VEG » 11.02.2013, 20:49

alex88, вы забыли удалить «+» из diff файла. «+» обозначает добавленную строку, «-» — удалённую.
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #58by alex88 » 11.02.2013, 20:50

а то есть плюсы и минусы копировать не надо?
alex88
Новичок
Reputation: 6
With us: 5 years 3 months

Post #59by VEG » 11.02.2013, 20:54

alex88 wrote:а то есть плюсы и минусы копировать не надо?
Строки с минусами вообще не выполняйте. Если я их удалил из файла обновления, значит они уже устарели и их не нужно выполнять :) Инструкции с «+» в самом начале строки (они не просто так отображаются зелёным) обычно нужно выполнить (обязательно, если там описаны изменения в структуре базы). Вообще в последних изменениях эти инструкции не обязательны — они всего лишь задают настройки по умолчанию для новых опций. Вы можете просто зайти в админку и выбрать там сразу подходящие значения :)
С наилучшими пожеланиями, Евгений
VEG M
Topic author, Администратор
Avatar
Age: 30
Location: Минск, Беларусь
Reputation: 1574
With us: 5 years 9 months

Post #60by alex88 » 11.02.2013, 20:58

понял, значит выполнять нужно только зеленые)
alex88
Новичок
Reputation: 6
With us: 5 years 3 months

PreviousNext

Return to Мастерская



Who is online (over the past 10 minutes)

Users browsing this forum: 1 guest

cron