Лучшая практика Управления исходным кодом - периодически обновление Вашей рабочей копии с репозитория

(Примечание: Этот вопрос не характерен для Подверсии - я просто использую его здесь в качестве примера.)

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

Альтернативный подход к этой лучшей практике (возможно, это была бы худшая практика:>), должен был бы справиться с потенциальными конфликтами только в фиксации (регистрация) время, а не периодически в течение периода, что Вы редактируете файл.

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

Я заявляю намерение лучшей практики по сравнению с альтернативой правильно?

6
задан Michael Hackner 12 February 2010 в 20:46
поделиться

10 ответов

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

9
ответ дан 8 December 2019 в 14:42
поделиться

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

  • A. Автоматическое слияние SVN (или TFS, или что-то еще) и
  • B. проще, когда ты человек должен разрешать конфликты.

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

2
ответ дан 8 December 2019 в 14:42
поделиться

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

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

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

1
ответ дан 8 December 2019 в 14:42
поделиться

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

1
ответ дан 8 December 2019 в 14:42
поделиться

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

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

1
ответ дан 8 December 2019 в 14:42
поделиться
  • обновлять каждый раз, когда вы сидите перед ПК.
  • обновляете перед каждой фиксацией

=> годы беспроблемного использования SCM.

1
ответ дан 8 December 2019 в 14:42
поделиться

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

0
ответ дан 8 December 2019 в 14:42
поделиться

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

0
ответ дан 8 December 2019 в 14:42
поделиться
  • Обновить так часто, как вы считаете нужным. По крайней мере, каждое утро. И каждый раз, когда товарищи по команде говорят вам об этом. Каждый раз, когда вы знаете, что кто-то совершил что-то в той области, где вы работаете.

  • Перед совершением. Никогда никогда не фиксируйте что-либо, пока вы не обновитесь до последней версии репозитория и не будете максимально уверены, что ваша фиксация ничего не сломает.

1
ответ дан 8 December 2019 в 14:42
поделиться

Как уже упоминалось несколько раз выше, мой совет аналогичен:

  • Обновляйте часто, как можно чаще, но по крайней мере раз в день, и
  • Завершайте часто, idem (но, конечно, у вас должна быть скомпилированная/работающая/тестированная функция)

Второй пункт также очень важен: как только "что-то" работает, это должно быть зафиксировано, в литературе говорится "don't go blind", i. e., не держите разработку на жестком диске в течение месяца, пока она не станет идеальной (она все равно никогда не станет таковой :-))

Это основная идея, лежащая в основе Continuous Integration (много материала на сайте Мартина Фаулера и очень понятные объяснения).

Напоследок:

  • Что касается "синтаксических" конфликтов, не беспокойтесь о них, они редки и легко устранимы,
  • Что касается "семантических" или "архитектурных" конфликтов, еще важнее обнаружить их как можно скорее, отсюда и девиз: обновлять часто, коммитить часто, объединять часто (для людей, использующих DVCS), и часто тестировать интегрированную функцию, чтобы обнаружить эти потенциальные семантические конфликты.

На моей предыдущей работе некоторые люди в продуктовых отделах отказывались обновляться каждый день (даже реже - несколько раз в день), потому что они говорили: "Магистраль сломана, если я обновлюсь, то потеряю свой день". Они были правы! Это неприемлемо! Вот почему очень важно подчеркнуть, что только рабочий код должен быть зафиксирован (или вытолкнут для людей с DVCS): чтобы помочь обеспечить это, я установил ежедневные сборки, которые будут начинаться при каждом коммите (используя свободный инструмент buildbot, но существуют десятки подобных инструментов). Со сборками и тестами на коммите легче убедиться, что ствол не сломан; всякий раз, когда сборка или (простой) тест не работает, человек (люди), который только что сделал коммит, получает (получают) письмо, и они должны немедленно исправить проблему или вернуться. А веб-резюме (в лексиконе buildbot оно называется "водопад") находится здесь для всех желающих. Подводя итог, можно сказать, что это действительно состояние ума, которое нужно иметь, и взаимное доверие, которое нужно построить среди разработчиков, но как только вы достигнете этой точки, поверьте мне, вы никогда не захотите вернуться назад: разработка идет быстрее, но при этом координируется, и люди рады вносить свой вклад в один и тот же код вместо того, чтобы работать на своей рабочей станции в одиночку в течение месяца! Стоит попробовать пойти по этому пути (ИМХО).

0
ответ дан 8 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: