sourcecontrol - добавление только определенных версий - PullRequest
3 голосов
/ 11 января 2010

Я знаком с SVN и TFS для контроля версий. Одна проблема, с которой я обычно сталкиваюсь, это то, что один и тот же файл модифицируется для разных ошибок (например, bugP исправлено с помощью revision / changeset (N), bugQ исправлено с помощью revision (N + 1) и bugR исправлено в revision / changeset (N + 2) )

Каждая ревизия / набор изменений работает с разными частями одного и того же файла, и перекрытия нет.

Заинтересованные стороны решают, что важно включить исправление bugR в следующую сборку, но исключить исправления bugP и bugQ.

Я понимаю, что это может быть очень распространенным сценарием. Если все исправления были сделаны в одной ветке / стволе, есть ли простой способ получить только те исправления, которые исправляют конкретную ошибку?

И другие системы контроля версий, такие как GIT / Mercurial (Hg - это стандартный способ сказать это, насколько я понимаю), решают подобные проблемы?

Ответы [ 5 ]

1 голос
/ 11 января 2010

Git также имеет фантастически полезную команду rebase -i, которая позволяет вам выбрать коммиты для сохранения или удаления из списка. В вашем примере вы должны проверить объединенный набор изменений, а затем использовать

git rebase -i OLDEST_COMMIT_IN_THE_SET^

и затем в следующем списке:

pick 03315fa fix for feature A
pick 2935567 fix for feature B
pick 4d31103 more fixes for feature A
pick 875ca6d fix for feature C
pick f0289e6 undo some broken fixes for feature A
pick 1f84de2 more fixes for feature B

# Rebase 5c50390..1f84de2 onto 5c50390
#
# Commands:
#  p, pick = use commit
#  e, edit = use commit, but stop for amending
#  s, squash = use commit, but meld into previous commit
#
# If you remove a line here THAT COMMIT WILL BE LOST.
# However, if you remove everything, the rebase will be aborted.
#

просто удалите строки, соответствующие коммитам, которые вам не нужны - то есть все строки, которые не содержат фразу feature A. Затем сохраните файл, выйдите из редактора и позвольте git сделать всю работу за вас.

1 голос
/ 11 января 2010

Git имеет возможность выбирать отдельные коммиты, которые вы хотите интегрировать в свое дерево. Предполагая, что исправления ошибок были отдельными коммитами, вы можете выбрать, какие из них вы хотите применить к вашему текущему дереву. Команда использовала его cherry-pick.

Полагаю, это то, что вы ищете?

Я не использовал Mercurial, но этот ответ обсуждает проблему.

0 голосов
/ 12 января 2010

С SVN вы создадите ветку релиза, основанную на некоторой ревизии транка, и выборочно включите туда необходимые вам изменения (с вишневыми слияниями).Это также документирует, что (специфичный для клиента) релиз содержит, что исправляет.

0 голосов
/ 11 января 2010

Вы также можете выбрать вишню в SVN. Для сценария, который вы описываете,

bugP исправлено с помощью revision / changeset (N), bugQ исправлено с помощью revision / changeset (N + 2) & hellip; мы включили исправление bugR в следующую сборку, но исключить ошибки bugP и bugQ.

в SVN вы бы сделали что-то вроде

svn copy svn://path/to/trunk svn://path/to/branch -r N+2 -m "Made a branch"
svn checkout svn://path/to/branch
# do a reverse merge (note negative revision numbers)
svn merge -c -N+1,-N svn://path/to/trunk

Это даст вам рабочую копию с исправлением для bugR, но не bugP или bugQ.

0 голосов
/ 11 января 2010

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

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