powered by simpleCommunicator - 2.0.29     © 2024 Programmizd 02
Map
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Системы контроля версий и Delphi
25 сообщений из 81, страница 1 из 4
Системы контроля версий и Delphi
    #40125182
Наталья87
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Являюсь Delphi - разработчиком.
Слышу уже много раз про такое чудо, как системы контроля версий. Кажется, что это решение всех проблем и серебряная пуля. Но вот почему-то у меня никак с ними не получается и хотелось бы понять, что я делаю не так. На данный момент сместо СКВ использую WinMerge - чтобы сравнить разные версии своего приложения.

Как мне поможет СКВ - если:

1) Куски кода часто мигрируют между файлами. Например, функция была расположена в одном модуле, перенесла её в другой. Сами модули могут переименовываться и мпенять своё местоположение в структуре каталогов.

2) Файлы проекта часто переименовываются - например, модуль uAddCustomer.pas - переименовано в uAddClient.pas и перемещено из папки
\Units в папку \BonusUnits

3) Переменные периодически переименовываются. Например, в проекте переменная называется ShowHints и присутствует в 220 модулях проекта. Потребовалось переименовать её в ShowHints2 - чтобы проверить и обьработать все куски кода, где она используется. Имя переменной оставлено в итоге ShowHints2. Бывают ситуации (и не так уж редко) - когда подбирается более удачное название переменной - и старая переменная заменяется во всём проекте.

4) Куча справочных и прочих файлов, которые меняются и мешаются при Merge.

5) Правки есть не только в pas-файлах - но и в вордовских/excel-файлах проекта, а также в FDB файлах. Они СКВ никак не отслеживаются.

6) Иногда код из одних файлов (например кеуски кода в Блокноте, которые ранее были в проекте - например, скачаны из Интернета "про запас") перекидывается в pas-файлы, а потом сами файлы Блокнота удаляются, либо модифицируются и переименовываются/меняют своё положение.

и еще куча различных ситуаций - сразу и не перечислишь

В итоге уже через 7 дней после работы с проектом WinMerge показывает кашу и невозможно понять, где именно были сделаны реально важные изменения, а где мелкие правки, какой код, когда и куда был перемещён. Через 30 дней процедура Merge уже становится абсолютно бессмысленной, т. к. может показать, что изменения были, скажем, в 300 файлах.

Но ведь тут пишут, что СКВ реально помогают и решают все проблемы, связанные с отслеживанием измннений в проекте. Но у меня вот не получается. Что я делаю не так?
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125183
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87,

ККК,

Ну или если серьезно, то коммитить надо ежедневно (компилирующийся проект) и после каждых серьезных пертурбаций, а никак не через 7 дней....

И это не только для Дельфи, а везде так
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125191
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87
Что я делаю не так?
Всё, что вы делаете - вы делаете не так. К сожалению.

В вашей ситуации проще всего найти команду, которая уже использует системы контроля версий, и влиться в нее. Вас там всему научат.

Если хотите учиться самостоятельно - возьмите настоящую систему контроля версий, а не то, что вам кажется похожим на нее. Я бы git рекомендовал, он мне больше всего нравится. И документация хорошая, и даже на русский переведена, если это вдруг для вас важно.

Идея контроля версий простая. Вы написали какой-то код, сделали снимок состояния кода - "комит" (кстати, народ, как по-русски правильно - "комит" или "коммит"? ). Потом сделали какие-то изменения, сделали еще один снимок. И так далее. А потом уже с помощью системы контроля версий будете смотреть, что там вообще происходит, как меняется и т. д. К тому же, каждый комит можно (нужно) снабжать комментариями - что и зачем вы поменяли. Можно делать ветвления кода, возвращаться назад и т. д. Это не сложно, просто к этому надо привыкнуть.

Комитить лучше почаще. Не каждые пять минут, конечно, но каждое логически завершенное изменение - имеет смысл. Например, исправили баг - комит. Даже если исправление состоит из одного символа. А если изменение все тянется и тянется и никак не дойдет до логического конца - ну просто раз в какое-то время, раз в день, например.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125195
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
кстати, народ, как по-русски правильно - "комит" или "коммит"?
[За]фиксировать.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125199
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
  • нужно взять не кусок из СКВ а настоящую СКВ
  • например git
  • или Subversion сокращенно SVN
  • тщательно прочитать документацию на эту СКВ
  • потренироваться "на кошках"
При переименовании/перемещении файлов проекта это нужно делать не через Delphi или проводник, а через СКВ. И сразу коммитить, обязательно с комментарием. Если переименовывание/перемещение делать не через СКВ - то там будет видно что старый файл пропал, а новый - появился, и никакой связи между этим нет, т.е. как он назывался ранее - непонятно. Если сделано через СКВ то в истории будет видно что файл именно переименован, и история правок по файлу будет единая.

Я использую Delphi7 и TortoiseSVN - клиент для svn. Для однопользовательской работы он же может сделать локальное хранилище.
Мне потом понадобилась многопользовательская работа - я поставил отдельный сервер Subversion.
Нужно не забывать что само хранилище тоже нужно бэкапить.

У TortoiseSVN есть нормальный перевод интерфейса и документации на русский язык. И не только на русский.
Документацию можно скачать отдельно, в PDF или HTML виде.

https://tortoisesvn.net/support.html
https://tortoisesvn.net/docs/release/TortoiseSVN_ru/index.html

В начале там хорошо описаны основы работы с SVN.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125200
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87

4) Куча справочных и прочих файлов, которые меняются и мешаются при Merge.

Файлы которые взяты извне, и в данном проекте не меняются - обычно нет смысла контролировать их в СКВ. Для этого их можно либо разместить вне папки под контролем СКВ, либо поставить в игнор в СКВ.

Наталья87

5) Правки есть не только в pas-файлах - но и в вордовских/excel-файлах проекта, а также в FDB файлах. Они СКВ никак не отслеживаются.

СКВ предназначены для контроля текстовых файлов. Бинарные тоже может, но только в виде поменялся/не поменялся. Что конкретно в них поменялось - увидеть не получится.

Если "FDB файлах" - это база Firebird, то как правило нужно фиксировать не данные а метаданные.
Можно например сделать экспорт всех метаданных в файл, и система будет смотреть, изменилось ли содержание файла.
Но выгружать нужно всегда в одном и том же формате и одним и тем же инструментом. Если делать это через IBExpert то есть риск что формат поменяется (версии IBExpert выходят довольно часто) и тогда СКВ может не увидеть фактических изменений.

Я изменения в метаданных провожу патчами - sql-файлы с кодом, который вносят изменения в базу. В самой базе фиксируется какой патч был выполнен последним, и ведется контроль что бы по ошибке не были наложены патчи с непоследовательной нумерацией. В итоге - сами файлы-патчи хорошо и сами по себе показывают что поменялось, но благодаря тому что они включаются в коммит, в котором сделаны изменения и в Delphi-коде - хорошо видно что поменяли в базе и в приложении.

Практически все правки в проекте сначала записываю в виде задачи в системе контроля задач, у нас это Redmine.
В коммите пишу номер задачи. В самой задаче пишу номер коммита в SVN (номер ревизии). Номер задачи так же пишу в комментариях в Dekphi-коде, и в комментариях объектов в базе, что бы можно было почитать для чего это сделано, и что было еще сделано по этой задаче.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125208
ShSerge
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья87,

В свое время я пользовался teamsource, потом множеством других.
Давненько это было. Хе-хе.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125222
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks
[li]например git
  • или Subversion сокращенно SVN
На мой взгляд это не слишком удачные экземпляры для изучения. в особенности SVN. GIT по-линусовски переусложнён и требует для освоения определённую базу знаний. По-моему начать стоит с книги по CVS в том числе на русском . И уже после её прочтения браться за GIT. А SVN вообще пропустить как неудачную пародию, которая решает ровно одну проблему за счёт создания толпы других.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125264
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
git весьма прост для изучения и использования, если использовать его не через командную строку, а через какой нибудь приличный GUI. Я например использую GitKraken, он хоть и платный, зато имеет очень низкий порог входа и при этом очень мощный по своему функционалу.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125270
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov
fraks
[li]например git
  • или Subversion сокращенно SVN
На мой взгляд это не слишком удачные экземпляры для изучения. в особенности SVN. GIT по-линусовски переусложнён и требует для освоения определённую базу знаний. По-моему начать стоит с книги по CVS в том числе на русском . И уже после её прочтения браться за GIT. А SVN вообще пропустить как неудачную пародию, которая решает ровно одну проблему за счёт создания толпы других.
Ага. Вот только 99% процентов людей обожающих git и хающих svn не выходят за рамки возможностей svn.

Если у вас одна команда совместно работающая над проектом - лучше брать svn. Намного удобнее и проще со всех точек зрения.

Если у вас несколько независимых команд работают над проектом - берите git. Он такой замороченный не просто чтоб свести своих пользователей с ума.

Если работаешь в одиночку, да без сервера, то можно взять rcs - просто, легко, удобно.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125273
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Если у вас одна команда совместно работающая над проектом - лучше брать svn. Намного удобнее и проще со всех точек зрения.
А можно поконкретнее, чем именно?
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125285
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asutp2
git весьма прост для изучения и использования, если использовать его не через командную строку, а через какой нибудь приличный GUI. Я например использую GitKraken, он хоть и платный, зато имеет очень низкий порог входа и при этом очень мощный по своему функционалу.

Это относится ко всем СКВ. Кстати, полноценных халявных оболочек (не плагинов в IDE) я нашел не так уж и много:
- SourceTree (git + mercurial (HG))
- Tortoise SVN/HG/Git
- древний RapidSVN
- чуть менее древний fuel-scm для Fossil (не пробовал)
asutp2
White Owl
Если у вас одна команда совместно работающая над проектом - лучше брать svn. Намного удобнее и проще со всех точек зрения.
А можно поконкретнее, чем именно?

Нормальной нумерацией коммитов, отсутствием ректальной системы пуллреквестов, простой командной строкой

@White Owl - rcs для топика с дельфями вряд ли подойдет - *nix-only
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125293
Никанор Кузьмич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Ага. Вот только 99% процентов людей обожающих git и хающих svn не выходят за рамки возможностей svn.

Если у вас одна команда совместно работающая над проектом - лучше брать svn. Намного удобнее и проще со всех точек зрения.
Я работал и с тем, и с другим. Мне лично git удобнее. Причем независимо от того, какое количество фич контроля версий мне нужно. Ну и пул-реквесты - как я понимаю, в svn отсутствуют.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125294
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
@White Owl - rcs для топика с дельфями вряд ли подойдет - *nix-only
С чего вдруг "only"? Она и для DOS собиралась и прекрасно работала. Кстати там я с ней и познакомился, хотя в те времена и не понял нафига контролировать версии.
При отсутствии сети и серверов - rcs единственный выбор.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125295
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никанор Кузьмич
White Owl
Ага. Вот только 99% процентов людей обожающих git и хающих svn не выходят за рамки возможностей svn.

Если у вас одна команда совместно работающая над проектом - лучше брать svn. Намного удобнее и проще со всех точек зрения.
Я работал и с тем, и с другим. Мне лично git удобнее. Причем независимо от того, какое количество фич контроля версий мне нужно. Ну и пул-реквесты - как я понимаю, в svn отсутствуют.
Вот это как раз яркий представитель тех самых 99%... "мне удобнее"...
Git в принципе не может быть удобнее человеку. Он может быть удобнее компании-корпорации, но не отдельным разработчикам.

Объясняю на пальцах:
Subversion - это серверная система контроля версий. Не распределенная, а серверная. Тут каждый разработчик является полноценным maintainer'ом. В pull request'ах просто нет нужды.
Репозиторий - один единственный и находится на сервере. Ты хочешь исправить код в паре исходников? Делаешь svn update (получаешь текущую ревизию себе в локальную копию), исправляешь код в той паре исходников, делаешь svn commit. Всё.
Тебе система сама обнаружит что были изменения в каких-то файлах и отошлет их на сервер. И, кстати, не надо делать add каждый {неприличное_слово} раз, как в git...

А вот в git предполагается что ты (человек-developer) делаешь изменения в своем репозитории, потом делаешь этот самый pull request и ждешь когда специальный человек-maintainer проверит твою работу и вытащит из твоего местечкового репозитория в репозиторий выше уровнем, ну или отправит эти изменения обратно на доработку. Это полезно для корпораций и с учетом что ты работаешь в команде отвечающей за малый участок большого проекта.


Повторюсь:
Каждый разработчик может залезть в любой участок проекта? Тогда бери svn.
Хочешь разбить проект на модули и чтоб каждая отдельная команда работала только над своим модулем - бери git.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125299
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Никанор Кузьмич
пропущено...
Я работал и с тем, и с другим. Мне лично git удобнее. Причем независимо от того, какое количество фич контроля версий мне нужно. Ну и пул-реквесты - как я понимаю, в svn отсутствуют.
Вот это как раз яркий представитель тех самых 99%... "мне удобнее"...
Git в принципе не может быть удобнее человеку. Он может быть удобнее компании-корпорации, но не отдельным разработчикам.

Объясняю на пальцах:
Subversion - это серверная система контроля версий. Не распределенная, а серверная. Тут каждый разработчик является полноценным maintainer'ом. В pull request'ах просто нет нужды.
Репозиторий - один единственный и находится на сервере. Ты хочешь исправить код в паре исходников? Делаешь svn update (получаешь текущую ревизию себе в локальную копию), исправляешь код в той паре исходников, делаешь svn commit. Всё.
Тебе система сама обнаружит что были изменения в каких-то файлах и отошлет их на сервер. И, кстати, не надо делать add каждый {неприличное_слово} раз, как в git...

А вот в git предполагается что ты (человек-developer) делаешь изменения в своем репозитории, потом делаешь этот самый pull request и ждешь когда специальный человек-maintainer проверит твою работу и вытащит из твоего местечкового репозитория в репозиторий выше уровнем, ну или отправит эти изменения обратно на доработку. Это полезно для корпораций и с учетом что ты работаешь в команде отвечающей за малый участок большого проекта.


Повторюсь:
Каждый разработчик может залезть в любой участок проекта? Тогда бери svn.
Хочешь разбить проект на модули и чтоб каждая отдельная команда работала только над своим модулем - бери git.
Фигня какая-то. Commit+push - и всё, ничего не надо ждать.
А pull - это как раз аналог svn (cvs) update.

Да, хочу заметить, что (как минимум для винды) у git вполне удобный родной гуи-интерфейс присутствует (уже).
Архи-удобный тем, что ненавязчиво предлагает добавить новые файлы в репозиторий при коммите (не подпадающие под критерий игнорирования). Благодаря чему не надо "не забывать делать add".
Так что даже никакие Tortise не нужны.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125300
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
При отсутствии сети и серверов - rcs единственный выбор.

Почему это?
Например в том же TortoiseSVN в комплекте идет локальный сервер.
С TortoiseGit думаю примерно так же.
Git под винду тоже встречал.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125303
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для SVN есть только один бесплатный GUI клиент, которым в принципе как-то можно пользоваться - TortoiseSVN. Но он работает только под Windows. Для Linux есть RabbitVCS, ещё под Eclipse есть Subversive и Subclipse, но непонятно они ещё сопровождаются или нет. Единственный более-менее приличный клиент под Linux - SmartSVN, но он платный.

Короче, есть большая проблема с GUI. Если TortoiseSVN по какой-то причине не подходит, то либо покупать SmartSVN, либо мучиться с бесплатными и полузаброшенными клиентами.

Вторая большая проблема, что SVN просто капец как тормозит. Для теста запустил команду log на одном из репозиториев - занимает 10-15 секунд. Команда list - 2 секунды. Сравнить допустим две ветки в RabbitVCS/Subversive/Subclipse - наверное полминуты или минуту (отправляется просто гигантское количество запросов в репозиторий). Можно запускать сравнение и идти кофе заваривать. Но это полбеды, эта штука покажет список измененных файлов, а потом ещё чтобы посмотреть изменения в каждом из файлов нужно секунд 5-10. Это делает работу просто невыносимой. TortoiseSVN и SmartSVN работают почему-то быстрее, не сказать что летают, но терпимо.

Наконец, третья проблема - не очень удобно ревьювить код. Одно дело я в gitlab вижу назначенные на меня pull-request, могу без особых сложностей и тормозов через веб-интерфейс посмотреть что изменилось в коде, написать комментарии. В SVN всего этого нет.

Конечно как-то приходится пользоваться svn, но это больше мучение чем работа.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125306
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl
Git в принципе не может быть удобнее человеку. Он может быть удобнее компании-корпорации, но не отдельным разработчикам.
...пропущено...
А вот в git предполагается что ты (человек-developer) делаешь изменения в своем репозитории, потом делаешь этот самый pull request и ждешь когда специальный человек-maintainer проверит твою работу и вытащит из твоего местечкового репозитория в репозиторий выше уровнем, ну или отправит эти изменения обратно на доработку. Это полезно для корпораций и с учетом что ты работаешь в команде отвечающей за малый участок большого проекта.
Сорян конечно, но ты заблуждаешься.
Я вот например для нескольких своих личных проектов использую git без всяких проблем. Там я единственный разработчик, и нет никаких других специальных людей, но при этом ведутся разные ветки, точно также могу сделать pull реквест из одной в другую и т.д.
И выше справедливо заметили, что git очень быстр. Сравниваю свой же опыт работы с svn, когда все реально тормозило не по детски....
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125323
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, как я и сказал, в SVN сделали быстрой ровно одну операцию: сравнение текущего состояния рабочей копии с последней закоммиченной. Всё остальное загубили насмерть.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125327
Alexander A. Sak
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извините за глупый вопрос. О каких пулл-реквестах в гите идет речь? Разве это к гиту относится? Я почему-то думал, что это фича всяких битбакетов-гитхабов-гитлабов.

То есть вот я сделал локально git init, git branch, потом решил перенести изменения из бранча в мастер и... Тут как-то делается пулл-реквест?
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125330
fkfka2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ares_ekb
Конечно как-то приходится пользоваться svn, но это больше мучение чем работа.

После git работа с svn вспоминается как ад. В git просто надо с самого начала более-менее понять как он работает и тогда с ним никакой проблемы работать нет - хоть с командной строки, хоть с gui - я, например, практически все делаю в нем из командной строки и не вижу в этом ничего сложного, gui обычно только для разруливания конфликтного мержа, или посмотреть какую-нибудь замороченную историю с кучей ветвлений. И я бы наоборот советовал изучение git именно с командной строки и начинать.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125335
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak,

да, согласен, это действительно фича не самого git, а разных надстроек. Но для svn я ничего подобного не видел. Обычно просто на словах говорится или где-нибудь в Jira пишется, что нужно посмотреть такую-то ветку или что по ней есть такие-то вопросы или что её можно мержить и т.п. Если бы для SVN был аналог GitLab, то требования к клиенту сильно упростились бы, не нужно было бы сравнивать ветки (в svn это работает достаточно медленно). То, что для SVN таких систем нет (может я о них не знаю) на мой взгляд это тоже минус.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125338
Ares_ekb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вспомнил ещё одну фичу, от которой за джва года использования svn уже успел отвыкнуть.

В git сначала комитишь, потом обновляешься из основного репозитория и сливаешь ветки, разрешая конфликты. В svn сначала обновляешься, потом разрешаешь конфликты, потом комитишь. В svn есть шанс таким образом похерить свои изменения. У меня такого не было, но поначалу, когда волею судеб переходил с git на svn, то было страшно обновляться из репозитория, незакомитив свои изменения.
...
Рейтинг: 0 / 0
Системы контроля версий и Delphi
    #40125339
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander A. Sak
Извините за глупый вопрос. О каких пулл-реквестах в гите идет речь? Разве это к гиту относится? Я почему-то думал, что это фича всяких битбакетов-гитхабов-гитлабов.

То есть вот я сделал локально git init, git branch, потом решил перенести изменения из бранча в мастер и... Тут как-то делается пулл-реквест?
Нет это фича git, см учебник progit глава 5 (команда $ git request-pull origin/master myfork). Но можно в одиночку работать без нее

В SVN, насколько я помню, тоже надо руками делать svn add *.x

И вообще про Мercurial забыли
...
Рейтинг: 0 / 0
25 сообщений из 81, страница 1 из 4
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Системы контроля версий и Delphi
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]