SVN фиксация / обновление репозитория - PullRequest
1 голос
/ 04 апреля 2011

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

Что если:

  1. Я работаю над своей локальной версией, обновляю материал в XXX.cpp (версия 1), пока кто-то другой загружает версию 2 этого XXX.cpp, а затем я загружаю свою версию, перезаписает ли моя «старая» версия более новую?

Спасибо

Ответы [ 8 ]

6 голосов
/ 04 апреля 2011

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

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

2 голосов
/ 04 апреля 2011

Это один из основных пунктов программного обеспечения для управления версиями, и вот что произойдет:

  • Кто-то проверяет файл A
  • Кто-то пытается для проверки в файле A
  • SVN попытается автоматически объединить файл
    • Если все хорошо, приготовьте кофе
    • О, конфликт обнаружен(требуется вмешательство человека)
      • Изменения проверяются и подтверждаются отправителем вручную

В последней части все становится сложнее -никто не хочет этого делать.

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

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

2 голосов
/ 04 апреля 2011

Второй человек, который передаст тот же файл с той же ревизией, получит ошибку "Конфликт SVN", и он сможет решить ее. Смотрите, например это: http://ariejan.net/2007/07/04/how-to-resolve-subversion-conflicts/

1 голос
/ 04 апреля 2011

Рекомендуется всегда обновлять перед выполнением коммита.

0 голосов
/ 04 апреля 2011

На самом деле 2-й разработчик не знает, был ли файл изменен другими или нет до его фиксации. Как только он сделает коммит, он выдаст предупреждение о конфликте версий (поскольку версия файла, из которой он сделал изменение, уже была изменена другими). ​​
Затем вы можете разрешить конфликт, но я думаю, что каждый разработчик должен выполнять SVN-UPATE перед каждым коммитом, тогда вы сможете преодолеть любую нежелательную ситуацию.

0 голосов
/ 04 апреля 2011

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

Это новое обновление может вызвать конфликты, которые необходимо разрешить.Тем не менее, он никогда не перезапишет предыдущие изменения.

0 голосов
/ 04 апреля 2011

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

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

0 голосов
/ 04 апреля 2011

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

...