Как узнать, была ли ветка уже объединена в SVN / Mercurial / Git? - PullRequest
5 голосов
/ 25 октября 2009

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

Редактировать : Mercurial или Git для этого более интуитивны, чем SVN?

Ответы [ 10 ]

10 голосов
/ 25 октября 2009

Mercurial или Git для этого более интуитивно понятны, чем SVN?

Да, очень даже так:

sjl at ecgtheow in ~/src/hg-review on webui at tip
[10] $ hg glog
@  changeset: 113:c5debb475273 Steve Losh tip webui
|  summary:   Add file folding.
|
o  changeset: 112:a3ad66636756 Steve Losh  webui
|  summary:   Show skipped-line comments.
|
o  changeset: 111:2e65351af702 Steve Losh  webui
|  summary:   Rough cut of line-level comments.
|
| o  changeset: 110:b599ca22418d Steve Losh  
|/|  summary:   Merge the bug fix.
| |
o |  changeset: 109:e2ddb8631463 Steve Losh  webui
| |  summary:   Fix the event not defined bug.
| |
| o  changeset: 108:001f5ecfd9bc Steve Losh  
|/|  summary:   Merge the webui skipped line counts -- too important to leave in the
| |             branch.
| |
o |  changeset: 107:1cc8e18b1b43 Steve Losh  webui
| |  summary:   Add skipped line counts to diffs.
| |

РЕДАКТИРОВАТЬ: Git имеет опцию git log --graph, которая почти такая же, как у Mercurial, за исключением того, что без полезного символа "Вы здесь" @.

7 голосов
/ 25 октября 2009

В git вы можете использовать git log, чтобы узнать, включает ли одна ветвь другую:

git log topic ^master # list all commits in branch 'topic', but not in 'master'

Если ничего не возвращено, topic было объединено.

5 голосов
/ 26 октября 2009

В git вы можете использовать --contains для вывода списка ветвей, содержащих другие ветви:

git branch -a --contains feature

покажет все ветви (с -a, включая удаленные ветви), которые объединили данную функцию.

git show-branch покажет много деталей отношений между ветвями. Чтобы научиться эффективно читать, требуется немного времени, но это очень ценно и покажет вам многое на небольшом пространстве.

5 голосов
/ 25 октября 2009

Тип:

svn help mergeinfo

И вы получите:

mergeinfo: Display merge-related information.
usage: mergeinfo SOURCE[@REV] [TARGET[@REV]]

  Display information related to merges (or potential merges) between
  SOURCE and TARGET (default: '.').  If the --show-revs option
  is not provided, display revisions which have been merged from
  SOURCE to TARGET; otherwise, display the type of information
  specified by the --show-revs option.

Valid options:
  -r [--revision] ARG      : ARG (some commands also take ARG1:ARG2 range)
                             A revision argument can be one of:
                                NUMBER       revision number
                                '{' DATE '}' revision at start of the date
                                'HEAD'       latest in repository
                                'BASE'       base rev of item's working copy
                                'COMMITTED'  last commit at or before BASE
                                'PREV'       revision just before COMMITTED
  --show-revs ARG          : specify which collection of revisions to display
                             ('merged', 'eligible')
4 голосов
/ 25 октября 2009

Если у вас есть версия сервера, по крайней мере, 1,5, как указано в chotchki, и ваш репозиторий был создан с такой версией или обновлен, свойство svn: mergeinfo добавляется в любой каталог, в котором произошло слияние .

Допустим, вы реинтегрировали две ветви в ствол, вы можете проверить с помощью (замените свой URL):

svn propget svn:mergeinfo svn://localhost/Test/trunk

какие ветви были объединены и какие ревизии они изменили. Пример вывода:

/branches/dev/1:35-36
/branches/dev/2:38-39

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

3 голосов
/ 25 октября 2009

В Git вы можете использовать git branch --merged <commit>, в котором перечислены все ветви, которые достижимы при данном коммите ( по умолчанию HEAD, что означает, что git branch --merged будет список всех веток, объединенных в текущий коммит).

Или вы можете использовать git show-branch branch1 branch2 или git log --graph --oneline branch1 branch2 для графического просмотра истории (или использовать какой-либо графический браузер истории, такой как gitk, QGit, Giggle, GitX и т. Д.).

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

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

git branch --no-merged

Из справки git:

С --no-merged будут перечислены только те ветки, которые не объединены в именованный коммит.

0 голосов
/ 25 октября 2009

Вы можете попытаться выполнить объединение с помощью опции --dry-run и проверить вывод (т. Е. Посмотреть, хочет ли он выполнить объединение или нет).

Лично, когда я объединяю одну ветку с другой, я записываю точный диапазон номеров редакций в сообщении фиксации.

0 голосов
/ 25 октября 2009

Вы можете использовать svnmerge.py для управления филиалами. Он сообщает вам, какие ветви уже были объединены, и объединяет только новые ревизии.

0 голосов
/ 25 октября 2009

Если у вас есть доступ к TortoiseSVN и репо версии 1.5 или выше, вы можете посмотреть на график репозитория, который он генерирует. Тем не менее, SVN в целом делает отслеживание слияний болезненным.

...