0
|
1 # hg
|
|
2
|
2
|
3 - クロスプラットフォームの分散型バージョン管理システム
|
|
4 - 全てのコマンドはhgから始まる
|
|
5 - mercuryが水銀を意味し、その元素記号がHgであることに由来する
|
|
6 - https://www.mercurial-scm.org/
|
|
7
|
|
8 # 研究室のmercurial web
|
|
9 - http://www.cr.ie.u-ryukyu.ac.jp/hg
|
|
10
|
|
11
|
|
12
|
|
13 ## 使い方(コマンドライン編)
|
|
14
|
|
15 ### インストール
|
|
16 HomeBrewを使用する。
|
|
17
|
|
18 brew install mercurial
|
|
19
|
|
20 でインストール出来る。
|
|
21
|
|
22 ### hgwebの修正
|
|
23
|
|
24 brew upgrade mercurialでhgwebが動かなくなった時には、
|
|
25 /var/www/cgi-hg/index.cgi の以下の行を修正する。
|
|
26
|
|
27 ```
|
|
28 import sys
|
|
29 sys.path.insert(0, "/usr/local/Cellar/mercurial/5.0/lib/python2.7/site-packages")
|
|
30 ```
|
|
31
|
|
32 一応修正スクリプトを生成しました
|
|
33
|
|
34 dateを絶対表示にするのは、
|
|
35 `/usr/local/Cellar/mercurial/4.4.2/lib/python2.7/site-packages/mercurial/templates/static/mercurial.js`
|
|
36 の function age をなおしてしまうのが良い。添付ファイルにあるので、それと入れ替える。
|
|
37
|
|
38 ### リポジトリの初期化(init)
|
|
39 管理したいディレクトリ内で以下のコマンドを実行する。
|
|
40
|
|
41 ```
|
|
42 hg init
|
|
43 ```
|
|
44
|
|
45 ### ファイルをリポジトリに追加(add,commit)
|
|
46 ファイルをリポジトリに追加する場合、以下のコマンドを実行する。
|
|
47
|
|
48 ```
|
|
49 hg add ファイル名
|
|
50 ```
|
|
51
|
|
52 addで追加対象を設定し、commitでリポジトリに反映させる。
|
|
53
|
|
54 ```
|
|
55 hg commit
|
|
56 ```
|
|
57
|
|
58 ### リポジトリを複製(clone)
|
|
59 リポジトリを手元に複製し、作業をそこで行う。
|
|
60
|
|
61 ```
|
|
62 hg clone ssh://one@firefly.cr.ie.u-ryukyu.ac.jp/リポジトリ名 ローカル名
|
|
63 ```
|
|
64
|
|
65 ### 履歴の閲覧(log)
|
|
66 複製したディレクトリ内で実行する。リポジトリ に起きたすべての出来事の要約を、最新のものから時間を遡って表示する。
|
|
67
|
|
68 ```
|
|
69 hg log
|
|
70
|
|
71 changeset: 46:98c2bbeaecb4
|
|
72 tag: tip
|
|
73 user: convert-repo
|
|
74 date: Tue Nov 18 02:12:32 2008 +0000
|
|
75 summary: update tags
|
|
76 ```
|
|
77
|
|
78 ### 変更の確認(diff)
|
|
79 変更の内容を確認する時は、以下のコマンドを実行する。
|
|
80
|
|
81 ```
|
|
82 hg diff
|
|
83 ```
|
|
84
|
|
85 ### ファイルの削除(remove)
|
|
86 ファイルを削除する時は、以下のコマンドを実行する。
|
|
87
|
|
88 ```
|
|
89 hg remove ファイル名
|
|
90 ```
|
|
91
|
|
92 このままでは削除されていないので、commitを行うとリポジトリに反映される。
|
|
93
|
|
94 ### commit前の状態に戻す(revert)
|
|
95 誤って削除してしまったり、変更してしまった場合も、commit前なら変更内容を無かった事に出来る。
|
|
96
|
|
97 ```
|
|
98 hg revert --all
|
|
99 ```
|
|
100
|
|
101 ### タグを打つ(tag)
|
|
102 チェンジセットに独自の識別子を付ける。
|
|
103
|
|
104 ```
|
|
105 hg tag タグ名
|
|
106 ```
|
|
107
|
|
108 ### サーバーのリポジトリの変更内容を反映する。(pull)
|
|
109 変更内容の同期をとるため、サーバーから変更内容を取得する。
|
|
110
|
|
111 ```
|
|
112 hg pull ssh://one@firefly.cr.ie.u-ryukyu.ac.jp/リポジトリ名
|
|
113 ```
|
|
114
|
|
115 ### サーバーに変更内容を反映する。(push)
|
|
116 手元にある変更したファイルをサーバー側に反映させる。
|
|
117
|
|
118 ```
|
|
119 hg push ssh://one@firefly.cr.ie.u-ryukyu.ac.jp/リポジトリ名
|
|
120 ```
|
|
121
|
|
122 ## hgignoreに書いたファイルを削除したい時
|
|
123
|
|
124 ```
|
|
125 $ hg forget "set:hgignore() and not ignored()"
|
|
126 ```
|
|
127 cf. https://stackoverflow.com/questions/19820020/hg-remove-all-files-listed-in-hgignore
|
|
128
|
|
129 ## 基本的な使い方
|
|
130 ### はじめ
|
|
131
|
|
132 hg commit したら、
|
|
133
|
|
134 hg push する前に、
|
|
135
|
|
136 hg incoming
|
|
137
|
|
138 してみて、他の人が commit してないかどうかを見る。
|
|
139
|
|
140 ### 衝突無し
|
|
141 なかったら、そのまま hg push する。
|
|
142 そして、hg incoming して、自分のがtopだったら[終り]。
|
|
143
|
|
144 そうではなかったら、やっぱり[衝突あり] (pushの瞬間に割り込まれた...)
|
|
145
|
|
146 ### 衝突あり
|
|
147 何かあったら、
|
|
148
|
|
149 ```
|
|
150 hg pull
|
|
151 ```
|
|
152
|
|
153 する。すると、hg heads で、pull した version が出る。これを
|
|
154 merge してやれば良い。hg pull で取れたのが、例えば、(localで) 255だったら、
|
|
155
|
|
156 ```
|
|
157 hg merge -r 255
|
|
158 ```
|
|
159
|
|
160 とする。
|
|
161
|
|
162 で、conflict をvi/emacs で修正して、
|
|
163
|
|
164 ```
|
|
165 hg commit
|
|
166 ```
|
|
167
|
|
168 で、[はじめ]に戻る。
|
|
169
|
|
170
|
|
171
|
|
172 ### リポジトリからファイルを取り除く (convert)
|
|
173 間違えて登録してしまったファイルを最初からなかったかのように跡形もなく消す方法。(forget等と異なり過去のバージョンからも消される)
|
|
174 まず最初に、消したいファイルのファイルパスを適当なファイルに以下のようにして記述する。
|
|
175 ```
|
|
176 exclude "<file path>"
|
|
177 (例 : convert.txt)
|
|
178
|
|
179 exclude "history/black.txt"
|
|
180 exclude "history/black2.txt"
|
|
181 exclude "aua" #ディレクトリ指定も可能。
|
|
182 include "aua/auaua.txt" #指定したディレクトリ内のあるファイルのみ保持するときはincludeで指定。
|
|
183 ```
|
|
184
|
|
185 次に、hgrcに以下の記述を加えてconvertを利用出来るようにする。
|
|
186 ```
|
|
187 [extensions]
|
|
188 hgext.convert=
|
|
189 ```
|
|
190
|
|
191 それから以下のようにコマンドを打ち、convertする。
|
|
192 ```
|
|
193 hg convert --filemap <削除ファイルのパスを書いたファイル> <対象リポジトリ> <新しく作られるリポジトリのパス>
|
|
194 ```
|
|
195
|
|
196 convertが完了したら一度`hg update`を行う必要がある。
|
|
197 updateしたらhg log等でリポジトリが正しく作成されているか確認し、find等を用いて指定したファイルが削除されているかも確認する。ファイルが消えてない場合大抵convert用のファイルの記述が正しいか、漏れがないか等を確認。
|
|
198
|
|
199 うまくいっていたら、元のリポジトリの.hg/hgrcを新しいリポジトリにコピーする。そして元のリポジトリを削除して新しい方をrenameすれば完了。
|
|
200
|
|
201 ### convert作業例(.svnを間違えて入れちゃったので消す場合)
|
|
202
|
|
203
|
|
204 ```
|
|
205 find ./ -name .svn > convert.txt #.svnの場所を探してconvert.txtに出力。
|
|
206 sed -e "s/\.\/\//exclude \"/g" convert.txt #convert.txt内の .// を exclude " に、.svn を " に置換。
|
|
207 sed -e "s/\.svn/\"/g" convert.txt
|
|
208 hg convert --filemap ./exclude.txt ../GCC_original ../GCC_original_rm_svn #convert(この前にhgrcでconvertを有効にしておく)
|
|
209 cd ../GCC_original_rm_svn
|
|
210 hg update # updateしないとファイルが構成されない。
|
|
211 hg log # 正しく作成されているかの確認。
|
|
212 find ./ -name .svn #ちゃんと消えているかの確認。
|
|
213 cp ../GCC_original/.hg/hgrc ./hg/hgrc #hgrcのコピー。
|
|
214 cd ..
|
|
215 rm -r GCC_original #元の削除
|
|
216 mv GCC_original_rm_svn GCC_original #rename
|
|
217 ```
|
|
218
|
|
219
|
|
220 ### メールでのpatch送信方法
|
|
221
|
|
222 メールで、最新のcommitをpatchとして送信する方法。
|
|
223
|
|
224 メールを送信したいlocalの /.hgrc を送信元の名前やメールの設定を追加編集する。
|
|
225
|
|
226 ```
|
|
227 [email]
|
|
228 method = smtp
|
|
229 from = Name <mail-address>
|
|
230 [smtp]
|
|
231 host = smtp.gmail.com
|
|
232 port = 587
|
|
233 tls = starttls
|
|
234 username = mail-address
|
|
235 ```
|
|
236
|
|
237
|
|
238 送信したいrepositoryの .hg/hgrc に、送信先のメールアドレスを設定する。
|
|
239
|
|
240 ```
|
|
241 [email]
|
|
242 to = mail-address
|
|
243 ```
|
|
244
|
|
245
|
|
246 patchをメールで送信するコマンドは以下。
|
|
247
|
|
248 ```
|
|
249 $ hg email .
|
|
250 ```
|
|
251
|
|
252 最初、abortが出る。
|
|
253
|
|
254 ```
|
|
255 abort: smtp.gmail.com certificate with fingerprint 9c:0a:cc:93:1d:e7:51:37:90:61:6b:a1:18:28:67:95:54:c5:69:a8 not verified
|
|
256 (check hostfingerprints or web.cacerts config setting)
|
|
257 ```
|
|
258
|
|
259 abortで出たfingerprintを、メールを送信したいlocalの /.hgrc に追加する。
|
|
260
|
|
261 ```
|
|
262 [hostfingerprints]
|
|
263 smtp.gmail.com = 9c:0a:cc:93:1d:e7:51:37:90:61:6b:a1:18:28:67:95:54:c5:69:a8
|
|
264 ```
|
|
265
|
|
266 Gmailを使用する際、
|
|
267 「安全性の低いアプリがアカウントにアクセスするのを許可する」
|
|
268 設定が必要となる場合がありますので、もしエラーが出たら設定してください。
|
|
269 https://support.google.com/accounts/answer/6010255
|
|
270
|
|
271 これらの設定で、patchをメールで送信することが出来るようになります。
|
|
272
|
|
273
|
|
274 ## 使い方(Eclipse編)
|
|
275
|
|
276 ### インストール
|
|
277 Eclipse3.3以上にて、
|
|
278 "Help"->"Software Updates"を選択し
|
|
279 "Add Site..."から以下のURLを入力する。
|
|
280
|
|
281 Name: Vectrace (Mercurial Eclipse plugin)
|
|
282 URL: http://www.vectrace.com/eclipse-update/
|
|
283
|
|
284 その後、新しく現れた項目にチェックを入れて、"install..."でインストール完了。
|
|
285
|
|
286 ### リポジトリの追加
|
|
287 "File" -> "New"-> "Project..."より、"Clone Repository using Mercurial"を選択し"Next"
|
|
288 URLにはコマンドラインと同じ様に
|
|
289
|
|
290 ssh://one@firefly.cr.ie.u-ryukyu.ac.jp/リポジトリ名 ローカル名
|
|
291
|
|
292 を入力し、ウィザードに従い必須項目を入力する。
|
|
293 成功すれば、左のウィンドウにプロジェクトが追加される。
|
|
294
|
|
295 ### その他の操作
|
|
296 ファイルを右クリックした時に現れる"Team"内にMercurialのコマンドが表示される。
|
|
297 内容はコマンドラインと一緒なので説明は割愛する。
|
|
298
|
|
299 ## リンク
|
|
300 - Mercurial の使い方のチュートリアル
|
|
301 http://www.selenic.com/mercurial/wiki/index.cgi/JapaneseTutorial
|
|
302 - Mercurial Eclipse
|
|
303 http://www.vectrace.com/mercurialeclipse/
|
|
304
|
|
305
|
|
306 # おすすめ設定
|
|
307 - ホームディレクトリの.hgrcに書いておくとおすすめの設定
|
|
308
|
|
309 ## xcodeのdiffを開かないようにしたい
|
|
310 ```
|
|
311 [ui]
|
|
312 merge=internal:merge
|
|
313 ```
|
|
314
|
|
315 - こう書いておくと `>>>>` `=====` `<<<<<` のgitっぽい感じでdiffが直接ファイルに書き出される
|
|
316 - xcodeのdiffとかvim diffは慣れてないと使いづらいので...
|
|
317 |