мерзавец: как я объединяюсь между ответвлениями при сохранении некоторых changesets эксклюзивный к одному ответвлению?

Легко получить признак (например, "действительно ли функция линейна? подлинейный? многочлен? экспоненциал")

трудно найти точную сложность.

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

import time
def measure_run_time(func, args):
  start = time.time()
  func(*args)
  return time.time() - start

def plot_times(func, generate_args, plot_sequence):
  return [
    (n, measure_run_time(func, generate_args(n+1)))
    for n in plot_sequence
  ]

И использовать его для пузырьковой сортировки времени:

def bubble_sort(l):
  for i in xrange(len(l)-1):
    for j in xrange(len(l)-1-i):
      if l[i+1] < l[i]:
        l[i],l[i+1] = l[i+1],l[i]

import random
def gen_args_for_sort(list_length):
  result = range(list_length) # list of 0..N-1
  random.shuffle(result) # randomize order
  # should return a tuple of arguments
  return (result,)

# timing for N = 1000, 2000, ..., 5000
times = plot_times(bubble_sort, gen_args_for_sort, xrange(1000,6000,1000))

import pprint
pprint.pprint(times)

Это распечатало на моей машине:

[(1000, 0.078000068664550781),
 (2000, 0.34400010108947754),
 (3000, 0.7649998664855957),
 (4000, 1.3440001010894775),
 (5000, 2.1410000324249268)]

14
задан kch 17 August 2009 в 16:17
поделиться

8 ответов

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

3
ответ дан 1 December 2019 в 15:02
поделиться

Поместите файл css в общедоступную папку. Это потребует изменения в вашем web.config, который будет выглядеть примерно так:

<location path="css">
    <system.web>
        <authorization>
            <allow users="*"/>
        </authorization>
    </system.web>
</location>

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

которые я хочу объединить

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


Менее техническим решением было бы отделить значения конфигурации от файлы конфигурации :

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

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

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


Менее техническим решением было бы отделить значения конфигурации от файлы конфигурации :

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

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

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


Менее техническим решением было бы отделить значения конфигурации от файлы конфигурации :

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

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

1
ответ дан 1 December 2019 в 15:02
поделиться

Я бы сделал интерактивную перебазировку для мастера и переместил ваш путь-имя-исправление-фиксация в конец. Затем вы можете объединиться до этого момента. Просто продолжайте перемещать ваш специальный коммит до конца.

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

0
ответ дан 1 December 2019 в 15:02
поделиться

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

Если вы ' Если вы всегда разрабатываете ветку features , вы можете объединить features с master , а затем в master , git восстановить локальный . (Где local - это тег, ссылающийся на фиксацию, в которой вы настроили пути и т. Д. Для вашей локальной среды.)

Теперь вы никогда не должны объединять master с функциями ], потому что это также объединит обратный локальный коммит.

В этом случае master становится своего рода ветвью развертывания, только когда-либо получая слияния из других ветвей. (Идеально, только из ветки features .)

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

0
ответ дан 1 December 2019 в 15:02
поделиться

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

  • ваша локальная ветвь
  • делает только локальные изменения
  • продолжить разработку

при выполнении слияния с мастером:

  • rebase -i master из вашей ветки и переместить изменение только локально в END цепочки исправлений. 1263] разрешить любые конфликты в процессе. Если в конфигурационных файлах есть только локальные изменения, и вы не касаетесь их в ходе обычной разработки, у вас не будет проблем. Если, в противном случае, у вас действительно есть конфликт, то это тот случай, когда вы действительно меняете в той же области, и он требует вашего внимания, чтобы все равно разрешить.
  • check out master
  • merge your local-branch -1:

1
ответ дан 1 December 2019 в 15:02
поделиться

Я не знаю, сработает ли это, но:

  1. Создайте фиксацию, которая, учитывая "главную" версию файлов конфигурации, превращает их в версию, которая вам нужна локально. Обратите внимание на SHA-1. Мы назовем его MAKE_LOCAL
  2. Создайте фиксацию, которая, учитывая вашу локальную версию файлов конфигурации, превращает их в версию, подходящую для master. Обратите внимание на SHA-1. Мы назовем его MAKE_REMOTE
  3. Используя git-хуки, при фиксации:
    1. git cherry-pick MAKE_REMOTE (или используйте git diff и патч )
    2. Разрешить начало фиксации
    3. git cherry-pick MAKE_LOCAL (или используйте git diff и patch )

Я думаю, что есть еще лучший способ преобразования файлов таким образом, но я не могу вспомнить (если вы можете найти Shacon's git из RubyConf и может пролистать 800 слайдов, там есть несколько отличных примеров).

0
ответ дан 1 December 2019 в 15:02
поделиться

My solution to this problem uses rebase rather than merge

Starting with a commit tree like this:

a-b-c <-- master
 \
  d <-- local
   \
    e-f-g <-- dev

$ git rebase --onto master local dev

       master 
       V 
   a-b-c-e'-f'-g' <-- dev
     \
      d <-- local

$ git checkout master

$ git merge dev

               master 
               V 
   a-b-c-e'-f'-g' <-- dev
     \
      d <-- local

$ git rebase --onto master master local

               master 
               V 
   a-b-c-e'-f'-g' <-- dev
                \
                 d' <-- local

$ git branch -f dev local

               master 
               V 
   a-b-c-e'-f'-g'
                \
                 d' <-- local
                 ^
                 dev
6
ответ дан 1 December 2019 в 15:02
поделиться

Лично, если бы мне пришлось сделать что-то подобное и мне по какой-либо причине не позволили рефакторинг учетных данных на моем пути, я бы добавил еще две ветки, в результате получилось бы расположение, подобное следующему:

master : исходный код, который вы унаследовали

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

особенность : ответвление от мастера, и все исправления идут сюда (и, возможно, добавить ловушку для предотвращения слияния с патчем в localcred)

local : ветка (не тег!), Которая будет начните как ветвь localcred , а затем используйте функцию слияния всякий раз, когда вам нужно запускать свои модульные тесты. Отсюда происходит все тестирование, но здесь не происходит разработки. Кроме того, эта ветка является одноразовой, потому что вы можете захотеть перебазировать внутри feature , и самый быстрый способ справиться с результатом будет - удалить ветку local , затем снова разветвить ее из localcred и объедините функцию перед запуском ваших тестов. Скорее всего, это будет достаточно распространенная операция в моем рабочем процессе, и я бы создал псевдоним, чтобы делать это многократно всего несколькими нажатиями клавиш, но я чертовски стараюсь избавиться от веток Git, что пугает некоторых людей, которые смотри на меня, так что YMMV.

Когда вы считаете, что ваши исправления готовы к публикации, вы делаете окончательную перебазировку функции , чтобы очистить историю, создать дамп и воссоздать локальный для вашего финального теста, объедините ] функцию в master , и как только она будет принята в восходящем направлении, объедините master с localcred и переустановите свой патч учетных данных в начало, затем сделайте дамп и воссоздайте local и функция и играйте заново.

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

Удовлетворяет ли это ваши потребности?

0
ответ дан 1 December 2019 в 15:02
поделиться
Другие вопросы по тегам:

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