2010-12-08 43 views
5

私はTortoiseHg 1.1を使用しています。私たちのチームでは、作業を行うたびに名前付きブランチを作成する傾向があります。残念ながら、指定された支店のほとんどは閉鎖されません。これは大きな問題ではありませんが、現在作業しているブランチでフィルタリングを試みると迷惑します。検索する古いブランチの大量のリストがあります。TortoiseHgで複数のブランチを閉じる

TortoiseHgやコマンドラインから、複数のブランチを手早くコミットしたり閉じたりすることなく、簡単にブランチを閉じることができますか?クローズ分岐オプションを使用することができます

その

+2

混乱したり参照しづらい名前のブランチがある場合は、名前付きブランチを使用していない可能性があります。 DVCSの背後にあるアイデアの1つは、クローン作成するだけで匿名のブランチを作ることができます。独立して作業し、機能が完了したらチェーンをプッシュバックし、無意味なブランチを気にせずに削除します。 – dimo414

答えて

7

残念ながら、

それぞれのブランチを、そのブランチ上の独自のコミットで個別に閉じる必要があります。

それを行うための最善の方法は、コマンドラインを使用することで、あなたも、それらの束を閉じるには、単純なバッチファイルを作成することができます。

for %%f in (branch1 branch2 branch4) do (
    hg up "%%f" 
    if exitcode 1 goto quit 
    hg commit --close-branch -m "closing branch %%f" 
    if exitcode 1 goto quit 
) 
:quit 

私が使用してワークフローがへのブックマークの拡張機能を使用することです私の開発ライン用のローカルブックマークだけを残しておきます。この方法では、Mercurialで通常の名前のないブランチを使用しますが、ローカルで簡単に区別することができます。コミットメッセージは後でそれらを区切るために使用されます。

このようにして、名前付きブランチが自分の履歴を乱してしまうことはありません。クローズする必要はありません。ローカルで使用するブランチを追跡するだけで済みます。

+0

+1ブランチを自動的に閉じるときに最後の部分を紛失しました。私は、長い間生き残る開発のためだけにブランチを使うことについて常に公言してきました。 – pyfunc

2

は、すべての可能なオプションについては、以下を参照してください。

hg up -C badbranch 
hg commit --close-branch -m 'close badbranch, this approach never worked' 
hg up -C default # switch back to "good" branch 

また、私の理解では、ほとんどの仕事のためにクローンを作成し、開発のみのいくつかの可能長く住んでいた列車の名前が付いた枝を使用するのが好ましいということでした。

+0

ええ、自分の仕事にローカルのブックマークを使用し、通常の日常的なバグ修正のためのものではなく、より大きな機能のためのブランチだけを使用します。 –

1

ここには、デフォルトを除くすべてのアクティブなブランチを閉じるPowerShellスクリプトがあります。 独自のフィルタリングロジックを追加して、閉じたくないブランチを除外します。

$branches = hg branches -a | sort 
$exclude = "default" 

foreach ($item in $branches) 
{ 
$branch = $item.Split([string[]] " ", [StringSplitOptions]::RemoveEmptyEntries)[0] 

if(!$exclude.Contains($branch)) 
{ 
    hg update $branch 
    hg commit --close-branch -m "closing old branch" 
    hg status 
    Write-Host $branch 
} 
} 

hg push 
+0

名前にスペースが含まれているブランチを閉じられないでしょうか?私はbashでこれをやろうとしていましたが、hgブランチの出力に固執しています。各項目は実際には<オプションの '非アクティブ'タグ>の形式です。 hgのドキュメントには、実験的な-templateコマンドライン引数についての記載がありますが、私のバージョンの水銀はそれをサポートしていないようです... – CodeOtaku

0

わかりましたので、これは仕方遅れているが、私はbashのを経由して、これを行うために着手したと多くの痛みの後、私は実用的なソリューションを得ました。私はプッシュする前にカメの結果を見てみたかったので、これは最後にhgプッシュをしないことに注意してください。

#Protected branches to not close 
develop='develop' 
default='default' 

IFS=$'\n' 

#Get all branches 
allBranches=$(hg branches | sort) 

#Loop over and close old branches 
for item in $allBranches 
do 

#Trim off everything but the branch name 
branch=$(echo $item | sed -r 's/\s*[0-9]+:[0-9a-f]+(\s\(inactive\))?$//') 

if [ $branch != $develop ] && [ $branch != $default ] 
then 

hg update $branch 
hg commit --close-branch -m "Closing old branch" 

fi 

done 

は、スクリプトを実行した後、私は、彼らが積極的に取り組んでいた枝チームを尋ね、それらの閉鎖がコミット剥奪しました。

関連する問題