このドキュメントはQuickStart2の翻訳です。
イントロ
これを書いたのは筆者がQuickStart(訳:JapaneseQuickStart)を取り組んだところ、変更をリモートリポジトリにプッシュしようとしたときに問題に遭遇したからです。tonfaとKeltiaが私を手助けしてくれたように、このドキュメントが他の方の手助けになることを願いします
最初にコミットする前に
空白で終わるすべてのファイルを削除する
コミットをする前にちょっとファイルをクリーンアップしたい場合はこの作業をして下さい。これを行うPythonスクリプトは下記の通りです。これを動かすために、Jason Orendorffの path.py が必要です。
from path import path import re p = path('.') r = re.compile(r'\s$') for f in p.walkfiles(): if r.search(f): print f
コミットしているファイルのサイズをチェックアウトする
巨大なファイルをコミットする場合 hg push がなんでこんなに時間がかかるんだとイライラしながら待つでしょう:
from path import path p = path('.') for f in p.walkfiles(): print "%d\t%s" % (f.size, f)
意味のあるユーザー名を設定する
HGはデフォルトでパッチの著者としてEメールアドレスとして使い"No username found, using 'user@host' instead"と表示します。 この警告を回避するために、コミットする際にユーザー名を-uオプションで指定できますが、次のような行を追加して恒久的に設定することがベストです:
[ui] username = Author Name <email@address>
最初のコミットはhgignoreファイルでなければなりません
これを行う理由は、概念的に、ソースコードファイルよりも完全に異なる理由に対してリポジトリに追加されるからです。リビジョンの履歴はより正確でリバートするのが簡単になります。
下記のコードは筆者のもので、PythonによってコンパイルされたファイルとEmacsのバックアップファイルを省略します
syntax: glob *~ *.pyc syntax: regexp .*\#.*\#$
コミットをリモートリポジトリにプッシュする
オッケー、ローカルのラップトップ上で開発とコミットをしていて仕事内容をサーバーにバックアップすることを決定したときのシナリオです。次のことを行いました。リモートマシン上で、 /REPOSITORY/DataProc ディレクトリを作りcdコマンドでそのディレクトリに移動をして hg init を入力しました。
一つの問題点はURIがrootの"/"ではなくsshログインしている人のディレクトリに対して相対的であることでした。ですので2つの // を使わなければなりませんでした:
terrence-brannons-computer:~/Documents/DataProc/Development tbrannon$ hg -v push ssh://tbrannon@24.129.182.46//REPOSITORY/DataProc running ssh tbrannon@24.129.182.46 "hg -R /REPOSITORY/DataProc serve --stdio" Password: pushing to ssh://tbrannon@24.129.182.46//REPOSITORY/DataProc searching for changes remote: adding changesets remote: adding manifests remote: adding file changes remote: added 1 changesets with 359 changes to 359 files terrence-brannons-computer:~/Documents/DataProc/Development tbrannon$
verboseモードで行われたとしても、359のファイルに関する情報を伝えている間に解説はありませんでした。待っている間は落ち着きませんでしたが、動作しました。
リモートバックアップがファイルを表示しない
サーバーに移動したときに.hgファイルしか見つからなくても慌てないで下さい: プッシュはワーキングディレクトリを更新しません。ファイルが欲しい場合、 hg update を実行しますが、バックアップだけが欲しい場合、 hg push で十分です。
コミットをリモートリポジトリにプルする
上記のバリエーションにおいて、リモートマシンからプルを行いたいことがあります。たくさんの方法がありますが、気むずかしいファイアーウォールがあったとしても、手間のかからない方法は次の通りです:
local:~/hg/repo$ hg serve -p 8888 & local:~/hg/repo$ ssh -R8888:localhost:8888 user@remote.machine remote:~$ cd hg/repo remote:~/hg/repo$ hg pull http://localhost:8888
これは単に通常のsshログインを通したhttp接続に対してbackwards"トンネルをセットアップしているだけです。それからあたかも hg serveはローカルで行われたように hg pull が行われます。
リポジトリをWebに設置する
hgwebdir.cgi を使い次の作業を行います:
.hg/hgrc
[email] from = bauhaus@metaperl.com [web] style = gitweb name = faq-attack description = faq-attack.com source author = Terrence Brannon allow_archive = bz2, gz, zip
configファイル
"hgwebdir.cgi"は通常ファイルが"hgweb.config"と呼ばれることを要求します。しかしこの方法はCGIスクリプトのバージョンに依存することがあるので、"hgwebdir.cgi"のソースコードを見て、これがconfigファイルがどのようにそしてどこで要求するのか確認してみましょう!
[paths] faq-attack = /home/terry/domains/com/metaperl/hg/faq-attack
collections ディレクティブは動作しません。
getting the webserver in the picture
私は変わったことはしません。CGIスクリプトと同じようにそのままの状態でファイルを見ることが好きです。ですので次のようにしました:
DocumentRoot /home/terry/domains/com/metaperl/hg ScriptAlias /hgwebdir.cgi /home/terry/domains/com/metaperl/hg/hgwebdir.cgi
アクションにおいてこのすべてをmy hg repo で見ることができます
これで準備ができています
好きなラップトップ上で作業をして好きなだけサーバーにプッシュできます。サーバー上で作業をしない限り、 update をコールする必要はありません。
謝辞
IRCチャネルにいたKeltiaとtonfaに感謝します(#mercurial on irc.freenode.net)