このドキュメントは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)


CategoryJapanese

JapaneseQuickStart2 (last edited 2009-05-19 19:31:03 by localhost)