#format wiki #language ja このドキュメントはQuickStart2の翻訳です。 = イントロ = これを書いたのは筆者がQuickStart(訳:JapaneseQuickStart)を取り組んだところ、変更をリモートリポジトリにプッシュしようとしたときに問題に遭遇したからです。tonfaとKeltiaが私を手助けしてくれたように、このドキュメントが他の方の手助けになることを願いします :) = 最初にコミットする前に = == 空白で終わるすべてのファイルを削除する == コミットをする前にちょっとファイルをクリーンアップしたい場合はこの作業をして下さい。これを行うPythonスクリプトは下記の通りです。これを動かすために、[[http://www.jorendorff.com/articles/python/path/|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 }}} = 最初のコミットは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 }}} アクションにおいてこのすべてを[[http://hg.metaperl.com|my hg repo]] で見ることができます = これで準備ができています = 好きなラップトップ上で作業をして好きなだけサーバーにプッシュできます。サーバー上で作業をしない限り、{{{ update }}}をコールする必要はありません。 = 謝辞 = IRCチャネルにいたKeltiaとtonfaに感謝します(#mercurial on irc.freenode.net) ---- CategoryJapanese