Какая VCS позволяет мне добавлять изменения в несколько ожидающих коммитов одновременно? - PullRequest
3 голосов
/ 15 апреля 2009

Мой рабочий процесс обычно включает в себя внесение нескольких изменений в файл, каждый из которых принадлежит своей концептуальной единице изменения в рамках проекта (= commit).

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

Затем, когда все изменения, связанные с конкретным ожидающим коммитом, завершены во всех файлах, я могу зафиксировать именованный коммит!

Есть идеи, какой VCS будет хорошим кандидатом для этого?

Ответы [ 6 ]

6 голосов
/ 15 апреля 2009

В svn вы можете определить список изменений и затем зафиксировать только файлы в определенном списке изменений.

Git идет немного дальше и позволяет записывать патчи, интерактивно выбирая измененные чанки из файла с помощью git add -p .

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

Существуют также Mercurial ShelveExtension и git-stash , которые позволяют отложить выбранные изменения на уровне детализации блоков патчей для последующих коммитов. Такой способ работы позволяет вам правильно проверить перед фиксацией.

2 голосов
/ 13 мая 2009

Исходный запрос очень похож на «выбор вишни»: выбор фрагментов «diff» вручную для включения в новый коммит. По крайней мере, Git и Darcs поддерживают это. Для emacs + git есть gitsum , который мне очень нравится.

1 голос
/ 24 апреля 2009

в bzr вы можете использовать команды shelve / unshelve, чтобы получить некоторые изменения из ваших файлов и затем вернуться, или использовать плагин loom, чтобы легко управлять набором связанных патчей. Но ни один из них не решит ваш первоначальный запрос, и я сомневаюсь, что любой VCS может сделать это таким образом.

0 голосов
/ 17 апреля 2009

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

Если вам необходимо микроуправлять одновременными, но в некотором смысле несвязанными изменениями, то вам может потребоваться исследовать darcs , который имеет обратный акцент по сравнению с такими системами, как svn, git или mercurial.

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

Кстати, ты эоган М ... или я так думаю?

0 голосов
/ 15 апреля 2009

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

Я настоятельно рекомендую делать по одной вещи и фиксировать каждую проблему отдельно.

0 голосов
/ 15 апреля 2009

Клиент Subversion (> = 1.5) содержит понятие списка изменений: группа файлов, связанных с выбранным именем .

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

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