2012-04-24 12 views
8
#lets get the latest 
git pull 

#lets switch to branch and do some work 
git checkout -b makeSomeBugs 

#do the work commit 
git add . 
git commit -am "introducing some bugs" 

#push this for my lazy remote friend to see 
git push origin makeSomeBugs 

#uh .. changes on master 
git pull origin master 

#do some work.. 
git commit -am "introducing some more bugs" 
git push origin makeSomeBugs 

#lets switch back to master 
git checkout master 
git pull 

#work is done, lets merge 
git merge --no-ff makeSomeBugs 
git push origin 

#and remove the branch to never ever see it again 
git push origin :makeSomeBugs 
git branch -d makeSomeBugs 

様々なブログのソース(しかし、彼らはかなり古いです)水銀でこのように分岐することは特に永久的な枝の除去と、無行かないことを言う...GitとMercurial:MercurialでGitワークフローと同等のものは何ですか?

+0

私は、水銀でgitブランチのワークフローをシミュレートする方法を試していますが、まだ試しています。通常のブランチは、それらを削除することはできません(クローズするだけですが、ブランチ名が永久に取られることを意味します)ので、動作しません。ブックマークはgitブランチのようになっているはずですが、少なくとも私にとっては、本当にそれらのようには動作しないようです。 – ryanzec

+1

@ryanzecブックマークはどのように失敗しましたか? –

答えて

8

私が誤解している可能性があるため、私は間違っているいくつかのビットを持っているかもしれませんgitのが、あなたはMercurialの最近のバージョンを使用しているか、いない場合、bookmarks extensionが有効になっていると仮定すると...

​​

あり、「メンタルモデル」の違いのカップルだが、私はそれはかなり近いと思います。ブックマークを削除すると最大のものがあります。ローカルで削除してから削除します。あなたがgitでやったことから逆順になりました。

「マスター」ヘッドを特定するために使用するものの質問もあります。サーバー上に既にブックマークがある場合(たとえばmaster)、最初の行はhg pull -B masterになり、最初のマージhg merge masterと更新hg update -C masterになります。一度ブックマークを引っ張ってしまえば、それ以降のプルまたはプッシュは、明示的に言及する必要なく、ブックマークを更新する必要があります。

+0

問題は、makeSomeBugsがデフォルトにマージされ、元にプッシュされたときにmakeSomeBugsで加えられた変更が、makeSomeBugsの変更として引き続き表示されることが履歴からわかりますか?例えば。マッチした後にmakeSomeBugsでコミットXとコミットYを追跡できますか? – gerasalus

+2

@gerasalus:いいえ、Gitの枝のように、ブックマークは永続的ではありません。名前付きブランチは永久ラベルで、Gitに相当するものはありません。 'default'は* branchというデフォルトの*を参照します。それは 'マスター 'と同じではありません。 –

+3

@PaulS:ブックマークの拡張機能は、今ではコアMercurialの機能になったので、もうこれ以上有効にする必要はありません。 –

2

Mercurialを使用すると、一般的には進捗の名前付けに煩わされることなく、匿名のブランチを使用することを除けば、ほとんど同じです。

私はそれが一瞬でシンクしましょうよ...

gitのとは異なり、それに関連した支店名やブックマークがない場合Mercurialはチェンジ「を忘れて」いない、そうする必要はありませんそれを命名し、それを削除します。この後、それはかなり標準ワークフローのようになります。あなたは本当に、明示的に匿名の頭を追跡したい場合は

#lets get the latest 
hg pull 

#lets update to the latest and do some work 
hg update 

#do the work commit 
hg commit -Am "introducing some bugs" 

#serve this for my lazy remote friend to see 
hg serve 

#uh .. remote changes 
hg pull 

#do some work.. 
hg commit -Am "introducing some more bugs" 

#lets pull in the latest 
hg pull 

#work is done, lets merge 
hg merge 
hg push 

はオプションで、ブックマークを使用することができます。あなたは(hg update後に)起動したときに、使用して現在のチェンジセットにラベルを付ける:

hg bookmark makeSomeBugs 

をそして、あなたは(hg merge後に)完了したら、使用してブックマークを削除します。

hg bookmark -d makeSomeBugs 

あなたはまた、ブックマークをプッシュすることができあなたの友人のために、しかし、... meh。

+0

あなたはデフォルトにコミットしています、私はブランチにコミットしています。これは同じではありません。私はマスターから別のブランチを作成し、他のものを実行することができますが、最初のものとは関係ありません。 – gerasalus

+2

いいえ、新しい、匿名のブランチにコミットしています。オプションでブックマークが付いています。分岐は、コミットの行が分岐するたびに発生します。 'default'という名前以外のものの下でコミットしたいなら、別の*名前付きブランチを作る必要があります。ここでは文化的な邪魔になるでしょう:匿名のブランチを使うことはMercurialではよくありますが、Gitではほとんど不可能です。指定された支店は永久的であり、事前に設定する必要があります。その匿名ブランチを追跡する場合は、ブックマークを使用します。 –

+0

Mercurialでは、名前付きブランチは永続的で、通常はリリースを追跡するために使用されます。それらを使用して機能を追跡することもできますが、通常、機能の作業は匿名ブランチで行われます。ブックマークはオプションで匿名ブランチの作業を追跡するために使用できます。これは、複数のものを一度に処理している場合や、コードをマージする前にコードを共有する必要がある場合に便利です。 –

関連する問題