Получение бесконечного "стека отмены" без фиксации в хранилище? - PullRequest
4 голосов
/ 09 июля 2009

Как и многие программисты, я склонен к периодическим приступам «вдохновения», когда я внезапно увижу The Light и выполню серьезную операцию над своим кодом. Как правило, это работает хорошо, но бывают случаи, когда позже я обнаруживаю, что - из-за недостатка сна / кофеина или просто несовершенного понимания проблемы - я сделал что-то очень глупое.

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

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

  1. Новая, восстанавливаемая версия будет создаваться каждый раз, когда я сохраняю файл.
  2. Эти "автоматически сохраненные" версии не будут загромождать основной репозиторий. (Подавляющее большинство из них было бы совершенно бесполезно; я нажимаю Ctrl-S несколько раз в минуту.)
  3. «Автоматически сохраненные» версии должны храниться локально, чтобы я мог очень быстро их просматривать. Репозиторий с 3-секундным циклом просто не подходит для быстрого сканирования сотен ревизий.

Опции, которые я рассмотрел:

  • Просто внесите изменения в основной репозиторий, прежде чем вносить большие изменения, даже если код может быть поврежден. Минусы: когда я "вдохновлен", у меня обычно нет присутствия ума для этого; ломает сборку.
  • Локально размещенный репозиторий Subversion с включенным автоматическим контролем версий, смонтированный как «Веб-папка». Минусы: плохо работает с рабочими копиями других репозиториев; монтирование правильных папок WebDAV в Windows в лучшем случае болезненно.
  • Как и в предыдущем методе, но вместо этого используется ветвь в главном репозитории и слияние с транком, когда я обычно вручную фиксирую. Минусы: не во всех размещенных репозиториях может быть включено автоматическое управление версиями; не соответствует пунктам 2 и 3 выше; не может безопасно выполнить обратное слияние из магистрали в ветвь.
  • Переключитесь на DVCS и «объедините» все мои маленькие коммиты при нажатии. Минусы: я не знаю в первую очередь о DVCS; иногда Subversion - единственный доступный инструмент; Я не знаю, как выполнить пункт 1 выше.
  • Хранить рабочую копию в версионной файловой системе. Минусы: существуют ли они для Windows? Если это так, Google не смог указать мне путь.

Кто-нибудь знает инструмент или комбинацию инструментов, которые позволят мне получить то, что я хочу? Или я поставил перед собой противоречивые требования? (Что я довольно сильно подозреваю.)

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

Проблема решена. Спасибо за совет, ребята!

Ответы [ 4 ]

3 голосов
/ 09 июля 2009

Распределенный контроль версий. (Mercurial, Git, и т.д ...)

Суть этой истории в том, что извлечения нет, только клоны хранилища.

Ваши коммиты видны только вам, пока вы не вернете их обратно в основную ветку.

Хотите сделать радикальные экспериментальные изменения? Клонируйте репозиторий, делайте кучу коммитов на своем компьютере. Если это сработает, отодвиньте его назад; если нет, то просто откат или мусор репо.

1 голос
/ 09 июля 2009

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

1 голос
/ 09 июля 2009

если вы используете Windows Vista, 7 или Windows Server 2003 или новее, вы можете использовать Shadow Copy. В основном окно свойств для ваших файлов будет иметь новую вкладку «предыдущая версия», которая отслеживает предыдущую версию файла.

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

'vssadmin create shadow /for=c:\My Project\'

это несколько раз вызывающе спасло мою задницу.

Теневое копирование

0 голосов
/ 09 июля 2009

Я думаю, пришло время переключать редакторов. Emacs имеет переменную контроля версий, которая определяет, будет ли Emacs автоматически создавать несколько резервных копий для файла при его сохранении, называя их foo. ~ 1 ~, foo. ~ 2 ~ и т. Д. Дополнительные переменные определяют, сколько резервных копий следует хранить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...