Закрытие филиалов Hg


103

При использовании hg branch FeatureBranchNameи публикации его в центральном репозитории, совместно используемом разработчиками, есть ли способ в конечном итоге закрыть его, FeatureBranchNameкогда его разработка будет официально объединена с ветвью по умолчанию?

Также было бы полезно, если бы FeatureBranchNameне было видно при выполнении hg branchesкоманды.

Ответы:


158
hg commit --close-branch

должно быть достаточно, чтобы отметить близкую ветку. (см. hg commit)

--close-branch

пометить ветку как закрытую, скрыв ее из списка веток.

См. Также эту ветку :

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

Следует отметить, что я ожидаю, что закрытая ветка останется в репозитории; это может быть полезно в будущем, и commit --close-branchсообщение должно как минимум объяснять, почему ветка была закрыта.
Совсем другое дело - обрезка веток .


Примечание: бизнес «закрытие ветки» - это один из аспектов, который отсутствует в Git по сравнению с Mercurial :

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

[В Mercurial] Когда вы закончите работу с веткой, вы не можете удалить ее из репозитория; вместо этого вы выполняете фиксацию, которая закрывает ветку, а Mercurial отмечает, что ветка закрыта. Он останется постоянной частью вашей истории репозитория.


3
Есть ли способ закрыть устаревшую ветку?
Thomas S.

@ThomasS. 5 лет спустя точно не знаю. Документ был недавно обновлен: mercurial.808500.n3.nabble.com/…
VonC

1
@ThomasS. да, этот ответ помог мне с этой проблемой. hg debugsetparent <revision> hg branch <branchOfRevision> Обратите внимание, что порядок важен. Это заставит ваше репо думать, что оно находится в новой ревизии, а все ваши файлы - из начальной. После этого вы можете использовать фиксацию --close-branch, но использовать параметр -X *, чтобы сделать пустую фиксацию. hg commit --close-branch -X * -m "Closing branch."
Maske

8

Я написал простой скрипт, завершающий закрытие ветки, команды, найденные в PruningDeadBranches .

## Скрипт ##

#!/bin/bash
#script to close the not required branch in mercurial

hg up -C $1
if [ $? -eq 0 ]; then
    echo "$1 is up"
else
    echo "branch not found, please recheck your argument"
    exit 1
fi 
# if we are here then the branch is up, so we do the following
hg commit --close-branch -m 'this branch no longer required' 
echo "$1 is closed"
hg up -C default
echo "default is up" 

Как

Перейдите к локальной копии репозитория и запустите этот сценарий, указав аргумент. Например:

$./the_script_above.sh bad_branch_name_to_close

Что оно делает

Это делает следующее:

  1. Если ветка существует, она обновляется до данной ветки или существует с сообщением об ошибке.
  2. Закрывает ветку.
  3. Обновления ветки по умолчанию.
  4. Остановки.

Скрипт не обрабатывает ветки с пробелами в имени.
Джаред

@Jared, можете ли вы запустить независимую команду up со своей веткой. Для например: $ hg update yourbranchnamecontainingspace. Я думаю, что мы могли бы создать имя ветки с пробелом, однако вы получаете ошибку синтаксического анализа, когда запускаете ртутные команды, такие как update . Возможно, вы захотите рассмотреть возможность экранирования символа пробела при передаче имени ветки в качестве параметра скрипту. Ура.
Рошан Поудьял,

здесь не echo "$1 is up"дублируется? В thenи после fi? Также такой скрипт может быть полезен, если поддерживает возможность сразу слиться с дефолтным
YakovL

1
@YakovL да =). Спасибо за уведомление. Обновил скрипт. Конечно, это было бы полезно для необязательного слияния, я постараюсь обновить в будущем, но до тех пор вы можете масштабировать скрипт на свой вкус =)
Рошан Поудьял
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.