Для чего нужен svn

Русские Блоги

Загрузка, установка, настройка и использование SVN

Что такое SVN

Связанные понятия

Зачем нужен SVN

Особенности SVN

Простое управление, легкий вход, кроссплатформенная поддержка (Windows, Linux, MacOS)

Поддержка функции отката версии (машина времени)

Он относится к программному обеспечению структуры C / S, поэтому для использования SVN необходимо отдельно установить клиент и сервер.

Разница между TortoiseSVN VisualSVN Subversion и VisualSVN Server

Клиентское ПО: TortoiseSVN и VisualSVN

Серверное программное обеспечение: Subversion и VisualSVN Server

По сути, TortoiseSVN (ядро использует Subversion) и VisualSVN являются производными от Subversion и являются
обслуживает Subversion.

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

Ядро VisualSVN Server также использует Subversion, которая включает apache, Subversion и WMI (используется для реализации рабочего интерфейса и т. Д.), И многие конфигурации были настроены, что относительно легко использовать. VisualSVN Server Standard Edition бесплатен, Enterprise Edition Это платно, вы можете выбрать во время установки

Почему бы не использовать Subversion напрямую

SVN скачать

Загрузка клиентского программного обеспечения, пожалуйста, нажмитеВот

Чтобы загрузить серверное программное обеспечение, нажмитеВот

Установка SVN сервера

Описание: Из-за несогласованности версии программного обеспечения могут быть некоторые отличия в интерфейсе установки, вот VisualSVN-Server-3.8.1-x64

Дважды щелкните установочный файл, нажмите Далее.

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Проверьте соглашение, нажмите Далее

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Используйте параметры по умолчанию, нажмите Далее

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Нажмите Standard Edition

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

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

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Установка завершена, нажмите Готово

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

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Конфигурация сервера SVN

Создать проект ( Возьмите магазин в качестве примера )

Сначала создайте общедоступный каталог WebApp в качестве каталога проекта в корневом каталоге установки сервера SVN.

Создайте папку Shop в каталоге WebApp в качестве хранилища версий Shop

заметка:

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

Базовый синтаксис для создания хранилища версий выглядит следующим образом:

Откройте cmd и введите следующую команду (Имя пути здесь и окончательное имя проекта должны быть такими же, как на вашем компьютере, то же самое ниже)

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

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Начать наблюдение за сервером

Что такое надзор на стороне сервера

Для Apache набираем в браузере http: // localhost (или IP-адрес) Для доступа к связанным файлам этот процесс называется надзором на стороне сервера.

Для SVN вводим svn: // localhost (или IP-адрес) Чтобы получить доступ к соответствующему хранилищу данных (например, склад магазина), этот процесс называется надзором на стороне сервера.

Как начать мониторинг сервера

Откройте cmd и введите следующую команду:

Нажмите Enter, вы увидите, что курсор мигает, показывая, что инструкция была выполнена успешно.

Особое внимание: не закрывайте текущее окно cmd, если оно закрыто, команда наблюдения будет принудительно завершена, и не будет возможности подключиться к данным.

С помощью приведенных выше инструкций наши svn: // localhost (или IP-адрес) Вы можете напрямую указать на склад версии Shop, то есть когда мы входим в браузер svn: // localhost (или IP-адрес) Когда время, вы можете получить доступ к соответствующим данным на складе магазина, что означает, что надзор

По умолчанию сервер SVN не позволяет анонимным пользователям загружать файлы на сервер, поэтому необходимо изменить соответствующие файлы конфигурации проекта.

Как изменить связанные разрешения

Откройте папку conf в папке Shop, вы увидите следующие файлы

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Установка клиента SVN

Описание: Из-за несогласованности версии программного обеспечения могут быть некоторые отличия в интерфейсе установки, вот TortoiseSVN-1.9.7.27907-x64-svn-1.9.7

Дважды щелкните установочный файл, нажмите Далее.

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Выберите место установки программного обеспечения и нажмите Далее.

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Нажимайте Установить, пока установка программного обеспечения не будет завершена, и, наконец, нажмите Готово.

Как проверить, успешно ли установлен клиент SVN

Щелкните правой кнопкой мыши на рабочем столе, если результат такой, как показано на рисунке ниже, это означает, что установка прошла успешно.

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Скачивание и установка китайского пакета SVN client

Прокрутите открывшуюся страницу вниз, найдите расположение изображения ниже и загрузите соответствующий китайский пакет (скорость может быть меньше, терпеливо подождите некоторое время)

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Дважды щелкните, чтобы запустить китайский пакет, щелкните Далее, дождитесь завершения установки и, наконец, щелкните Готово

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

Используйте клиент SVN для подключения к серверу SVN

Прежде всего, мы предполагаем такой сценарий использования: когда компания разрабатывает проект, ей необходимо развернуть проект на сервере SVN, предполагая, что IP-адрес этого сервера SVN 192.168.1.1

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

Конфигурация, относящаяся к проекту, является частью конфигурации сервера SVN, упомянутой выше.

Инициализация проекта включает в себя: написание основной структуры, написание библиотеки основных функций и т. Д. После того, как менеджер проекта закончит запись этих файлов на своем компьютере, он будет использовать команду фиксации для загрузки этих файлов в проект Shop на сервере SVN. (Перед использованием команды фиксации вам необходимо использовать команду checkout для установления соединения с сервером, что будет подробно описано ниже)

Процесс оформления заказа менеджера проекта

После того, как менеджер проекта завершил настройку проекта на сервере SVN, следующее, что нужно сделать, это установить соединение с сервером SVN через клиент SVN на своем компьютере.

После первого раза, если вам все еще нужно загрузить данные на стороне сервера на локальный компьютер, используйте команду обновления вместо команды проверки.

Мы называем процесс подключения к серверу SVN в первый раз и обновления соответствующих данных в проекте Shop локально как кассу.

Этапы оформления заказа менеджера проекта:

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Во всплывающем окне введите URL-адрес, показанный на рисунке ниже. Здесь, поскольку тест проводится на локальном компьютере, напишите localhost. Если его нет на локальном компьютере, напишите IP-адрес сервера SVN, например, упомянутый выше. 192.168.1.1

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

После нажатия OK появится следующий интерфейс, выберите элемент в левом столбце, щелкните правой кнопкой мыши, а затем нажмите Check Out во всплывающем меню.

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

SVN три основные инструкции

Предпосылка: сначала необходимо активировать контроль сервера

эффект: Ссылка на сервер SVN, обновление данных сервера на локальный

заметка: Оформление заказа используется только один раз во время первой ссылки. Если вы будете выполнять операции обновления в будущем, используйте команду обновления. Об этом уже упоминалось ранее, и я подчеркну это еще раз.

Предпосылка: сначала необходимо активировать контроль сервера

эффект: Отправьте локальные данные на сервер

Как использовать команду фиксации

Возьмем, к примеру, менеджера проекта, предположим, что менеджер проекта находится на своем компьютере (то есть в вышеупомянутом jingli Эта папка) После того, как вы скомпилировали документы с требованиями к проекту и другие файлы, вам необходимо загрузить эти файлы на сервер SVN, а затем просто ввести jingli После этой папки щелкните правой кнопкой мыши в пустом месте, а затем щелкните Подача SVN Вот и все, как показано на рисунке ниже:

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Нажмите на Подача SVN После этого появится следующее окно, проверьте файлы и каталоги / папки, которые необходимо загрузить, а затем нажмите OK. Если отображается интерфейс, показанный на рисунке 2 ниже, отправка прошла успешно.

Особое примечание: примечания должны быть заполнены

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Предпосылка: сначала необходимо активировать контроль сервера

эффект: Загрузите данные с сервера на локальный

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svn

Описание общих значков SVN

Как просмотреть все значки

Щелкните правой кнопкой мыши в любом пустом месте ——> TortoiseSVN ——> Настройки ——> Наложение значков ——> Набор значков для просмотра всех значков.

Объяснение значения значка

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

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Когда файл, отправленный клиентом, конфликтует с существующим файлом на сервере, система отображает этот значок

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Когда данные сервера были удалены, файл на клиенте отобразит этот значок

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Когда файл, который мы написали, был добавлен в очередь отправки, но не был отправлен успешно, система отобразит этот значок

Значок управления версиями отсутствует

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Когда файл, который мы написали, не добавлен в очередь загрузки, система отобразит этот значок

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Если файл клиента был изменен, но еще не отправлен, система отобразит этот значок

Значок только для чтения

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Когда файл клиента существует в форме только для чтения, система отобразит этот значок

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Когда данные сервера заблокированы, файл клиента будет отображать этот значок

Для чего нужен svn. Смотреть фото Для чего нужен svn. Смотреть картинку Для чего нужен svn. Картинка про Для чего нужен svn. Фото Для чего нужен svnимея в виду: Этот значок будет отображаться, если файл клиента был проигнорирован и его не нужно отправлять.

Источник

SVN — Краткое руководство

Система контроля версий (VCS) — это программное обеспечение, которое помогает разработчикам программного обеспечения работать вместе и вести полную историю своей работы.

Ниже приведены цели системы контроля версий.

VCS делится на две категории.

Терминология контроля версий

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

Репозиторий: Репозиторий является сердцем любой системы контроля версий. Это центральное место, где разработчики хранят всю свою работу. Репозиторий хранит не только файлы, но и историю. Доступ к репозиторию осуществляется через сеть, выступая в роли сервера и инструмента контроля версий, выступающего в роли клиента. Клиенты могут подключаться к хранилищу, а затем они могут сохранять / извлекать свои изменения в / из хранилища. Сохраняя изменения, клиент делает эти изменения доступными для других людей, а путем извлечения изменений клиент воспринимает изменения других людей как рабочую копию.

Магистраль: Магистраль — это каталог, в котором происходит вся основная разработка, и обычно проверяется разработчиками для работы над проектом.

Теги : каталог тегов используется для хранения именованных снимков проекта. Работа с тегами позволяет задавать описательные и запоминающиеся имена конкретной версии в репозитории.

Например, LAST_STABLE_CODE_BEFORE_EMAIL_SUPPORT более запоминающимся, чем

UUID репозитория: 7ceef8cb-3799-40dd-a067-c216ec2e5247 и

Ветви: Операция ветвления используется для создания другой линии развития. Это полезно, когда вы хотите, чтобы процесс разработки проходил в двух разных направлениях. Например, когда вы выпускаете версию 5.0, вы можете захотеть создать ветку, чтобы разработка функций 6.0 могла быть отделена от исправлений ошибок 5.0.

Рабочая копия: Рабочая копия — это снимок хранилища. Репозиторий является общим для всех команд, но люди не изменяют его напрямую. Вместо этого каждый разработчик проверяет рабочую копию. Рабочая копия — это личное рабочее место, где разработчики могут выполнять свою работу, оставаясь изолированными от остальной части команды.

Фиксация изменений. Фиксация — это процесс сохранения изменений с частного рабочего места на центральный сервер. После фиксации изменения становятся доступными для всей команды. Другие разработчики могут получить эти изменения, обновив свою рабочую копию. Фиксация — это атомарная операция. Либо весь коммит успешен, либо откатан. Пользователи никогда не видят наполовину завершенный коммит.

Репозиторий: Репозиторий является сердцем любой системы контроля версий. Это центральное место, где разработчики хранят всю свою работу. Репозиторий хранит не только файлы, но и историю. Доступ к репозиторию осуществляется через сеть, выступая в роли сервера и инструмента контроля версий, выступающего в роли клиента. Клиенты могут подключаться к хранилищу, а затем они могут сохранять / извлекать свои изменения в / из хранилища. Сохраняя изменения, клиент делает эти изменения доступными для других людей, а путем извлечения изменений клиент воспринимает изменения других людей как рабочую копию.

Магистраль: Магистраль — это каталог, в котором происходит вся основная разработка, и обычно проверяется разработчиками для работы над проектом.

Теги : каталог тегов используется для хранения именованных снимков проекта. Работа с тегами позволяет задавать описательные и запоминающиеся имена конкретной версии в репозитории.

Например, LAST_STABLE_CODE_BEFORE_EMAIL_SUPPORT более запоминающимся, чем

UUID репозитория: 7ceef8cb-3799-40dd-a067-c216ec2e5247 и

Ветви: Операция ветвления используется для создания другой линии развития. Это полезно, когда вы хотите, чтобы процесс разработки проходил в двух разных направлениях. Например, когда вы выпускаете версию 5.0, вы можете захотеть создать ветку, чтобы разработка функций 6.0 могла быть отделена от исправлений ошибок 5.0.

Рабочая копия: Рабочая копия — это снимок хранилища. Репозиторий является общим для всех команд, но люди не изменяют его напрямую. Вместо этого каждый разработчик проверяет рабочую копию. Рабочая копия — это личное рабочее место, где разработчики могут выполнять свою работу, оставаясь изолированными от остальной части команды.

Фиксация изменений. Фиксация — это процесс сохранения изменений с частного рабочего места на центральный сервер. После фиксации изменения становятся доступными для всей команды. Другие разработчики могут получить эти изменения, обновив свою рабочую копию. Фиксация — это атомарная операция. Либо весь коммит успешен, либо откатан. Пользователи никогда не видят наполовину завершенный коммит.

Настройка среды SVN

Установка SVN

Subversion — это популярный инструмент контроля версий с открытым исходным кодом. Это с открытым исходным кодом и доступно бесплатно через Интернет. Он поставляется по умолчанию с большинством дистрибутивов GNU / Linux, поэтому он может быть уже установлен в вашей системе. Чтобы проверить, установлен он или нет, используйте следующую команду.

Если клиент Subversion не установлен, команда сообщит об ошибке, в противном случае будет отображена версия установленного программного обеспечения.

Настройка Apache

Мы видели, как установить клиент Subversion в GNU / Linux. Давайте посмотрим, как создать новый репозиторий и разрешить доступ пользователям.

Пакет mod_dav_svn позволяет получить доступ к хранилищу по HTTP, через сервер Apache httpd, а пакет subversion устанавливает инструмент svnadmin.

Настройка пользователя

Давайте создадим пользователя Джерри

Создайте родительский каталог Subversion для хранения всей работы (см. /Etc/httpd/conf.d/subversion.conf ).

Настройка репозитория

Давайте изменим пользователя и группу владельцев хранилища.

Проверьте, включен ли SELinux или нет с помощью инструмента состояния SELinux.

Для нашего сервера SELinux включен, поэтому мы должны изменить контекст безопасности SELinux.

Чтобы разрешить фиксацию по HTTP, выполните следующую команду.

Перезапустите сервер Apache, и мы закончили с настройкой сервера Apache.

Традиционно, у каждого проекта Subversion есть каталоги стволов, тегов и веток непосредственно в корневом каталоге проекта.

Магистраль — это каталог, в котором происходит вся основная разработка, и обычно проверяется разработчиками для работы над проектом.

Каталог тегов используется для хранения именованных снимков проекта. При создании производственного выпуска команда помечает код, который входит в выпуск.

Каталог веток используется, когда вы хотите заниматься разными направлениями развития.

Давайте создадим структуру каталогов стволов, тегов и ветвей в репозитории проекта.

Теперь импортируйте каталоги из / tmp / svn-template в репозиторий.

Жизненный цикл SVN

Жизненный цикл системы контроля версий обсуждается в этой главе. В последующих главах мы увидим команду Subversion для каждой операции.

Создать репозиторий:

Хранилище является центральным местом, где разработчики хранят всю свою работу. Хранилище хранит не только файлы, но и историю изменений. Это означает, что он поддерживает историю изменений, внесенных в файлы.

Операция ‘create’ используется для создания нового хранилища. В большинстве случаев эта операция выполняется только один раз. Когда вы создаете новый репозиторий, ваша VCS будет ожидать, что вы скажете что-то для его идентификации, например, где вы хотите, чтобы он был создан, или какое имя должно быть присвоено репозиторию.

Проверять, выписываться

Операция «Оформить заказ» используется для создания рабочей копии из хранилища. Рабочая копия — это личное рабочее место, где разработчики вносят свои изменения, а затем отправляют эти изменения в хранилище.

Обновить

Как следует из названия, операция обновления используется для обновления рабочей копии. Эта операция синхронизирует рабочую копию с хранилищем. Поскольку репозиторий является общим для всех команд, другие разработчики могут зафиксировать свои изменения, и ваша рабочая копия становится старше.

Предположим, Том и Джерри — два разработчика, работающие над проектом. Оба проверяют последнюю версию из репозитория и начинают работать. На данный момент их рабочие копии полностью синхронизированы с хранилищем. Джерри завершает свою работу очень эффективно и вносит свои изменения в хранилище.

Выполнить изменения

После оформления заказа можно выполнять различные операции для внесения изменений. Редактировать это самая распространенная операция. Можно редактировать существующий файл, чтобы добавить / удалить содержимое из файла.

Можно добавлять файлы / каталоги. Но сразу же эти файлы / каталоги не становятся частью репозитория, вместо этого они добавляются в ожидающий список изменений и становятся частью репозитория после операции фиксации.

Точно так же можно удалить файлы / каталоги. Операция удаления немедленно удаляет файл из рабочей копии, но фактическое удаление файла добавляется в ожидающий список изменений, и изменения вносятся в репозиторий после операции фиксации.

Операция «Переименовать» изменяет имя файла / каталога. Операция «Перемещение» используется для перемещения файлов / каталогов из одного места в другое в дереве хранилища.

Обзор изменений

Когда вы извлекаете рабочую копию или обновляете рабочую копию, ваша рабочая копия полностью синхронизируется с хранилищем. Но когда вы вносите изменения в свою рабочую копию, она становится новее, чем хранилище. Хорошей практикой является проверка ваших изменений перед операцией ‘commit’.

Операция «Состояние» перечисляет изменения, которые были внесены в рабочую копию. Как мы уже упоминали ранее, каждый раз, когда вы вносите изменения в рабочую копию, все эти изменения становятся частью ожидающего изменения списка. И операция «статус» используется, чтобы увидеть ожидающий список изменений.

Операция «Статус» предоставляет только список изменений, но не подробную информацию о них. Можно использовать операцию diff для просмотра деталей изменений, которые были внесены в рабочую копию.

Исправить ошибки

Давайте предположим, что кто-то внес изменения в свою рабочую копию, но теперь он хочет отбросить эти изменения. В этой ситуации поможет операция «возврат».

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *