Разделение и дисковое пространство TFS

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

Ответ 1

В прошлый раз, когда я смотрел, TFS использует copy-on-write, что означает, что вы не увеличиваете дисковое пространство до тех пор, пока вы не измените файлы. Это похоже на использование символических ссылок, пока вам не нужно что-то менять.

Ответ 2

Джеймс в основном прав. Для более полного ответа нам нужно начать с сообщения Buck с 2006 года: http://blogs.msdn.com/buckh/archive/2006/02/22/tfs_size_estimation.aspx

Каждая новая строка в таблице локальных версий добавляет около 520 байт (одна строка добавляется для каждой рабочей области, которая получает вновь добавленный элемент, а в размере преобладает столбец локального пути). Если у вас есть 100 рабочих областей, которые получают вновь добавленный элемент, база данных будет расти на 52 КБ. Если вы добавите 1000 новых файлов среднего размера (сочетание исходных файлов, двоичных файлов, изображений и т.д.) И получите их 100 рабочих пространств, база данных управления версиями растет примерно на 112 МБ (60 КБ * 1000 + 520 * 1000 * 100).

Мы можем опустить цифру 60 КБ, поскольку разветвленные элементы не дублируют содержимое файла. (Это не совсем "копировать-на-писать", Джеймс - количество метаданных O (N) должно быть вычислено и сохранено во время самой операции ветвления, а также систем, таких как git, которые, я считаю, относятся к O (1) - - но вы правы, что новый элемент указывает на ту же запись в tbl_Content как исходный элемент, пока он не будет отредактирован). Это оставляет нас только с коэффициентом 520 * num_workspaces * files_per_workspace. На сервере MS dogfood есть что-то вроде 2 миллиардов строк в tbl_LocalVersion, но в самоописанной небольшой группе это должно быть совершенно незначительным.

Что-то в блоге Buck не упоминается, это история слияния. Если вы примете тяжелый рабочий процесс и придерживаетесь его через несколько циклов разработки, вероятно, tbl_MergeHistory будет расти почти так же сильно, как tbl_LocalVersion. Опять же, я сомневаюсь, что он даже зарегистрируется на небольшом командном радаре, но на больших установках вы можете легко собрать сотни миллионов строк. Тем не менее, каждая строка намного меньше, поскольку нет полей nvarchar (260).