С Подвижным, как я могу “сжать” серию changesets в один перед продвижением?

inquire ()  {
  echo  -n "$1 [y/n]? "
  read answer
  finish="-1"
  while [ "$finish" = '-1' ]
  do
    finish="1"
    if [ "$answer" = '' ];
    then
      answer=""
    else
      case $answer in
        y | Y | yes | YES ) answer="y";;
        n | N | no | NO ) answer="n";;
        *) finish="-1";
           echo -n 'Invalid response -- please reenter:';
           read answer;;
       esac
    fi
  done
}

... other stuff

inquire "Install now?"

...
95
задан Lucas 29 July 2009 в 14:30
поделиться

5 ответов

Как насчет Collapse Extension ?

39
ответ дан 24 November 2019 в 05:51
поделиться

Я никогда не использовал Mercurial, но это очень похоже на то, о чем не так давно говорил Мартин Фаулер в своем блоге:

http://martinfowler.com/bliki/ MercurialSquashCommit.html

2
ответ дан 24 November 2019 в 05:51
поделиться

Реализация интерфейса, просто и ясно продемонстрированного dfa, является чистой и элегантной (и "официально" поддерживаемым способом). Это то, для чего предназначена концепция интерфейса.

В C # мы могли бы использовать делегаты для программистов, которым нравится использовать указатели функций в c, но метод DFA - это способ использовать.

У вас также может быть массив

Command[] commands =
{
  new CommandA(), new CommandB(), new CommandC(), ...
}

] Затем вы можете выполнить команду по индексу

commands[7].exec();

Плагиат из DFA, но имея абстрактный базовый класс вместо интерфейса. Обратите внимание на cmdKey, который будет использоваться позже. По опыту я понимаю, что часто команда оборудования также имеет подкоманды.

abstract public class Command()
{
  abstract public byte exec(String subCmd);
  public String cmdKey;
  public String subCmd;
}

Создайте свои команды таким образом,

public class CommandA
extends Command
{
  public CommandA(String subCmd)
  {
    this.cmdKey = "A";
    this.subCmd = subCmd;
  }

  public byte exec()
  {
    sendWhatever(...);
    byte status = receiveWhatever(...);
    return status;
  }
}

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

public class CommandHash<String, Command>
extends HashMap<String, Command>
(
  public CommandHash<String, Command>(Command[] commands)
  {
    this.commandSucker(Command[] commands);
  }
  public commandSucker(Command[] commands)
  {
    for(Command cmd : commands)
    {
      this.put(cmd.cmdKey, cmd);
    }
  }
}

Затем создайте свою команду магазин: Предположим, ваша работа связана с наборами изменений от 100 до 110 включительно

  1. Создайте патч:

    % hg export -o mypatch 100: 110 --git

  2. Обновите до 99:

    % hg update 99

  3. Примените патч с помощью --no-commit (иначе вы вернете все свои изменения):

    % hg import --no-commit mypatch

  4. Зафиксировать все изменения сразу:

    % hg commit

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

    % hg strip 100

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

21
ответ дан 24 November 2019 в 05:51
поделиться

Расширение histedit - это именно то, что вы ищете .

hg histedit -o

или

hg histedit --outgoing

откроют список исходящих ревизий. Из списка вы можете

  • сложить 2 или более ревизии, создав одну единую ревизию
  • Отбросить ревизию, удалив их из истории
  • Изменить порядок ревизий, как вам нравится.

histedit предложит вам новое сообщение о фиксации свернутые наборы изменений, которые по умолчанию представляют собой два сообщения с разделением "\ n *** \ n".

Вы также можете получить аналогичные результаты, используя расширение mq, но это намного сложнее.

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

52
ответ дан 24 November 2019 в 05:51
поделиться

HistEdit будет делать то, что вы хотите, но, вероятно, это перебор. Если единственное, что вам нужно, это сложить несколько ревизий вместе, Collapse Extension выполнит свою работу.

0
ответ дан 24 November 2019 в 05:51
поделиться
Другие вопросы по тегам:

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