Зачем делать svn update перед svn commit?
Я делаю svn update перед svn commit всегда (на автомате). Но меня спросили: «Зачем?», и я не смог ответить. Кто какие доводы знает? Или может наоборот не надо делать update перед commit’ом?
hugr
24.09.10 14:15:57 MSD
потому как до тебя кто-то уже мог закоммитить изменения, которые могут вызвать конфликт на сервере.
Deleted
( 24.09.10 14:24:47 MSD )
Ответ на: комментарий от Deleted 24.09.10 14:24:47 MSD
давай разверну ответ.
есть репозитарий R и два пользователя U1 и U2. На R лежит файл F. U1 и U2 сделали svn co и принялись дружно редактировать F. U2 сделал коммит своей версии F2. U1 должет сделать svn update, чтобы его версия файла F1 была на основе той версии, что лежит в R. Это а-ля чекпоинт для отправки diff’а c изменениями F1. Еже ли этого не делать, то при попытке закоммитить F1 сервер заругается на конфликт. Оно и правильно. Твой diff не учитывает изменения, которые уже сделал U2.
Deleted
( 24.09.10 14:31:28 MSD )
Ответ на: комментарий от Deleted 24.09.10 14:31:28 MSD
Это довод за или против?
То есть, если есть конфликт, то svn все равно ругнется? Значит каждый раз update перед commit’ом делать не надо?
Или наоборот надо каждый раз делать update перед commit’ом в качестве превентивного удара по возможным конфликтам?
hugr
( 24.09.10 14:50:31 MSD ) автор топика
Ответ на: комментарий от hugr 24.09.10 14:50:31 MSD

надо делать update, потом собирать и пускать тесты
Svn update что делает
Перед тем как приступить к использованию SVN, ознакомимся с некоторыми командами, которые может выпонять клиентская часть.
- svn update — обновляет содержимое локальной копии до самой последней версии из репозитория.
- svn commit — отправляет все изменения локальной копии в репозиторий.
- svn add файл/папка> — включить файл/папку в локальную копию проекта
- svn move файл/папка1>папка2> — переместить файл/папку1 в папку2
- svn copy файл/папка>папка> — скопировать файл/папку1 в папку2
- svn delete файл/папка> — удалить файл/папку из локальной копии проекта
- svn list URL> — просмотр каталога репозитория
- svn log файл> —verbose — история изменения файла по ревизиям
- svn cat —revision номер_ревизии>файл> — отображение содержимого файла из данной ревизии
- svn diff —revision номер_ревизии1:номер_ревизии2>файл> — отображение изменений файла между двумя ревизиями
- svn status — отображение изменений в локальной копии относительно репозитория
Жизненный цикл проекта на SVN
Допустим, что у нас уже есть настроенный SVN-сервер, и мы хотим перенести на него проект. У нас есть папка test, в которой лежит три файла:
1.cpp
2.cpp
Makefile
0) Добавляем новые файлы на сервер:
svn import svn://. /repo/test test
Здесь svn://. /repo/test — url-адрес проекта, test — название добавляемой папки.
1) Получаем локальную копию файлов проекта:
svn checkout svn://. /repo/test project/test
project/test — адрес, где будет располагаться локальная копия.
После выполнения этой команды получим следующую структуру файлов:
project
test
.svn
1.cpp
2.cpp
Makefile
Локальную копию не следует добавлять в ту папку, из которой делали import, так как при совпадении имён файлов они не будут перезаписаны.
2) Изменяем файлы
- изменить содержимое 1.cpp следующим образом:
до изменений:
int main() return 0;
>
после изменений:
int main() printf(» «);
return 0;
>
3) Фиксируем состояние
При фиксации происходит отправка всех изменений в локальной копии на сервер.
svn commit -m «. »
-m «. « — комментарий к commit’у.
При выполнении этой команды SVN узнаёт нужную ему информацию о проекте из папки .svn
После каждого commit’а номер ревизии увеличивается на единицу.
Номер ревизии (Revision) &mdash целое число, показывающее номер состояния проекта.

Все выполненные действия можно схематически представить на рисунке:
Разрешение конфликтов

При работе над проектом возможны такие ситуации:
Допустим, в какой-то момент времени разработчик обновляется до последней версии проекта и начинает работу над некоторыми файлами.
Через какое-то время, изменив файлы, он пытается сделать commit. Однако, этот commit не удастся, если другие разработчики уже вносили изменения в те же файлы проекта и сохраняли их в репозитории.
Такая ситуация называется конфликтом. У разработчика, чей commit не удался из-за конфликтов, есть два возможных варианта действий:
- svn revert — отменить все свои изменения
- svn update — забрать из репозитория новые версии файлов и, разрешив конфликты, снова попытаться сделать commit.
Как разрешаются конфликты
Допустим, в репозитории хранится файл main.cpp ревизии 13:
- убрать чужие изменения, оставив свои
- не вносить свои изменения, оставив всё как есть
- вручную соединить все изменения в одном файле
После сведения всех изменений в main.cpp user1 пишет
svn resolved main.cpp (при этом удалятся временные файлы)
svn commit
SVN позволяет так же объединить любую версию с любым набором других версий с помощью update и merge .
Про команду merge можно прочитать, набрав в консоли команду svn help merge .
Заключение
В этой лекции мы рассмотрели систему контроля версий SVN, которая является централизованной (то есть у любого проекта есть одно хранилище).
В настоящее время так же распространены распределённые системы управления версиями (англ. Distributed Version Control System, DVCS), в которых вся история изменений файлов хранится в локальных копиях клиентов и, при необходимости, синхронизируется. К DVCS относятся: git, Mercurial, Bazaar.
Svn update что делает
The depth combo box items relate to the -depth argument.
Если помечен флажок Пропустить внешние , используйте параметр —ignore-externals .
Если вы извлекаете конкретную ревизию, укажите её после URL при помощи параметра -r .
Обновить
svn info URL_рабочей_копии svn update [-r rev] ПУТЬ
Обновление нескольких элементов в данный момент не является атомарной операцией в Subversion. Поэтому TortoiseSVN сначала находит ведущую ревизию (HEAD) в хранилище, а затем обновляет все элементы до этой ревизии во избежание создания рабочей копии со смешанными ревизиями.
Если для обновления выбран только один элемент, или выбранные элементы не все из одного и того же хранилища, TortoiseSVN просто обновляет до ведущей ревизии.
Здесь параметры командной строки не используются. Обновить до ревизии также реализует команду обновления, но предлагает больше возможностей.
Обновить до ревизии
svn info URL_рабочей_копии svn update [-r rev] [-depth ARG] [--ignore-externals] ПУТЬ
The depth combo box items relate to the -depth argument.
Если помечен флажок Пропустить внешние , используйте параметр —ignore-externals .
Фиксировать
В TortoiseSVN диалог фиксации использует несколько команд Subversion. Первая стадия — это проверка статуса, которая определяет элементы вашей рабочей копии, которые потенциально могут быть зафиксированы. Вы можете просмотреть этот список, сравнить файлы с их базой и выбрать элементы, которые вы желаете включить в фиксацию.
svn status -v ПУТЬ
Если отмечен флажок Показать неверсированные файлы , TortoiseSVN также будет показывать неверсированные файлы и папки в иерархии рабочей копии, учитывая правила игнорирования. Конкретно это свойство не имеет прямого эквивалента в Subversion, поскольку команда svn status не заходит в неверсированные папки.
Если вы отметите какие-либо неверсированные файлы и папки, эти элементы сначала будут добавлены к вашей рабочей копии.
svn add ПУТЬ.
Когда вы нажимаете на ОК, Subversion начинает выполнение фиксации. Если вы оставили все флажки, отмечающие файлы, в состоянии по умолчанию, TortoiseSVN использует одну рекурсивную фиксацию рабочей копии. Если вы сняли пометки с некоторых файлов, тогда должна использоваться нерекурсивная фиксация ( -N ), и каждый путь должен быть указан индивидуально в командной строке для фиксации.
svn commit -m "LogMessage" [-depth ARG] [--no-unlock] ПУТЬ.
СообщениеЖурнала здесь представляет собой содержимое поля ввода сообщения журнала. Оно может быть пустым.
Если помечен флажок Сохранить блокировки , используйте параметр —no-unlock .
Различие
svn diff ПУТЬ
Если вы используете команду ‘Различия’ из главного контекстного меню, вы сравниваете изменённый файл с его базовой ревизией. Вывод из ИКС вышеприведенной команды тоже это выполняет и производит выдачу в формате объединённых различий. Однако, TortoiseSVN это не использует. TortoiseSVN применяет TortoiseMerge (или программу сравнения по вашему выбору) для наглядного отображения различий между текстовыми файлами, поэтому прямого эквивалента ИКС нет.
Вы можете также сравнить любые два файла при помощи TortoiseSVN, независимо от того, находятся ли они под управлением версиями. TortoiseSVN просто скармливает эти два файла в выбранную программу сравнения и позволяет ей определить, где находятся различия.
Журнал
svn log -v -r 0:N --limit 100 [--stop-on-copy] ПУТЬ или svn log -v -r M:N [--stop-on-copy] ПУТЬ
По умолчанию, TortoiseSVN пытается извлечь 100 сообщений журнала, используя метод —limit. Если установки заставляют использовать старые API, тогда для получения сообщений журнала для 100 ревизий из хранилища используется вторая форма.
Если отмечен флажок Остановиться на копировании/переименовании , используйте параметр —stop-on-copy .
Проверка на наличие изменений
svn status -v ПУТЬ или svn status -u -v ПУТЬ
Начальная проверка статуса смотрит только на вашу рабочую копию. Если вы нажмёте на Проверить хранилище , тогда проверяется также и хранилище, чтобы посмотреть, какие файлы будут изменены при обновлении, и это требует параметра -u .
Если отмечен флажок Показать неверсированные файлы , TortoiseSVN также будет показывать неверсированные файлы и папки в иерархии рабочей копии, учитывая правила игнорирования. Конкретно это свойство не имеет прямого эквивалента в Subversion, поскольку команда svn status не заходит в неверсированные папки.
Граф ревизий
Граф ревизий — это возможность, предоставляемая только TortoiseSVN. Аналога в клиенте командной строки нет.
Что TortoiseSVN при этом делает:
svn info URL_рабочей_копии svn log -v URL
где URL — это корень хранилища, и затем анализирует возвращённые данные.
Обозреватель хранилища
svn info URL_рабочей_копии svn list [-r rev] -v URL
Вы можете использовать svn info для определения корня хранилища: это верхний уровень, отображаемый в обозревателе хранилища. Вы не можете перемещаться выше этого уровня. Также, эта команда возвращает всю информацию о блокировках, отображаемую в обозревателе хранилища.
Вызов svn list покажет список содержимого папки, для указанного URL и ревизии.
Редактировать конфликты
Эта команда не имеет эквивалента в ИКС. Она вызывает TortoiseMerge или внешний инструмент трёхстороннего различия/слияния для просмотра файлов, вовлечённых в конфликт и отбора строк, которые должны быть использованы.
Документация
Чтобы обновить состояние системы контроля версий файлов, выберите один или несколько файлов в Браузере текущей папки, щелкните правой кнопкой и выберите Source Control> Refresh SVN status.
Чтобы обновить состояние всех файлов в папке, щелкните правой кнопкой по пробелу Браузера текущей папки и выберите Source Control> Refresh SVN status.
Примечание
Для SVN, обновляя состояние системы контроля версий не связывается с репозиторием. Чтобы получить последние версии, см. Обновление версий Файлов.
Обновление версий файлов
Чтобы обновить локальные копии выбранных файлов, выберите один или несколько файлов в Браузере текущей папки, щелкните правой кнопкой и выберите Source Control> Update Selection from SVN.
Чтобы обновить все файлы в папке, щелкните правой кнопкой по Браузеру текущей папки и выберите Source Control> Update All from SVN.
Похожие темы
- Проверка из репозитория SVN
- Обзор изменений в системе контроля версий
Документация MATLAB
Поддержка
- MATLAB Answers
- Помощь в установке
- Отчеты об ошибках
- Требования к продукту
- Загрузка программного обеспечения
© 1994-2021 The MathWorks, Inc.
- Условия использования
- Патенты
- Торговые марки
- Список благодарностей
Для просмотра документации необходимо авторизоваться на сайте
Войти
Памятка переводчика
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста — например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.