Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторные работы / SVN / ЛБ_Tortoise_Метод.Указ.docx
Скачиваний:
18
Добавлен:
17.06.2023
Размер:
3.63 Mб
Скачать

2.9 Переименование файлов

В процессе работы над проектом Вася и Петя решили, что название файла документации readme.txt не отражает его содержание. И приняли решение о том, что файл нужно переименовать в documentation.txt. Вася выполняет командуПереименовать (Rename)и задает новое имя файла (рисунки 2.22-2.23).

Рисунок 2.22

Рисунок 2.23

В результате выполнения команды файл помечается значком добавления (рисунок 2.24).

Рисунок 2.24

Дело в том, что в SVN команда Rename реализована с помощью механизма Delete-Add, но с автоматическим сохранением истории файла. Переименование изменяет файл в рабочей копии. Для того что бы зафиксировать это изменение в репозитории нужно выполнить Фиксирование (Commit) (рисунок 2.25).

Рисунок 2.25

Что бы отменить переименование нужно выполнить команду Убрать изменения (Revert). Петя, для того что бы файл был переименован в его рабочей копии должен выполнить синхронизацию своей рабочей копии. Для этого он должен выполнить команду Update.

2.10 Перемещение файлов

Петя с Васей решили выделить файлы документации в отдельную папку. Для этого Петя создает в своей рабочей копии папку docи добавляет её под контроль SVN(рисунки 2.26-2.27).

Рисунок 2.26

Рисунок 2.27

Затем, используя технологию DragandDrop (Переместить версированные элементы сюда), Петя правой кнопкой мыши выполняет перенос файлаdocumentation.txt в папку doc (рисунок 2.28).

Рисунок 2.28

В результате папка doc выглядит следующим образом (рисунок 2.29).

Рисунок 2.29

И после фиксации изменений проект в репозитории выглядит следующим образом (рисунок 2.30).

Рисунок 2.30

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

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

2.11 Разрешение конфликтов

В заключение работы Вася и Петя решили внести в файл документации documentation.txt информацию о себе. Вася зафиксировал изменения на долю секунды раньше, чем Петя. Петя хочет зафиксировать свои изменения (рисунок 2.31).

Рисунок 2.31

Но в результате - это сделать не удается (рисунок 2.32).

Рисунок 2.32

Возникает конфликт версий файла, т.е. файл, который находится в данный момент в репозитории, отличается от файла, который был в репозитории при создании рабочей копии Пети. SVN предлагает Пете синхронизировать его рабочую копию с репозиторием командой Update (рисунок 33).

Рисунок 2.33

Петя получает конфликт файлов в своей рабочей копии. Для каждого конфликтного файла появляется значок с восклицательным знаком в желтом треугольнике (рисунок 2.34).

Рисунок 2.34

В директории появились дополнительные 3 файла.

1. documentation.txt.mine — исходный файл Пети, изменения в котором он собирался зафиксировать в репозитории

2. documentation.txt.r13 – начальное состояние файла в репозитории, который модифицировал Петя в своей рабочей копии. Цифра означает номер ревизии файла

3. documentation.txt.r14 –текущее состояние файла в репозитории, которое содержит изменения сделанные Васей (поэтому номер ревизии и отличается).

Сам файл помечен иконкой конфликтного файла. У Пети есть два варианта как поступить:

1. неправильный вариант — откатить файл до исходного состояния, синхронизировать его с репозиторием и заново внести в него все изменения.

2. правильный вариант — разрешить конфликт средствами SVN. Дополнительные файлы, которые появились в директории, создаются как раз для помощи в этом.

Для разрешения конфликта Петя с помощью команды Разрешить конфликт (EditConflicts) (рисунок 2.35).

.

Рисунок 2.35

Петя смотрит, где именно возник конфликт (рисунок 2.36).

Рисунок 2.36

В TortoiseMerge видно 3 окна:

1. Mine(мой) - в окне представлен файл Пети, который находится в рабочей копии.

2. Theirs(их) - в окне представлен файл Васи, который находится в репозитории. Этот файл не дает зафиксировать изменения Пете, так как файлы находятся в конфликте.

3. Merged(Слитый) - в окне представлен итоговый файл, который останется после слияния файлов mine и theirs и будет зафиксирован в репозитории.

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

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

Для устранения конфликта, Петя должен в окне Merged сформировать итоговый файл. Сделать это он может как с помощью контекстного меню окна, в котором находится (доступно по нажатию правой кнопки мыши), так и набирая в окне Merged текст в конфликтующих строках.

Конфликт также можно просмотреть и устранить напрямую в файле documentation.txt (рисунок 2.37).

Рисунок 2.37

В файле видно 3 метки

1. <<<<<<< .mine — это изменения сделанные в Петей в рабочей копии

2. >>>>>>> .r16 — это изменения зафиксированные Васей

3. ======= - строка разделитель между конфликтующими строками в файле

Для разрешения конфликта в ручную, без применения средств автоматизации, нужно исправить код в файле, убрав из него все метки. Сделать это можно в любом текстовом редакторе. Но лучше для этого воспользоваться программой TortoiseMerge, которая вызывается командой Editconflicts.

Петя решает использовать команду Editconflicts и программу TortoiseMerge для слияния файлов (рисунок 2.38).

Рисунок 2.38

Контекстное меню окна Merged предлагает варианты использования строк из Theirs и Mine окон, Петя выбирает команду командуUsetextblockfrom 'theirs' что бы вставить в итоговый файл строку из файла Васи (рисунок 2.39).

Рисунок 2.39

И в ручную дописывает строку Васи в итоговом файле. Устранив все конфликты (в окне Merged больше нет строк красного цвета), Петя сохраняет итоговый файл и выходит из TortoiseMerge.

Что бы конфликт окончательно считался разрешенным нужно удалить все файлы, автоматически созданные для разрешения конфликта. Это можно сделать средствами операционной системы, но лучше всего это делать с помощью команды Resolved (рисунок 2.40).

Рисунок 2.40

Все конфликт разрешен, Петя может фиксировать изменения в репозитории.

Конфликт возникает только в том случае, если два и более автора изменяют строки с одинаковыми номерами. Что и продемонстрировано в данном примере. В случае, если изменяются разные строки, конфликта не будет. Произойдет слияние двух файлов в один (т.е. результирующий файл будет содержать строки из обоих файлов).

Важно!!!! В случае работы с документами MS, редактор, в котором будет происходить улаживание, будет выглядеть иначе. Необходимо будет принять или отклонить конфликты построчно. После того, как все конфликты были улажены, необходимо улаженный документ сохранить в рабочую копию (указать адрес, куда сохраняем). После того, как вы проведете сохранение, в папке появится документ с значком восклицательного знака и два файла формата архива RAR. Их нужно просто удалить, а документ, отмеченный восклицательным знаком, зафиксировать.