Непрерывное управление версиями

Как получить равное количество элементов после разделения диапазона, оставляя остаток

blockquote>

Различные подходы.

Ключевой вопрос заключается в том, включены ли 0 и 10 в целочисленный диапазон: это [0... 10] или [0... 10) или ...? Обратите внимание на ] или )? Предположим, что конечные точки списков включены, и [0... 10] представляет собой 11 различных целочисленных значений.

Примечание. Существуют такие крайности, как 11 чисел, разделенных на 12 групп.

Нижеследующее формирует поддиапазон из первой 1/n части диапазона, затем 1/(n-1) части оставшегося диапазона и т. Д.

void range(int n, int inclusive_min, int inclusive_max) {
  printf("Range [%d %d] / %d\n", inclusive_min, inclusive_max, n);
  for(int i = n; i > 0 && inclusive_min <= inclusive_max; i--) {
    int range = 1 + inclusive_max - inclusive_min;
    int sub_range = range/i;
    if (sub_range == 0) sub_range = 1;
    printf("Sub range [%d %d]\n", inclusive_min, inclusive_min + sub_range - 1);
    inclusive_min += sub_range;
  }
}

int main(void) {
  range(3, 0, 10);
  range(2, 0, 10);
  range(5, 0, 10);
  range(3, 0, 1);
  return 0;
}

Выходные данные

Range [0 10] / 3
Sub range [0 2]
Sub range [3 6]
Sub range [7 10]
Range [0 10] / 2
Sub range [0 4]
Sub range [5 10]
Range [0 10] / 5
Sub range [0 1]
Sub range [2 3]
Sub range [4 5]
Sub range [6 7]
Sub range [8 10]
Range [0 1] / 3
Sub range [0 0]
Sub range [1 1]

Более элегантное решение, похожее на алгоритм линии Брезенхема

void range(int n, int inclusive_min, int inclusive_max) {
  printf("Range [%d %d] / %d\n", inclusive_min, inclusive_max, n);
  int range = 1 + inclusive_max - inclusive_min;
  int sub_range = range / n;
  int sub_range_res = range % n;
  int p = 0;
  for (int i = 0; i < n; i++) {
    int next = inclusive_min + sub_range;
    p += sub_range_res;
    if (2 * p >= n) {  // like p >= n/2 without integer truncation.
      p -= n;
      next++;
    }
    if (next > inclusive_min) {
      printf("Sub range %d:[%d %d]\n", i, inclusive_min, next - 1);
    }
    inclusive_min = next;
  }
}

Выходные данные

[113 ]
9
задан Adam Davis 27 March 2009 в 04:21
поделиться

15 ответов

Прямо сейчас программисты думают об управлении исходным кодом как об интегрирующихся пакетах кода, но почему бы не сделать те пакеты меньшими и интегрируются непрерывно?

Я сказал бы, что DVCS уже в основном делают это теперь, не потому что они децентрализованы, но потому что фиксирование настолько более быстро.. С мерзавцем я фиксирую намного чаще, чем с SVN.. Это также делает простым фиксировать "блоки" или конкретный из кода (использование git add -i или git gui), и обычно намного более фокусируется на отслеживании строк кода, вместо того, чтобы завершить файлы (как "традиционный" VCS как Подверсия)

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

Что касается инструмента, который делает "непрерывное управление версиями", Вы могли сделать это вполне просто со сценарием оболочки, чем-то как..

while [ 1 ]; do
   git add -a && git commit -m "Autocommit at $(date)";
   sleep 10;
done

Существует сценарий, CACM (GitHub), который делает что-то подобное

[CACM] смотрит определенный каталог и передает все изменения в автономном репозитории Мерзавца.

Для использования просто сделайте:

cacm --repo dir_of_git_repo --watch dir_to_watch

Я не уверен, почему Вы хотели бы сделать так.. Я нахожу, что одной из самых полезных вещей об использовании VCS является разность того, что я изменил (так как последняя фиксация). Кажется, что наличие постоянных/автоматизированных фиксаций просто было бы шумом..

Кроме того, "e" Текстовый редактор имеет интересную функцию, он визуализирует историю отмены с ветвлением. Существует сообщение в блоге на нем со снимками экрана.

13
ответ дан 4 December 2019 в 05:56
поделиться

Рациональный ClearCase имеет понятие динамического представления. На окнах Ваше представление разработки показывает сетевым диском, но Ваши изменения кода являются сохраненной стороной сервера, как только Вы совершаете нападки, сохраняют. Это то, что Вы ищете?

Существуют, как Вы ожидали бы, торговать offs с прокладыванием себе путь, так как ответ Si выше, это не рекомендация...

1
ответ дан 4 December 2019 в 05:56
поделиться

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

Относительно управления версиями это генерировало бы версию с каждым, сохраняют. Вы могли явно отметить контрольной точкой метод, класс/интерфейс, пакет или весь проект с номером версии / имя. Это также разрешило более мелкомодульное управление Вашего источника на уровне метода. После того как я начал работать с Eclipse, в то время как он наследовал много функций от Визуального Возраста и сегодня имеет функцию History, которая сохраняет локально, все “сохраняет” Вашего кода, я не мог сдержать чувство, что я сделал шаг назад.

1
ответ дан 4 December 2019 в 05:56
поделиться

Как Dan упомянул, IBM Визуальный Возраст, который IDE сохранил каждой версией, которую Вы сохранили файла исходного кода. Этот подход не ограничен IDE, однако; операционная система VMS DEC проявила аналогичный подход со своей имеющей версию файловой системой. В VMS полное имя каждого файла включало номер версии, и каждый раз, когда Вы сохранили файл, новая копия была создана с номером версии один выше, чем ранее самое большое количество.

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

1
ответ дан 4 December 2019 в 05:56
поделиться

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

2
ответ дан 4 December 2019 в 05:56
поделиться

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

2
ответ дан 4 December 2019 в 05:56
поделиться

Вы имеете в виду что-то как автоуправление версиями Подверсии?

Отказ от ответственности: Я не говорю, что автоуправление версиями является хорошей идеей для разработки, или что я лично сделал бы это, но технология существует.

3
ответ дан 4 December 2019 в 05:56
поделиться

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

3
ответ дан 4 December 2019 в 05:56
поделиться

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

5
ответ дан 4 December 2019 в 05:56
поделиться

Я видел, что некоторый inotify основывал плагины для различного DVCS, однако это может только быть слишком настолько умным. Действительно, идеальная вещь сделать сохранить репозиторий в файловой системе копии на записи, так, чтобы они часто посещали детализированный (и неизменный), версии файлов сохранены за пределами DVCS.

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

На Linux я использую ext3cow для хранения моих репозиториев HG/Git. Это дает мне вид функциональности, которую Вы описываете. Печальный сказать, я не знаю ни о чем как он, которое портативно вне Linux. Возможно, некоторая сумасшедшая команда придумает один в Python.

Этот вопрос подходил несколько раз, прежде (хотя каждый в различном контексте), поэтому конечно, необходимость в чем-то как ext3cow (но портативный) очевидна. Все же я не хотел бы то чрезмерное увеличение размера в самом DVCS, особенно на огромных деревьях.

Я думаю, что действительно необходимо попросить это от файловой системы, не DVCS.

4
ответ дан 4 December 2019 в 05:56
поделиться

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

11
ответ дан 4 December 2019 в 05:56
поделиться

Eclipse имеет функцию, названную 'локальная история', которая делает точно это. Это сохранит копию Ваших исходных файлов между, сохраняет. Это даже отслеживает удаленные папки для Вас. Это сохранило мой зад неоднократно. Вы видите Локальную Историю как управление версиями низкого уровня, которое только происходит на Вашей локальной машине. Оборотная сторона этого, конечно, когда Вы будете работать над другой машиной, у Вас будет другая локальная история.

6
ответ дан 4 December 2019 в 05:56
поделиться

Вы могли фиксировать каждую строку или символ с DVCS как мерзавец, если бы Вы хотели. Обычно я думаю, что это - прекрасная идея фиксировать максимально часто, когда с помощью DVCS, чтобы помочь выследить проблемы с инструментами как мерзавец делят пополам. Если Вы хотели эффект, Вы описываете, Вы могли бы написать сценарий своего редактора выбора фиксировать на каждом сохранении... На практике, хотя я думал бы, что это будет слишком.

2
ответ дан 4 December 2019 в 05:56
поделиться

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

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

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

Вот и все. Я использую History Explorer , так как помогал в его разработке, но есть и другие.

2
ответ дан 4 December 2019 в 05:56
поделиться
[

] Как насчет "ВЕСТЫ"? [

] [

][]http://www.vestasys.org/[][

]
0
ответ дан 4 December 2019 в 05:56
поделиться
Другие вопросы по тегам:

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