Гибкий по сравнению со статическим ветвлением (Мерзавец по сравнению с Clearcase/Accurev)

ОБНОВЛЕНИЕ 1: Это скриншот с решением Flexbox: https://pasteboard.co/I4hDGRM.png

display: flex;
flex-direction: column;
flex-flow: column wrap;
height: 340px; /* NEEDS HEIGHT */

Это именно то, что я хочу. Однако: ему нужно значение height для списка. У меня его нет, оно будет отличаться в зависимости от контента.

31
задан itiskj 1 October 2015 в 05:36
поделиться

5 ответов

Чтобы понять, почему Git не предлагает нечто вроде того, что вы называете «механизмом наследования» (без участия коммит), вы должны сначала понять одну из основных концепций этих SCM (например, Git против ClearCase)

  • ClearCase использует хранилище линейной версии : каждая версия элемент (файл или каталог) связан в прямой линейной взаимосвязи с предыдущей версией того же элемента.

  • Git использует DAG - направленный ациклический граф : каждая «версия» файла фактически является частью глобального набора изменений в дереве, которое само является частью фиксации. Предыдущая версия этого должна быть найдена в предыдущем коммите, доступном через единственный путь направленного ациклического графа.

В линейной системе, спецификация конфигурации может указывать несколько правил для достижения «наследования», которое вы видите (для данного файла сначала выберите определенную версию и, если ее нет, выберите другую версию, а если нет, то выберите третью и т. д. ).

Ветвь представляет собой ветвь в линейной линейной истории данной версии для данного правила выбора (все остальные правила выбора до этого все еще применяются, отсюда и «наследование»). «effect»

В DAG коммит представляет все «наследование», которое вы когда-либо получите; нет «накопительного» выбора версий. На этом графике есть только один путь для выбора всех файлов, которые вы увидите в данный момент (фиксация).
и если нет, выберите другую версию, а если нет, выберите третью и т. д.).

Ветвь представляет собой ветвь в линейной истории заданная версия для данного правила выбора (все остальные правила выбора до этого все еще применяются, отсюда и эффект «наследования»)

В DAG коммит представляет все «наследование», которое вы когда-либо получите; нет «накопительного» выбора версий. На этом графике есть только один путь для выбора всех файлов, которые вы увидите в данный момент (фиксация).
и если нет, выберите другую версию, а если нет, выберите третью и т. д.).

Ветвь представляет собой ветвь в линейной истории заданная версия для данного правила выбора (все остальные правила выбора до этого все еще применяются, отсюда и эффект «наследования»)

В DAG коммит представляет все «наследование», которое вы когда-либо получите; нет «накопительного» выбора версий. На этом графике есть только один путь для выбора всех файлов, которые вы увидите в данный момент (фиксация).
отсюда и эффект «наследования»)

В DAG коммит представляет все «наследование», которое вы когда-либо получите; нет «накопительного» выбора версий. На этом графике есть только один путь для выбора всех файлов, которые вы увидите в данный момент (фиксация).
отсюда и эффект «наследования»)

В DAG коммит представляет все «наследование», которое вы когда-либо получите; нет «накопительного» выбора версий. На этом графике есть только один путь для выбора всех файлов, которые вы увидите в данный момент (фиксация).
вы можете определить свое рабочее пространство (в ClearCase, ваш «вид», снимок или динамический) с любыми правилами, которые вы хотите.


unknown-google добавляет в комментарии (и в своем вопросе выше):

Итак После того, как мы увидим, что две модели могут достигать разных целей (линейный или DAG), у меня возникает вопрос: каковы сценарии реальной жизни (особенно для компаний, в которых больше OSS), где линейный может сделать вещи, которые невозможно сделать для DAG? Стоят ли они того?

Когда речь заходит о «реальном сценарии» в терминах правил выбора, то, что вы можете сделать в линейной модели, это иметь несколько правил выбора для одного и того же набор файлов .

Рассмотрим эту «спецификацию конфигурации» (т. е. «спецификацию конфигурации» для правил выбора с ClearCase):

element /aPath/... aLabel3 -mkbranch myNewBranch
element /aPath/... aLabel2 -mkbranch myNewBranch

Он выбирает все файлы с пометкой ' aLabel2 ' (и ветвь оттуда), за исключением тех, которые помечены как ' aLabel3 ' - и ветвь оттуда - (потому что это правило предшествует тому, которое упоминает ' aLabel2 ').

Стоит?

Нет.

На самом деле, UCM-разновидность ClearCase (методология Unified Configuration Management ) включена в продукт ClearCase и представляет все «лучшие практики», выведенные из базовой ClearCase. использование) не позволяет этого по причинам простоты . Набор файлов называется «компонентом», и если вы хотите выполнить ветвление для данной метки (известной как «базовая линия»), это будет переведено, как это в следующей спецификации конфигурации:

element /aPath/... .../myNewBranch
element /aPath/... aLabel3 -mkbranch myNewBranch
element /aPath/... /main/0 -mkbranch myNewBranch

Вы должны выбрать одна отправная точка (здесь, « aLabel3 ») и оттуда. Если вы хотите также файлы из ' aLabel2 ', вы сделаете слияние из всех файлов [ aLabel2 'с файлами в' myNewBranch '.

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

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

Общая цель - рассуждать в « когерентные операции контроля версий, примененные к когерентному компоненту ". «Связанный» набор файлов - это один файл в четко определенном связном состоянии:

  • если помечен, все его файлы помечены
  • , если разветвленный, все его файлы будут ответвление от той же уникальной начальной точки

, что легко сделать в системе DAG; это может быть более сложным в линейной системе (особенно с «Base ClearCase», где «спецификация конфигурации» может быть хитрой), но это обеспечивается с помощью методологии UCM того же линейного инструмента.

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

Это позволяет вам покинуть сферу VCS (системы контроля версий) и войти в сферу SCM (Software Configuration Management) , которая в основном связана с " воспроизводимость ». И это (функции SCM) может быть достигнуто с помощью VCS на линейной основе или на базе DAG.

30
ответ дан 27 November 2019 в 22:30
поделиться

Звучит так, как будто вы ищете git rebase . Перебазирование ветви концептуально отсоединяет ее от ее исходной точки ветвления и присоединяет ее в какой-то другой точке. (В действительности, перебазирование реализуется путем применения каждого патча ветви последовательно к новой точке ветвления, создавая новый набор патчей.) В вашем примере вы можете перебазировать ветку к текущему кончику верхней ветки, который будет по существу «наследовать» все изменения, сделанные в другой ветви.

3
ответ дан 27 November 2019 в 22:30
поделиться

Мне не совсем понятно, о чем ты просишь, но это звучит как git's семантика отслеживания - это то, что вы хотите. Когда вы ответвите от происхождения вы можете сделать что-то вроде:

git -t -b my_branch origin / master

И тогда будущие "git pull" автоматически объединят origin / master в ваш рабочая ветка. Затем вы можете использовать «git cherry -v origin / master», чтобы увидеть какая разница. Вы можете использовать «git rebase» перед публикацией изменения, чтобы очистить историю, но вы не должны использовать rebase один раз ваша история общедоступна (т. е. другие люди следуют этой ветке).

3
ответ дан 27 November 2019 в 22:30
поделиться

Я не уверен, что вы что-то спрашиваете, но вы демонстрируете, что потоки Accurev - это инструменты, отличные от Git ( или SVN) филиалы. (Я не знаю Clearcase.)

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

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

Различные инструменты хороши для разных целей; полезно спросить, чем хорош каждый из них для .

0
ответ дан 27 November 2019 в 22:30
поделиться

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

Если это те различия, о которых мы говорим, то я думаю, что «линейный» по сравнению с «DAG» сбивает с толку способ отличить эти системы SCM. В ClearCase все версии файла называются «деревом» версий файла, но на самом деле это направленный ациклический граф! Реальное отличие от Git в том, что DAG ClearCase существуют для каждого файла. Поэтому я считаю ошибочным называть ClearCase не-DAG, а Git - DAG.

(BTW ClearCase редактирует свои каталоги аналогично своим файлам, но это '

1
ответ дан 27 November 2019 в 22:30
поделиться
Другие вопросы по тегам:

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