Закриття гілок 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
Чи є спосіб закрити діючу гілку?
Томас С.

@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."
Маске

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. Зупиняється.

Сценарій не обробляє гілки з пробілами в імені.
Джаред

@Jred чи можете ви запустити незалежну команду вгору зі своєю філією. Для наприклад: $ hg update yourbranchnamecontainingspace. Я думаю, що ми могли б створити ім’я гілки з простором, однак ви отримуєте помилку розбору, коли запускаєте mercurial команди, такі як оновлення . Ви можете розглянути можливість уникнення символу пробілу, передаючи ім'я гілки як параметр сценарію. Ура.
Roshan Poudyal

тут не echo "$1 is up"дублюється? В thenі після fi? Також такий скрипт може бути корисним, якщо підтримується опція з’єднатись за замовчуванням відразу
YakovL

1
@YakovL так =). Дякуємо за повідомлення Я оновив сценарій. Звичайно, це було б корисно для необов'язкового злиття, я спробую оновити в майбутньому, але до цього часу ви можете масштабувати сценарій на свій смак =)
Roshan Poudyal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.