346なんでもメモ

自分用便利メモです

hg push したら自動でupdateしたい

自動で hg update したいリポジトリの .hg/hgrc に

[hooks]
changegroup = hg update >&2
って書いとけばいいよ。

hg tag

どうやらチェンジセットIDにわかりやすい名前のタグを関連つけて
バージョン管理しやすくするものみたい。

Mercurialではタグをワーキングディレクトリの.hgtagsというファイルに格納します。
.hgtagsにはチェンジセットIDとそれに対応付 けられたタグのリストが書かれています。
タグを追加すると、Mercurialは.hgtagsに一行追加してコミットします。hg tagはこのような動作をします。hg tagsは現在有効なタグを表示します。

$ hg tag hogehoge(つけたいタグ名)
$ hg tagsータグ一覧
tip                                     21:b849e98957fe
hogehoge(追加された)                     15:e61e22758ab2

で、タグをつけるとチェンジセットIDなどと同じように

$ hg up hogehoge(移動したいバージョンにつけたタグ名)

でそのバージョンに戻れる。

hg branch ,hg merge

ブランチの作成
 
デフォルトbranchにvimで
defo(中身も"defo")というファイルを作って
add ciもしておく

$ ls
defo

新しくブランチ作る

$hg branch bra2(新しく作るブランチの名前)

コミットしないとhg branchesに反映されないので
$hg ci                
$hg branches
bra2                           1:fc39640c462b
default                        0:f7797dac7887 (inactive)

hg branchesはレポジトリ内のブランチをすべて表示してくれる
bra2に適当なファイル作ってaddしてciする

$ ls
defo bra2(今作った適当ファイル)

これでブランチbra2にはbra2ファイルがあるけど
defaultにはないはず


ブランチを切り替える

ブランチを切り替えるにはupdateコマンドを使う

$ hg up  default(切り替わり先のブランチ名)

これで今defaultブランチに切り替わったはずなので確かめる

$ hg branch
default

hg branchのみだと今いるブランチ名を教えてくれる
(今はdefaultにいる)
ついでにdefaultにはbra2ファイルがないはずなので
確かめよう

$ ls
defo

bra2がないのでちゃんとできているようだ
もうひとつbranchを作ってみる

$ hg branch bra3
$ hg branch
bra3
$ ls
defo

またbra3というファイル作って
defoの中身を’bra3’に変えてみる

$ vim bra3
$ vim defo(中身を'bra3'に)
$ hg add bra3
$ hg st
M defo
A bra3
$ hg ci ※必ずコミットしましょう
created new head

※'heads' とはあるブランチの上での最も最近のコミットです。技術的に言えば子をまったく持たないチェンジセットのことです。マージとは2つのheadsを一つにまとめる操作であると言えます。hg headsとすると現在のリポジトリ内のheadsを見ることができます

$ ls
bra3    defo
$ hg branches
bra3                           3:927f81edeefd
bra2                           2:33a844d7fa20
default                        0:f7797dac7887 (inactive)

で今中身は

default  defo'defo'
bra2     defo'defo' ,bra2
bra3     defo'bra3' ,bra3

という状態。。
では今度はbra2にbra3をマージしてみる

$ hg up bra2
2 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ ls
bra2    defo
$ hg merge bra3
erging defo
warning: conflicts during merge.
merging defo failed!
0 files updated, 0 files merged, 0 files removed, 1 files unresolved
use 'hg resolve' to retry unresolved file merges

なんか'hg resolve'しろってこと?

$ ls
bra2        bra3        defo        defo.orig

今コミットしようとしてもエラーがでる
abort: unresolved merge conflicts (see hg resolve)
たぶんdefoが同じ名前やのになかみが違うからかな

defo.origってのができてるたぶんオリジナル
'hg resolve'ってのをしらべると

hg resolve -l - マージする必要があるファイルを一覧表示
hg resolve -m - ファイルを問題解決済みとしてマーク
hg resolve -u - ファイルを問題未解決としてマーク

らしいので今回defo.origを手動で消して

hg resolve -m する

$ rm defo.orig
$ ls
bra2    bra3    defo
$ hg resolve -m
$ hg ci
$ ls
bra2    bra3    defo

無事ブランチとマージ完了

追記

tip というものがあって
tipとは、リポジトリに加えられた直近のチェンジセットの事。
コミットを行ったばかりなら、そのコミット内容がtipという事になる。

逆に、他のリポジトリからpullしたばかりであれば、そのリポジトリのtipが作業中のリポジトリの新しいtipになります。リポジトリのtipを表示するには、hg tipコマンドを使ってください。

tip は常にheadでもあります。リポジトリ内に複数のheadが存在する場合、そのうちの一つだけがtipになるのです。リポジトリ内部でチェンジセットは 連番をふられているので、tipが最大の連番値を持ちます。"tip"という語は、tipチェンジセットを示す特殊なタグとして機能し、チェンジセットIDやタグが使用可能な全ての場所で使用出来ます。
プロフィール

metabo346

カテゴリ別アーカイブ
タグクラウド
livedoor × FLO:Q
QRコード
QRコード
  • ライブドアブログ