Mercurial > hgbook
changeset 803:5276f40fca1c
Propagate e6c99cbd0abd
Updates to chapters 5, 6, and 7
author | Yoshiki Yazawa <yaz@honeyplanet.jp> |
---|---|
date | Thu, 09 Jul 2009 13:32:44 +0900 |
parents | de4142983445 |
children | 896ab6eaf1c6 |
files | ja/branch.tex ja/collab.tex ja/filenames.tex |
diffstat | 3 files changed, 470 insertions(+), 222 deletions(-) [+] |
line wrap: on
line diff
--- a/ja/branch.tex Sun Jun 21 09:20:47 2009 +0900 +++ b/ja/branch.tex Thu Jul 09 13:32:44 2009 +0900 @@ -180,19 +180,19 @@ $B$7$$%j%S%8%g%s$K%?%0$rIU$1$l$P$h$$!%(B %Mercurial stores tags in a normal revision-controlled file in your -%repository.If you've created any tags, you'll find them in a file -%named \sfilename{.hgtags}.When you run the \hgcmd{tag} command, -%Mercurial modifies this file, then automatically commits the change to -%it.This means that every time you run \hgcmd{tag}, you'll see a -%corresponding changeset in the output of \hgcmd{log}. +%repository. If you've created any tags, you'll find them in a file in +%the root of your repository named \sfilename{.hgtags}.When you run the +%\hgcmd{tag} command, Mercurial modifies this file, then automatically +%commits the change to it.This means that every time you run \hgcmd{tag}, +%you'll see a corresponding changeset in the output of \hgcmd{log}. %\interaction{tag.tip} Mercurial$B$O%?%0$r%j%]%8%H%j$NCf$NDL>o$N%j%S%8%g%s4IM}%U%!%$%k$KJ]B8$9$k!%(B -$B%?%0$r:n@.$7$?;~!$(B\sfilename{.hgtags}$B$H$$$&%U%!%$%k$K%?%0$,J]B8$5$l$F$$(B -$B$k$N$,J,$+$k$@$m$&!%(B\hgcmd{tag}$B%3%^%s%I$r<B9T$9$k$H(BMercurial$B$O$3$N%U%!%$(B -$B%k$rJQ99$7!$JQ99$r$3$N%U%!%$%k$K%3%_%C%H$9$k!%$D$^$j(B\hgcmd{tag}$B$r<B9T$9(B -$B$k$H$$$D$b(B\hgcmd{log}$B$N=PNO$NCf$KBP1~$9$k%A%'%s%8%;%C%H$r8+$k$3$H$K$J$k!%(B -\interaction{tag.tip} +$B%?%0$r:n@.$7$?;~!$%j%]%8%H%j$N%k!<%H$K$"$k(B\sfilename{.hgtags}$B$H$$$&%U%!%$(B +$B%k$K%?%0$,J]B8$5$l$F$$$k$N$,J,$+$k$@$m$&!%(B\hgcmd{tag}$B%3%^%s%I$r<B9T$9$k$H(B +Mercurial$B$O$3$N%U%!%$%k$rJQ99$7!$JQ99$r$3$N%U%!%$%k$K%3%_%C%H$9$k!%$D$^$j(B +\hgcmd{tag}$B$r<B9T$9$k$H$$$D$b(B\hgcmd{log}$B$N=PNO$NCf$KBP1~$9$k%A%'%s%8%;%C(B +$B%H$r8+$k$3$H$K$J$k!%(B \interaction{tag.tip} %\subsection{Handling tag conflicts during a merge} \subsection{$B%^!<%8$N:]$K%?%0$N%3%s%U%j%/%H$r2r7h$9$k(B}
--- a/ja/collab.tex Sun Jun 21 09:20:47 2009 +0900 +++ b/ja/collab.tex Thu Jul 09 13:32:44 2009 +0900 @@ -25,15 +25,18 @@ %For interactive use, the web interface lets you browse a single %repository or a collection of repositories. You can view the history %of a repository, examine each change (comments and diffs), and view -%the contents of each directory and file. +%the contents of each directory and file. You can even get a view of +%history that gives a graphical view of the relationships between +%individual changes and merges. $BBPOCE*$JMxMQ$G$O!$%&%'%V%$%s%?%U%'!<%9$K$h$j(B1$B$D$N%j%]%8%H%j$^$?$O$$$/$D$+(B $B$N%j%]%8%H%j$N%3%l%/%7%g%s$r1\Mw$9$k$3$H$,$G$-$k!%%j%]%8%H%j$NMzNr$r8+$?(B $B$j!$3F!9$NJQ99!J%3%a%s%H$d:9J,$r4^$`!K$rD4$Y$?$j!$%G%#%l%/%H%j$d%U%!%$%k(B -$B$NFbMF$r8+$k$3$H$,$G$-$k!%(B +$B$NFbMF$r8+$k$3$H$,$G$-$k!%$^$?!$MzNr$rI=<($7!$8D!9$NJQ99$d%^!<%8$N4X78$r(B +$B%0%i%U%#%+%k$KI=<($9$k$3$H$b2DG=$G$"$k!%(B -%Also for human consumption, the web interface provides an RSS feed of -%the changes in a repository. This lets you ``subscribe'' to a +%Also for human consumption, the web interface provides Atom and RSS feed +%of the changes in a repository. This lets you ``subscribe'' to a %repository using your favorite feed reader, and be automatically %notified of activity in that repository as soon as it happens. I find %this capability much more convenient than the model of subscribing to @@ -41,11 +44,11 @@ %additional configuration on the part of whoever is serving the %repository. -$B%&%'%V%$%s%?%U%'!<%9$O1\MwMQ$K%j%]%8%H%j$NJQ99$N(BRSS$B%U%#!<%I$rDs6!$9$k!%$3(B -$B$l$r;H$($P!$%j%]%8%H%j$NJQ2=$r9%$_$N%U%#!<%I%j!<%@$K$h$C$F(B``$B9XFI(B''$B$9$k$3(B -$B$H$,$G$-!$%j%]%8%H%j$G$N3hF0$,5/$3$k$H$9$0$5$^DLCN$r<u$1$i$l$k!%$3$N5!G=(B -$B$OC/$,%j%]%8%H%j$N%5!<%S%9$r9T$C$F$bDI2C$N@_Dj$rI,MW$H$7$J$$$?$a!$%a!<%j(B -$B%s%0%j%9%H$r9XFI$7$FDLCN$r<u$1$k%b%G%k$h$j$b$:$C$HJXMx$G$"$k!%(B +$B%&%'%V%$%s%?%U%'!<%9$O1\MwMQ$K%j%]%8%H%j$NJQ99$N(BAtom$B$*$h$S(BRSS$B%U%#!<%I$rDs(B +$B6!$9$k!%$3$l$r;H$($P!$%j%]%8%H%j$NJQ2=$r9%$_$N%U%#!<%I%j!<%@$K$h$C$F(B``$B9X(B +$BFI(B''$B$9$k$3$H$,$G$-!$%j%]%8%H%j$G$N3hF0$,5/$3$k$H$9$0$5$^DLCN$r<u$1$i$l(B +$B$k!%$3$N5!G=$OC/$,%j%]%8%H%j$N%5!<%S%9$r9T$C$F$bDI2C$N@_Dj$rI,MW$H$7$J$$(B +$B$?$a!$%a!<%j%s%0%j%9%H$r9XFI$7$FDLCN$r<u$1$k%b%G%k$h$j$b$:$C$HJXMx$G$"$k!%(B %The web interface also lets remote users clone a repository, pull %changes from it, and (when the server is configured to permit it) push @@ -62,15 +65,20 @@ %The easiest way to get started with the web interface is to use your %web browser to visit an existing repository, such as the master %Mercurial repository at -%\url{http://www.selenic.com/repo/hg?style=gitweb}. +%\url{http://www.selenic.com/repo/hg}. $B%&%'%V%$%s%?%U%'!<%9$N:G$b4JC1$J;O$aJ}$O%&%'%V%V%i%&%6$r;H$C$F(BMercurial$B$N(B -$B%^%9%?%j%]%8%H%j(B\url{http://www.selenic.com/repo/hg?style=gitweb}$B$N$h$&$J(B -$B4{B8$N%j%]%8%H%j$r;2>H$9$k$3$H$G$"$k!%(B +$B%^%9%?%j%]%8%H%j(B\url{http://www.selenic.com/repo/hg}$B$N$h$&$J4{B8$N%j%]%8(B +$B%H%j$r;2>H$9$k$3$H$G$"$k!%(B %If you're interested in providing a web interface to your own -%repositories, Mercurial provides two ways to do this. The first is -%using the \hgcmd{serve} command, which is best suited to short-term +%repositories, there are several good ways to do this. + +$B<+J,$N%j%]%8%H%j$K%&%'%V%$%s%?%U%'!<%9$rMQ0U$9$k>l9g!$$$$/$D$+NI$$J}K!$,(B +$B$"$k!%(B + +%The easiest and fastest way to get started in an informal environment is +%to use the \hgcmd{serve} command, which is best suited to short-term %``lightweight'' serving. See section~\ref{sec:collab:serve} below for %details of how to use this command. If you have a long-lived %repository that you'd like to make permanently available, Mercurial @@ -78,13 +86,12 @@ %which all common web servers support. See %section~\ref{sec:collab:cgi} for details of CGI configuration. -$B<+J,$N%j%]%8%H%j$K%&%'%V%$%s%?%U%'!<%9$rMQ0U$9$k>l9g!$(B2$BDL$j$N$d$jJ}$,$"(B -$B$k!%(B 1$B$DL\$NJ}K!$O(B\hgcmd{serve}$B%3%^%s%I$r;H$&J}K!$G!$$3$l$OC;4|4V$N(B``$B<j7Z(B -$B$J(B''$B%5!<%S%9$KE*$7$F$$$k!%$3$N%3%^%s%I$N>\:Y$J;HMQK!$K$D$$$F$O2<5-(B -$B$N(B~\ref{sec:collab:serve}$B@a$r;2>H$N$3$H!%%j%]%8%H%j$rD94|4V$K$o$?$j1JB3E*(B -$B$K%5!<%S%9$7$?$$>l9g$O!$(BMercurial$B$KFbB"$N(BCGI(Common Gateway Interface)$B%5(B -$B%]!<%H$rMxMQ$9$k$3$H$,$G$-$k!%(B CGI$B$N@_Dj$K$D$$$F$O(B~\ref{sec:collab:cgi}$B@a(B -$B$r;2>H$N$3$H!%(B +$B8x<0$G$O$J$$4D6-$G9T$&:G$b4JC1$GAa$$J}K!$O!$(B\hgcmd{serve}$B%3%^%s%I$r;H$&J}(B +$BK!$G!$$3$l$OC;4|4V$N(B``$B<j7Z$J(B''$B%5!<%S%9$KE*$7$F$$$k!%$3$N%3%^%s%I$N>\:Y$J(B +$B;HMQK!$K$D$$$F$O2<5-$N(B~\ref{sec:collab:serve}$B@a$r;2>H$N$3$H!%%j%]%8%H%j$r(B +$BD94|4V$K$o$?$j1JB3E*$K%5!<%S%9$7$?$$>l9g$O!$(BMercurial$B$KFbB"$N(BCGI(Common +Gateway Interface)$B%5%]!<%H$rMxMQ$9$k$3$H$,$G$-$k!%(B CGI$B$N@_Dj$K$D$$$F(B +$B$O(B~\ref{sec:collab:cgi}$B@a$r;2>H$N$3$H!%(B %\section{Collaboration models} \section{$B6&F1:n6H%b%G%k(B} @@ -173,37 +180,37 @@ $B5D<<!$%[%F%k$N%_!<%F%#%s%0%k!<%`$N$h$&$J!K0l%+=j$K=8$^$C$F?tF|4V$K$o$?$C(B $B$F>/?t$N%W%m%8%'%/%H$r=8CfE*$K%O%C%/$9$k!%(B -%A sprint is the perfect place to use the \hgcmd{serve} command, since -%\hgcmd{serve} does not requires any fancy server infrastructure. You -%can get started with \hgcmd{serve} in moments, by reading -%section~\ref{sec:collab:serve} below. Then simply tell the person -%next to you that you're running a server, send the URL to them in an -%instant message, and you immediately have a quick-turnaround way to -%work together. They can type your URL into their web browser and -%quickly review your changes; or they can pull a bugfix from you and -%verify it; or they can clone a branch containing a new feature and try -%it out. +%A sprint or a hacking session in a coffee shop are the perfect places to +%use the \hgcmd{serve} command, since \hgcmd{serve} does not requires any +%fancy server infrastructure. You can get started with \hgcmd{serve} in +%moments, by reading section~\ref{sec:collab:serve} below. Then simply +%tell the person next to you that you're running a server, send the URL +%to them in an instant message, and you immediately have a +%quick-turnaround way to work together. They can type your URL into +%their web browser and quickly review your changes; or they can pull a +%bugfix from you and verify it; or they can clone a branch containing a +%new feature and try it out. -$B%9%W%j%s%H$O(B\hgcmd{serve}$B%3%^%s%I$r;H$&$N$^$5$K$K$&$C$F$D$1$N4D6-$G$"$k!%(B -\hgcmd{serve}$B$O<j$N9~$s$@%5!<%P@_Hw$rI,MW$H$7$J$$!%2<$N(B -\ref{sec:collab:serve}$B%;%/%7%g%s$rFI$s$G$9$0$K(B\hgcmd{serve}$B%3%^%s%I$r;H$&(B -$B$3$H$,$G$-$k!%%5!<%P$r5/F0$7$F$$$k$3$H$rNY$N3+H/<T$KOC$7$?$j!$%0%k!<%W$K(B -URL$B$r%$%s%9%?%s%H%a%C%;!<%8$GAw$l$P!$$9$0$K?WB.$J6&F1:n6H$,$G$-$k!%(B -$BAw$C$?(BURL$B$rB>$N3+H/<T$,%V%i%&%6$KF~NO$9$l$P!$H`$i$O4JC1$K$"$J$?$NJQ99$r%l(B -$B%S%e!<$9$k$3$H$,$G$-$k$7!$$"$J$?$N9T$C$?%P%0%U%#%C%/%9$r(Bpull$B$7$F8!>Z$9$k(B -$B$3$H$b$G$-$k!%$5$i$K!$?75!G=$N<BAu$5$l$?%V%i%s%A$r%/%m!<%s$7$F;n$9$3$H$b(B -$B$G$-$k!%(B +$B%9%W%j%s%H$d%3!<%R!<%7%g%C%W$G$N%O%C%-%s%0%;%C%7%g%s$O(B\hgcmd{serve}$B%3%^%s(B +$B%I$r;H$&$N$^$5$K$K$&$C$F$D$1$N4D6-$G$"$k!%(B \hgcmd{serve}$B$O<j$N9~$s$@%5!<(B +$B%P@_Hw$rI,MW$H$7$J$$!%2<$N(B\ref{sec:collab:serve}$B%;%/%7%g%s$rFI$s$G$9$0$K(B +\hgcmd{serve}$B%3%^%s%I$r;H$&$3$H$,$G$-$k!%%5!<%P$r5/F0$7$F$$$k$3$H$rNY$N3+(B +$BH/<T$KOC$7$?$j!$%0%k!<%W$K(BURL$B$r%$%s%9%?%s%H%a%C%;!<%8$GAw$l$P!$$9$0$K?WB.(B +$B$J6&F1:n6H$,$G$-$k!%Aw$C$?(BURL$B$rB>$N3+H/<T$,%V%i%&%6$KF~NO$9$l$P!$H`$i$O4J(B +$BC1$K$"$J$?$NJQ99$r%l%S%e!<$9$k$3$H$,$G$-$k$7!$$"$J$?$N9T$C$?%P%0%U%#%C%/(B +$B%9$r(Bpull$B$7$F8!>Z$9$k$3$H$b$G$-$k!%$5$i$K!$?75!G=$N<BAu$5$l$?%V%i%s%A$r%/(B +$B%m!<%s$7$F;n$9$3$H$b$G$-$k!%(B %The charm, and the problem, with doing things in an ad hoc fashion %like this is that only people who know about your changes, and where %they are, can see them. Such an informal approach simply doesn't %scale beyond a handful people, because each individual needs to know -%about $n$ different repositories to pull from. +%about \emph{n} different repositories to pull from. $B%"%I%[%C%/$J$d$jJ}$G9T$&6&F1:n6H$NL%NO$HLdBj$O!$$"$J$?$NJQ99$rCN$C$F$$(B $B$F!$>l=j$bJ,$+$C$F$$$k?M!9$7$+JQ99$r;2>H$G$-$J$$$3$H$G$"$k!%$3$N$h$&$JHs(B -$B8x<0$J%"%W%m!<%A$O!$3F?M$,(B$n$$B8D$N0[$J$C$?%j%]%8%H%j$N$I$l$+$i(Bpull$B$r9T$($P(B -$B$$$$$+J,$+$C$F$$$kI,MW$,$"$k$?$a!$>/?M?t0J>e$K%9%1!<%k$7$J$$!%(B +$B8x<0$J%"%W%m!<%A$O!$3F?M$,(B\emph{n}$B8D$N0[$J$C$?%j%]%8%H%j$N$I$l$+$i(Bpull$B$r(B +$B9T$($P$$$$$+J,$+$C$F$$$kI,MW$,$"$k$?$a!$>/?M?t0J>e$K%9%1!<%k$7$J$$!%(B %\subsection{A single central repository} @@ -246,20 +253,50 @@ $B$3$NJ}K!$r<h$k$3$H$G!$:GDc8B$N%F%9%H$r9T$&$^$G!$LdBj$N$"$k2DG=@-$N$"$kJQ(B $B99$r8x3+$9$k$3$H$r0z$-1d$P$9$3$H$,$G$-$k!%(B -%In this kind of scenario, people usually use the \command{ssh} -%protocol to securely push changes to the central repository, as -%documented in section~\ref{sec:collab:ssh}. It's also usual to -%publish a read-only copy of the repository over HTTP using CGI, as in -%section~\ref{sec:collab:cgi}. Publishing over HTTP satisfies the +%If a team is hosting its own repository in this kind of scenario, people +%usually use the \command{ssh} protocol to securely push changes to the +%central repository, as documented in section~\ref{sec:collab:ssh}. It's +%also usual to publish a read-only copy of the repository over HTTP, as +%in section~\ref{sec:collab:cgi}. Publishing over HTTP satisfies the %needs of people who don't have push access, and those who want to use %web browsers to browse the repository's history. $B$3$N>u67$G$O!$3+H/<T$?$A$ODL>o!$Cf1{$N%j%]%8%H%j$XJQ99$r%W%C%7%e$9$k$?$a(B $B$K!$(B~\ref{sec:collab:ssh}$B@a$G@bL@$7$?$h$&$K(B\command{ssh}$B%W%m%H%3%k$rMQ$$(B $B$k!%$^$?(B~\ref{sec:collab:cgi}$B@a$G=R$Y$?$h$&$K!$%j%]%8%H%j$NFI$_<h$j@lMQ%3(B -$B%T!<$r(BCGI$B$rMQ$$$?(BHTTP$B$G8x3+$9$k$N$b0lHLE*$G$"$k!%(B HTTP$B$K$h$k8x3+$G!$%W%C(B -$B%7%e%"%/%;%98"$r;}$?$J$$?M!9$d%j%]%8%H%j$NMzNr$r%V%i%&%6$G;2>H$7$?$$?M$N(B -$B%K!<%:$rK~$?$9$3$H$,$G$-$k!%(B +$B%T!<$r(BHTTP$B$G8x3+$9$k$N$b0lHLE*$G$"$k!%(B HTTP$B$K$h$k8x3+$G!$%W%C%7%e%"%/%;%9(B +$B8"$r;}$?$J$$?M!9$d%j%]%8%H%j$NMzNr$r%V%i%&%6$G;2>H$7$?$$?M$N%K!<%:$rK~$?(B +$B$9$3$H$,$G$-$k!%(B + +%\subsection{A hosted central repository} +\subsection{$B%[%9%F%#%s%0$K$h$kCf1{%j%]%8%H%j%5!<%S%9(B} + +%A wonderful thing about public hosting services like Bitbucket +%(\url{http://bitbucket.org}) is that not only do they handle the +%fiddly server configuration details, such as user accounts, +%authentication, and secure wire protocols, they provide additional +%infrastructure to make this model work well. + +Bitbucket(\url{http://bitbucket.org})$B$N$h$&$J8x6&$N%[%9%F%#%s%0%5!<%S%9$G(B +$B$O!$%f!<%6%"%+%&%s%H$N@_Dj!$G'>Z!$%;%-%e%"$JDL?.%W%m%H%3%k$J$I$NLLE]$J%5!<(B +$B%P@_Dj$r8*Be$j$7$F$/$l$k$@$1$G$J$/!$$3$N%b%G%k$,$b$C$HNI$/5!G=$9$k$?$a$N(B +$B%$%s%U%i$rDs6!$7$F$$$k!%(B + +%For instance, a well-engineered hosting service will let +%people clone their own copies of a repository with a single +%click. This lets people work in separate spaces and share +%their changes when they're ready. + +$BNc$($P!$$&$^$/9=@.$5$l$?%[%9%F%#%s%0%5!<%S%9$O!$(B1$B%/%j%C%/$G%j%]%8%H%j$N%3(B +$B%T!<$r%/%m!<%s$G$-$k$h$&$K$J$C$F$$$k!%$3$l$K$h$j!$JL!9$N>l=j$G:n6H$r9T(B +$B$$!$=`Hw$,=PMh<!BhJQ99$r6&M-$9$k$3$H$,$G$-$k$h$&$K$J$k!%(B + +%In addition, a good hosting service will let people communicate with +%each other, for instance to say ``there are changes ready for you to +%review in this tree''. + +$B$^$?!$NI$$%[%9%F%#%s%0%5!<%S%9$O!$3+H/<TF1;N$,(B``$B$3$N%D%j!<$K%l%S%e!<$7$F(B +$BLc$$$?$$JQ99$,$"$k(B''$B$J$I$N$d$j$H$j$r$G$-$k$h$&$J5!G=$bDs6!$7$F$$$k!%(B %\subsection{Working with multiple branches} \subsection{$BJ#?t$N%V%i%s%A$G$N:n6H(B} @@ -288,7 +325,7 @@ %changes from one to another as the need arises. Because repositories %are independent of each other, unstable changes in a development %branch will never affect a stable branch unless someone explicitly -%merges those changes in. +%merges those changes into the stable branch. Mercurial$B$OJ#?t%V%i%s%A$K$h$kF1;~3+H/$r<h$j07$&$3$H$KFC$KE,$7$F$$$k!%3F!9(B $B$N(B``$B3+H/J}8~(B''$B$OCf1{%j%]%8%H%j$KCV$/$3$H$,2DG=$G!$I,MW$K$J$kEY$K$"$k%V%i(B @@ -329,9 +366,9 @@ $B%-%s%0%G%#%l%/%H%j$rI|85$9$k$3$H$,$G$-$k!%(B \interaction{branching.update} -%In addition, immediately after the main branch is tagged, someone can -%then clone the main branch on the server to a new ``stable'' branch, -%also on the server. +%In addition, immediately after the main branch is tagged, we can then +%clone the main branch on the server to a new ``stable'' branch, also on +%the server. %\interaction{branching.clone} $B$5$i$K!$%a%$%s%V%i%s%A$,%?%0IU$1$5$l$?D>8e$+$i%5!<%P>e$N%a%$%s%V%i%s%A$r(B @@ -339,40 +376,44 @@ $B$G$"$k!%(B \interaction{branching.clone} -%Someone who needs to make a change to the stable branch can then clone -%\emph{that} repository, make their changes, commit, and push their -%changes back there. +%If we need to make a change to the stable branch, we can then clone +%\emph{that} repository, make our changes, commit, and push our changes +%back there. %\interaction{branching.stable} %Because Mercurial repositories are independent, and Mercurial doesn't %move changes around automatically, the stable and main branches are -%\emph{isolated} from each other. The changes that you made on the +%\emph{isolated} from each other. The changes that we made on the %main branch don't ``leak'' to the stable branch, and vice versa. stable$B%V%i%s%A$KJQ99$r2C$($?$$>l9g!$(B\emph{$B$=$N(B}$B%j%]%8%H%j$r%/%m!<%s$7!$(B -$BJQ99$r9T$$!$%3%_%C%H$7$?8e$K$=$NJQ99$r%5!<%P$K(Bpush$B$7$FLa$9$3$H$,$G$-$k!%(B +$BJQ99$r9T$$!$%3%_%C%H$7$?8e$K$=$NJQ99$r%5!<%P$K(Bpush$B$9$k$3$H$,$G$-$k!%(B \interaction{branching.stable} Mercurial$B%j%]%8%H%j$OFHN)$G!$JQ99$r<+F0E*$KGH5Z$5$;$k$3$H$b$J$$$N$G!$(B stable$B$H(Bmain$B%V%i%s%A$O8_$$$K(B\emph{$B3VN%$5$l$F$$$k(B}$B!%%a%$%s%V%i%s%A$K9T$C(B $B$?JQ99$,(Bstable$B%V%i%s%A$KO3$l=P$7$?$j!$$=$N5U$K$J$C$?$j$9$k$3$H$O$J$$!%(B -%You'll often want all of your bugfixes on the stable branch to show up - +%We'll often want all of your bugfixes on the stable branch to show up %on the main branch, too. Rather than rewrite a bugfix on the main -%branch, you can simply pull and merge changes from the stable to the -%main branch, and Mercurial will bring those bugfixes in for you. +%branch, we can simply pull and merge changes from the stable to the +%main branch, and Mercurial will bring those bugfixes in for us. %\interaction{branching.merge} -%The main branch will still contain changes that are not on the stable -%branch, but it will also contain all of the bugfixes from the stable -%branch. The stable branch remains unaffected by these changes. $BB?$/$N>l9g!$(Bstable$B%V%i%s%A$KBP$7$F9T$C$?%P%0=$@5$r%a%$%s%V%i%s%A$KBP$7$F(B $B$b<h$j9~$_$?$$$H9M$($k$@$m$&!%%P%0=$@5$r%a%$%s%V%i%s%A$G$b$&0lEY9T$&$N$G(B $B$O$J$/!$(BMercurial$B$r;H$C$FJQ99$r(Bstable$B%V%i%s%A$+$i(Bpull$B$7$F4JC1$K%a%$%s%V%i(B $B%s%A$X%^!<%8$9$k$3$H$,$G$-$k!%(B \interaction{branching.merge} -$B%a%$%s%V%i%s%A$K$O(Bstable$B%V%i%s%A$K$J$$JQ99$,$"$k$,!$(Bstable$B%V%i%s%A$K$"$k(B -$B%P%0=$@5$O$9$Y$F<h$j9~$s$G$$$k!%$3$NA`:n$N8e$G$b(Bstable$B%V%i%s%A$O0JA0$HJQ(B -$B$o$i$J$$$^$^$G$"$k!%(B + +%The main branch will still contain changes that are not on the stable +%branch, but it will also contain all of the bugfixes from the stable +%branch. The stable branch remains unaffected by these changes, since +%changes are only flowing from the stable to the main branch, and not the +%other way. + +$B%a%$%s%V%i%s%A$O(Bstable$B%V%i%s%A$K$"$k%P%0=$@5$r$9$Y$F<h$j9~$s$G$$$k$@$1$G(B +$B$J$/!$(B stable$B%V%i%s%A$K$O$J$$JQ99$b;}$C$F$$$k!%$3$NA`:n$r9T$C$F$b(Bstable$B%V(B +$B%i%s%A$O$3$l$i$NJQ99$K$h$k1F6A$r<u$1$J$$!%$J$<$J$iJQ99$O(Bstable$B%V%i%s%A$+(B +$B$i%a%$%s%V%i%s%A$X$N0lJ}8~$N$_$KGH5Z$7!$5U8~$-$K$OGH5Z$7$J$$$+$i$G$"$k!%(B %\subsection{Feature branches} \subsection{$B5!G=$K$h$k%V%i%s%A(B} @@ -569,14 +610,14 @@ $B$3$l$i$N%D!<%k$G$O6&M-(Bpush$B%b%G%k$r;H$&B>$J$/!$$=$l0J30$N2?$+$r$7$?$$$N$G(B $B$"$l$P!$!J<+NO$G%Q%C%A$rEv$F$k$J$I$NJ}K!$G!K30It$G9T$&I,MW$,$"$k!%(B -%A good distributed revision control tool, such as Mercurial, will -%support both models. You and your collaborators can then structure -%how you work together based on your own needs and preferences, not on -%what contortions your tools force you into. +%A good distributed revision control tool will support both models. You +%and your collaborators can then structure how you work together based on +%your own needs and preferences, not on what contortions your tools force +%you into. -Mercurial$B$N$h$&$JNI$$J,;6%j%S%8%g%s%3%s%H%m!<%k%D!<%k$O!$N>J}$N%b%G%k$r%5(B -$B%]!<%H$9$k!%%f!<%6$d6(NO<T$O%D!<%k$K$h$C$F6/MW$5$l$k%b%G%k$G$O$J$/!$MW5a(B -$B$d9%$_$K1~$8$?6&F1:n6H$N9=@.$r7h$a$k$3$H$,$G$-$k!%(B +$BNI$$J,;6%j%S%8%g%s%3%s%H%m!<%k%D!<%k$O!$N>J}$N%b%G%k$r%5%]!<%H$9$k!%%f!<(B +$B%6$d6(NO<T$O%D!<%k$K$h$C$F6/MW$5$l$k%b%G%k$G$O$J$/!$MW5a$d9%$_$K1~$8$?6&(B +$BF1:n6H$N9=@.$r7h$a$k$3$H$,$G$-$k!%(B %\subsection{Where collaboration meets branch management} \subsection{$B6&F1:n6H$,%V%i%s%A4IM}$HD>LL$9$k$H$3$m(B} @@ -599,11 +640,10 @@ %\section{The technical side of sharing} \section{$B6&M-$N5;=QE*B&LL(B} -%The remainder of this chapter is devoted to the question of serving -%data to your collaborators. +%The remainder of this chapter is devoted to the question of sharing +%changes with your collaborators. -$B$3$N>O$N;D$j$NItJ,$G$O!$6(NO<T$K%G!<%?$r%5!<%S%9$9$k:]$N5?LdE@$K$D$$$F=R(B -$B$Y$k!%(B +$B$3$N>O$N;D$j$NItJ,$G$O!$6(NO<T$HJQ99$r6&M-$9$k:]$N5?LdE@$K$D$$$F=R$Y$k!%(B %\section{Informal sharing with \hgcmd{serve}} \section{\hgcmd{serve}$B$K$h$kHs8x<0$J6&M-(B} @@ -724,15 +764,16 @@ $B0BA4$K(Bpush$B$G$-$k!%$3$N%W%m%H%3%k$NMxMQ$K$O!$%/%i%$%"%s%HB&$+%5!<%PB&$K>/!9(B $B@_Dj$,I,MW$G$"$k!%(B -%If you're not familiar with ssh, it's a network protocol that lets you -%securely communicate with another computer. To use it with Mercurial, -%you'll be setting up one or more user accounts on a server so that -%remote users can log in and execute commands. +%If you're not familiar with ssh, it's the name of both a command and a +%network protocol that let you securely communicate with another +%computer. To use it with Mercurial, you'll be setting up one or more +%user accounts on a server so that remote users can log in and execute +%commands. -ssh$B$r$"$^$j;H$C$?$3$H$,$J$$%f!<%6$N$?$a$K@bL@$9$k$H!$(Bssh$B$OB>$N%3%s%T%e!<(B -$B%?$H0BA4$KDL?.$r9T$&$?$a$N%M%C%H%o!<%/%W%m%H%3%k$G$"$k!%(B Mercurial$B$G;H$&(B -$B$?$a$K$O!$(B1$B$D0J>e$N%"%+%&%s%H$r%5!<%P$K@_Dj$7!$%j%b!<%H%f!<%6$,%m%0%$%s(B -$B$7!$%3%^%s%I$r<B9T$G$-$k$h$&$K$9$kI,MW$,$"$k!%(B +ssh$B$KFk@w$_$N$J$$%f!<%6$N$?$a$K@bL@$9$k$H!$(Bssh$B$OB>$N%3%s%T%e!<%?$H0BA4$K(B +$BDL?.$r9T$&$?$a$N%3%^%s%I$*$h$S%M%C%H%o!<%/%W%m%H%3%k$NL>>N$G$"$k!%(B +Mercurial$B$G;H$&$?$a$K$O!$(B1$B$D0J>e$N%"%+%&%s%H$r%5!<%P$K@_Dj$7!$%j%b!<%H%f!<(B +$B%6$,%m%0%$%s$7!$%3%^%s%I$r<B9T$G$-$k$h$&$K$9$kI,MW$,$"$k!%(B %(If you \emph{are} familiar with ssh, you'll probably find some of the %material that follows to be elementary in nature.) @@ -827,57 +868,52 @@ $B%H!<%k$5$l$F$$$k$O$:$@!%!KK|$,0l%$%s%9%H!<%k$5$l$F$$$J$+$C$?>l9g$O!$%7%9(B $B%F%`$N%I%-%e%a%s%H$r;2>H$7$F%$%s%9%H!<%kJ}K!$rD4$Y$FM_$7$$!%(B -%On Windows, you'll first need to choose download a suitable ssh -%client. There are two alternatives. -Windows$B$G$O!$$^$:E,@Z$J(Bssh$B%/%i%$%"%s%H$r%@%&%s%m!<%I$9$kI,MW$,$"$k!%MxMQ(B -$B2DG=$J%/%i%$%"%s%H$O(B2$B$D$"$k!%(B -\begin{itemize} -%\item Simon Tatham's excellent PuTTY package~\cite{web:putty} provides -% a complete suite of ssh client commands. - \item Simon Tatham$B$K$h$kHs>o$KM%$l$?(BPuTTY$B%Q%C%1!<%8(B~\cite{web:putty}$B$O(B - ssh$B%/%i%$%"%s%H$N40A4$J%3%^%s%I72$rDs6!$9$k!%(B -%\item If you have a high tolerance for pain, you can use the Cygwin -% port of OpenSSH. - \item $BLLE]$r1^$o$J$$$N$G$"$l$P!$(BCygwin$BHG$N(BOpenSSH$B$r;H$&$3$H$b$G$-$k!%(B -\end{itemize} -%In either case, you'll need to edit your \hgini\ file to tell -%Mercurial where to find the actual client command. For example, if -%you're using PuTTY, you'll need to use the \command{plink} command as -%a command-line ssh client. +%On Windows, the TortoiseHg package is bundled with a version of Simon +%Tatham's excellent \command{plink} command, and you should not +%need to do any further configuration. -$B$I$N>l9g$b(B\hgini\ $B%U%!%$%k$rJT=8$7!$(BMercurial$B$K<B:]$N%3%^%s%I$,$I$3$K$"$k(B -$B$N$+$r;X<($7$J$1$l$P$J$i$J$$!%Nc$($P(BPuTTY$B$r;H$&>l9g$O!$(B\command{plink}$B%3(B -$B%^%s%I$r%3%^%s%I%i%$%sHG(Bssh$B%/%i%$%"%s%H$H$7$F;HMQ$9$k!%(B - - -\begin{codesample2} - [ui] - ssh = C:/path/to/plink.exe -ssh -i "C:/path/to/my/private/key" -\end{codesample2} - -\begin{note} -% The path to \command{plink} shouldn't contain any whitespace -% characters, or Mercurial may not be able to run it correctly (so -% putting it in \dirname{C:\\Program Files} is probably not a good -% idea). -\command{plink}$B$X$N%Q%9$O6uGrJ8;z$r4^$s$G$O$J$i$J$$!%6uGr$r4^$`$H(B -Mercurial$B$O@5$7$/<B9T$9$k$3$H$,$G$-$J$$!%!J=>$C$F(B\dirname{C:\\Program -Files}$B$XCV$/$N$O$$$$9M$($H$O8@$($J$$!%!K(B -\end{note} +Windows$B$G$O!$(BTortoiseHg$B%Q%C%1!<%8$K(BSimon Tatham$B$K$h$kM%$l$?%3%^%s%I$G$"$k(B +\command{plink}$B$,F1:-$5$l$F$*$j!$2?$b@_Dj$9$k$3$H$J$/MxMQ2DG=$G$"$k!%(B %\subsection{Generating a key pair} \subsection{$B80%Z%"$N:n@.(B} -%To avoid the need to repetitively type a password every time you need -%to use your ssh client, I recommend generating a key pair. On a -%Unix-like system, the \command{ssh-keygen} command will do the trick. -%On Windows, if you're using PuTTY, the \command{puttygen} command is -%what you'll need. +%To avoid the need to repetitively type a password every time you need to +%use your ssh client, I recommend generating a key pair. ssh$B%/%i%$%"%s%H$r;H$&EY$K7+JV$7%Q%9%o!<%I$rF~NO$9$k$N$rHr$1$k$?$a$K!$80(B -$B%Z%"$r:n@.$9$k$3$H$r4+$a$k!%(BUnix$B7O%7%9%F%`$G$O!$(B\command{ssh-keygen}$B%3%^(B -$B%s%I$G:n@.$G$-$k!%(BWindows$B$G(BPuTTY$B$r;H$C$F$$$k$N$G$"$l(B -$B$P!$(B\command{puttygen}$B$G:n@.$G$-$k!%(B +$B%Z%"$r:n@.$9$k$3$H$r4+$a$k!%(B + +\begin{note} +%Key pairs are not mandatory +$B80%Z%"$OI,?\$G$O$J$$(B + +%Mercurial knows nothing about ssh authentication or key pairs. You can, +%if you like, safely ignore this section and the one that follows until +%you grow tired of repeatedly typing ssh passwords. + +Mercurial$B<+?H$O(Bssh$B$G$NG'>Z$d80%Z%"$K$D$$$F$O0l@Z4XCN$7$J$$!%(Bssh$B%Q%9%o!<%I(B +$B$NF~NO$K7q$`$3$H$,$J$1$l$P!$$3$N@a$H8e$N@a$rL5;k$7$F$b:9$7;Y$($J$$!%(B +\end{note} + +\begin{itemize} +% \item On a Unix-like system, the \command{ssh-keygen} command will do +% the trick. + \item Unix$B7O%7%9%F%`$G$O!$(B\command{ssh-keygen}$B%3%^%s%I$G80%Z%"$r:n@.$G$-$k!%(B +% \item On Windows, if you're using TortoiseHg, you may need to download +% a command named \command{puttygen} from the PuTTY web site +% \url{http://www.chiark.greenend.org.uk/~sgtatham/putty} to +% generate a key pair. See the \command{puttygen} documentation +% \url{http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter8.htm} +% for details of how use the command. + \item Windows$B$G(BTortoiseHg$B$r;H$C$F$$$k$N$G$"$l$P!$(BPuTTY$B$N%&%'%V%5%$%H(B + \url{http://www.chiark.greenend.org.uk/~sgtatham/putty}$B$+$i%@%&%s(B + $B%m!<%I$G$-$k(B\command{puttygen}$B$H$$$&%3%^%s%I$G80%Z%"(B + $B$r:n@.$G$-$k!%$3$N%3%^%s%I$N;HMQK!$N>\:Y$K$D$$$F$O(B + \command{puttygen}$B$N%I%-%e%a%s%H(B + \url{http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter8.htm} + $B$r;2>H$5$l$?$$!%(B +\end{itemize} %When you generate a key pair, it's usually \emph{highly} advisable to %protect it with a passphrase. (The only time that you might not want @@ -944,31 +980,44 @@ %On Unix-like systems, the agent is called \command{ssh-agent}, and %it's often run automatically for you when you log in. You'll need to %use the \command{ssh-add} command to add passphrases to the agent's -%store. On Windows, if you're using PuTTY, the \command{pageant} -%command acts as the agent. It adds an icon to your system tray that -%will let you manage stored passphrases. +%store. Unix$B7O%7%9%F%`$G$O%(!<%8%'%s%H$O(B\command{ssh-agent}$B$H8F$P$l!$%m%0%$%s$9$k(B $B$H<+F0E*$K5/F0$5$l$k!%(B\command{ssh-add}$B%3%^%s%I$rMQ$$$F%Q%9%U%l!<%:$r%(!<(B -$B%8%'%s%H$K5-21$5$;$k!%(BWindows$B$G(BPuTTY$B$r;H$C$F$$$k>l9g$O!$(B\command{pageant}$B%3(B -$B%^%s%I$,%(!<%8%'%s%H$H$7$FF0:n$9$k!%$3$N%3%^%s%I$O5-21$7$?%Q%9%U%l!<%:$r(B -$B4IM}$9$k$?$a$K%7%9%F%`%H%l%$$K%"%$%3%s$rDI2C$9$k!%(B +$B%8%'%s%H$K5-21$5$;$k!%(B +%On Windows, if you're using TortoiseHg, the <command>pageant</command> +%command acts as the agent. As with \command{puttygen}, you'll need to +%download \command{pageant} +%\url{http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html} +%from the PuTTY web site and read its documentation +%\url{http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter9.html#pageant}. +%The \command{pageant} command adds an icon to your system tray that will +%let you manage stored passphrases. + +Windows$B$G(BTortoiseHg$B$r;H$C$F$$$k>l9g$O!$(B\command{pageant}$B%3%^%s%I$,%(!<%8%'(B +$B%s%H$H$7$FF0:n$9$k!%(B \command{puttygen}$B%3%^%s%I$N;~$HF1MM$K(B +\command{pageant}$B%3%^%s%I$O(BPuTTY$B$N%&%'%V%5%$%H(B +\url{http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html}$B$+$i(B +$B%@%&%s%m!<%I$G$-$k!%;HMQK!$K$D$$$F$O(B +\url{http://the.earth.li/~sgtatham/putty/0.60/htmldoc/Chapter9.html#pageant} +$B$r;2>H$5$l$?$$!%(B \command{pageant}$B%3%^%s%I$O5-21$7$?%Q%9%U%l!<%:$r4IM}$9(B +$B$k$?$a$K%7%9%F%`%H%l%$$K%"%$%3%s$rDI2C$9$k!%(B %\subsection{Configuring the server side properly} \subsection{$B%5!<%P$N@5$7$$@_Dj(B} -%Because ssh can be fiddly to set up if you're new to it, there's a -%variety of things that can go wrong. Add Mercurial on top, and -%there's plenty more scope for head-scratching. Most of these -%potential problems occur on the server side, not the client side. The -%good news is that once you've gotten a configuration working, it will -%usually continue to work indefinitely. +%Because ssh can be fiddly to set up if you're new to it, a variety of +%things can go wrong. Add Mercurial on top, and there's plenty more +%scope for head-scratching. Most of these potential problems occur on +%the server side, not the client side. The good news is that once you've +%gotten a configuration working, it will usually continue to work +%indefinitely. -ssh$B$O47$l$F$$$J$$$H@_Dj$,Fq$7$$$?$a!$4V0c$$$rHH$9M>CO$O$$$?$k=j$K$"$k!%(B -Mercurial$B$H6&$KF0$+$9>l9g!$$5$i$KB?$/$,BT$A9=$($F$$$k!%$3$l$i$NKX$s$I$,%/(B -$B%i%$%"%s%HB&$G$O$J$/%5!<%PB&$G5/$-$k!%$7$+$70lEY$-$A$s$HF0:n$9$k@_Dj$r$7(B -$B$F$7$^$($P!$F0:n$O$:$C$HB3$/!%(B +ssh$B$O47$l$F$$$J$$$H@_Dj$,Fq$7$$$?$a!$?7$?$K;H$$;O$a$k>l9g!$MM!9$JIT6q9g$,(B +$B5/$-$k2DG=@-$,$"$k!%(BMercurial$B$H6&$KF0$+$9>l9g!$$5$i$KB?$/$,BT$A9=$($F$$(B +$B$k!%$3$l$i$NKX$s$I$,%/%i%$%"%s%HB&$G$O$J$/%5!<%PB&$G5/$-$k!%$7$+$70lEY$-(B +$B$A$s$HF0:n$9$k@_Dj$r$7$F$7$^$($P!$F0:n$O$:$C$HB3$/!%(B %Before you try using Mercurial to talk to an ssh server, it's best to %make sure that you can use the normal \command{ssh} or \command{putty} @@ -1185,39 +1234,56 @@ %Both \command{ssh} and \command{plink} accept a \cmdopt{ssh}{-C} %option which turns on compression. You can easily edit your \hgrc\ to %enable compression for all of Mercurial's uses of the ssh protocol. +%Here is how to do so for regular \command{ssh} on Unix-like systems, for +%example. + \command{ssh}$B%3%^%s%I$b(B\command{plink}$B%3%^%s%I$b05=L$rM-8z$K$9$k(B -\cmdopt{ssh}{-C}$B%*%W%7%g%s$,;H$($k!%(B\hgrc\ $B%U%!%$%k$rJT=8$7$F(BMercurial$B$,(B -$B05=L$D$-$N(Bssh$B%W%m%H%3%k$r;HMQ$9$k$h$&$K@_Dj$9$k$3$H$,$G$-$k!%(B +\cmdopt{ssh}{-C}$B%*%W%7%g%s$,;H$($k!%(B \hgrc\ $B%U%!%$%k$rJT=8$7$F(BMercurial$B$,(B +$B05=L$D$-$N(Bssh$B%W%m%H%3%k$r;HMQ$9$k$h$&$K@_Dj$9$k$3$H$,$G$-$k!%(B Unix$B7O%7%9(B +$B%F%`$GDL>o$N(B\command{ssh}$B%3%^%s%I$r@_Dj$9$kNc$O<!$N$h$&$K$J$k!%(B \begin{codesample2} [ui] ssh = ssh -C \end{codesample2} -%If you use \command{ssh}, you can configure it to always use -%compression when talking to your server. To do this, edit your -%\sfilename{.ssh/config} file (which may not yet exist), as follows. -\command{ssh}$B$G%5!<%P$X@\B3$9$k;~$K>o$K05=L$r;HMQ$9$k$h$&$K@_Dj$9$k$3$H$,(B -$B$G$-$k!%(B\sfilename{.ssh/config}$B%U%!%$%k!JB8:_$7$J$$>l9g$O:n@.$9$k!K$r<!(B -$B$N$h$&$KJT=8$9$k!%(B +%If you use \command{ssh} on a Unix-like system, you can configure it to +%always use compression when talking to your server. To do this, edit +%your \sfilename{.ssh/config} file (which may not yet exist), as follows. + +Unix$B7O%7%9%F%`$G(B\command{ssh}$B$rMQ$$$F%5!<%P$X@\B3$7$F$$$k>l9g!$%5!<%P$X$N(B +$B@\B3;~$K>o$K05=L$r;HMQ$9$k$h$&$K@_Dj$9$k$3$H$,$G$-$k!%@_Dj$K$O(B +\sfilename{.ssh/config}$B%U%!%$%k!JB8:_$7$J$$>l9g$O:n@.$9$k!K$r<!$N$h$&$KJT(B +$B=8$9$k!%(B + \begin{codesample2} Host hg Compression yes HostName hg.example.com \end{codesample2} -%This defines an alias, \texttt{hg}. When you use it on the -%\command{ssh} command line or in a Mercurial \texttt{ssh}-protocol -%URL, it will cause \command{ssh} to connect to \texttt{hg.example.com} -%and use compression. This gives you both a shorter name to type and -%compression, each of which is a good thing in its own right. -$B$3$l$O(Balias \texttt{hg}$B$rDj5A$9$k!%$3$N(Balias$B$r(B\command{ssh}$B$N%3%^%s%I%i%$(B -$B%s$G;H$&$+(BMercurial \texttt{ssh}-$B%W%m%H%3%k(B URL$B$G;HMQ$9$k$H(B\command{ssh} -$B%3%^%s%I(Bh$B$O(B\texttt{hg.example.com}$B$X05=L$rMQ$$$F@\B3$r9T$&!%C;=L7A$N%[%9(B -$B%HL>$H05=L$N@_Dj$rF1;~$K9T$&$3$H$,$G$-$k!%(B + +%This defines a hostname alias, \texttt{hg}. When you use that hostname +%on the \command{ssh} command line or in a Mercurial +%\texttt{ssh}-protocol URL, it will cause \command{ssh} to connect to +%\texttt{hg.example.com} and use compression. This gives you both a +%shorter name to type and compression, each of which is a good thing in +%its own right. + +$B$3$l$O%[%9%HL>$N%(%$%j%"%9(B\texttt{hg}$B$rDj5A$9$k!%$3$N%[%9%HL>$r(B +\command{ssh}$B$N%3%^%s%I%i%$%s$^$?$O(BMercurial \texttt{ssh}-$B%W%m%H%3%k$G$N(B +URL$B$G;HMQ$9$k$H!$(B\command{ssh}$B%3%^%s%I$O(B\texttt{hg.example.com}$B$X$N@\B3$K(B +$B05=L$rMQ$$$k!%$3$NJ}K!$GC;=L7A$N%[%9%HL>$H05=L$N@_Dj$rF1;~$K9T$&$3$H$,$G(B +$B$-$k!%(B %\section{Serving over HTTP using CGI} \section{CGI$B$r;HMQ$7$?(BHTTP$B$K$h$k%5!<%S%9(B} \label{sec:collab:cgi} +%The simplest way to host one or more repositories in a permanent way is +%to use a web server and Mercurial's CGI support. + +$B0l$D$^$?$OJ#?t$N%j%]%8%H%j$r1JB3E*$K%5!<%S%9$9$k:G$b4JC1$JJ}K!$O!$%&%'%V(B +$B%5!<%P$G(BMercurial$B$N(BCGI$B%5%]!<%H$rMxMQ$9$k$3$H$G$"$k!%(B + %Depending on how ambitious you are, configuring Mercurial's CGI %interface can take anything from a few moments to several hours. @@ -1234,17 +1300,29 @@ $B$@$m$&!%(B \begin{note} -% Configuring a web server is a complex, fiddly, and highly -% system-dependent activity. I can't possibly give you instructions -% that will cover anything like all of the cases you will encounter. -% Please use your discretion and judgment in following the sections -% below. Be prepared to make plenty of mistakes, and to spend a lot -% of time reading your server's error logs. +High pain tolerance required + +%Configuring a web server is a complex, fiddly, and highly +%system-dependent activity. I can't possibly give you instructions that +%will cover anything like all of the cases you will encounter. Please use +%your discretion and judgment in following the sections below. Be +%prepared to make plenty of mistakes, and to spend a lot of time reading +%your server's error logs. + $B%&%'%V%5!<%P$N@_Dj$OJ#;($+$DLq2p$G%7%9%F%`0MB8$N:n6H$G$"$k!%(B $BFI<T$,Ax6x$9$k$9$Y$F$N%1!<%9$K$D$$$F<j0z$-$r$9$k$3$H$O$G$-$J$$$@$m$&!%(B $B0J2<$N%;%/%7%g%s$G$O!$FI$_$J$,$iFI<T<+?H$N;WN8$HH=CG$rF/$+$;$FM_$7$$!%(B $B$?$/$5$s$N%_%9$rHH$7!$%5!<%P$N%(%i!<%m%0$N2rFI$KB?$/$N;~4V$r3d$/$3$H$K$J(B $B$k$N$r4N$KLC$8$F$*$$$FM_$7$$!%(B + +%If you don't have a strong stomach for tweaking configurations over and +%over, or a compelling need to host your own services, you might want to +%try one of the public hosting services that I mentioned earlier. + +$B1d!9$H@_Dj$N<jD>$7$rB3$1$k$3$H$,2fK}$G$-$J$+$C$?$j!$<+A0$N%5!<%S%9$,I,?\(B +$B$G$J$+$C$?$j$9$k>l9g$O!$A0=R$N8x6&%[%9%F%#%s%0%5!<%S%9$r8!F$$7$?J}$,NI$$(B +$B$@$m$&!%(B + \end{note} %\subsection{Web server configuration checklist} @@ -1255,11 +1333,12 @@ $B$3$3$+$i@h$X?J$`A0$K!$FI<T$N%7%9%F%`$K$D$$$F3NG'$r$7$F$*$3$&!%(B \begin{enumerate} -%\item Do you have a web server installed at all? Mac OS X ships with -% Apache, but many other systems may not have a web server installed. - \item $B%&%'%V%5!<%P$O$9$G$K%$%s%9%H!<%k$5$l$F$$$k$+!)(B Mac OS X$B$K$OI8=`$G(B - Apache$B$,%$%s%9%H!<%k$5$l$F$$$k$,!$B>$N%7%9%F%`$G$O%&%'%V%5!<%P$,(B - $B%$%s%9%H!<%k$5$l$F$$$J$$$3$H$b$"$k!%(B +% \item Do you have a web server installed at all? Mac OS X and some +% Linux distributions ship with Apache, but many other systems may +% not have a web server installed. + \item $B%&%'%V%5!<%P$O$9$G$K%$%s%9%H!<%k$5$l$F$$$k$+!)(B Mac OS X$B$d$$$/$D$+(B + $B$N(BLinux$B%G%#%9%H%j%S%e!<%7%g%s$G$OI8=`$G(BApache$B$,%$%s%9%H!<%k$5$l$F(B + $B$$$k$,!$%&%'%V%5!<%P$,%$%s%9%H!<%k$5$l$F$$$J$$%7%9%F%`$bB?$/$"$k!%(B %\item If you have a web server installed, is it actually running? On % most systems, even if one is present, it will be disabled by % default. @@ -1679,13 +1758,18 @@ $BF1;~$KMQ$$$k$3$H$b$G$-$k!%(B %\begin{note} -% If multiple repositories have the same virtual path, -% \sfilename{hgwebdir.cgi} will not report an error. Instead, it will -% behave unpredictably. +%Beware duplicate virtual paths + +%If several repositories have the same virtual path, +%\sfilename{hgwebdir.cgi} will not report an error. Instead, it will +%behave unpredictably. %\end{note} + \begin{note} -$BJ#?t$N%j%]%8%H%j$,F1$82>A[%Q%9$r;}$D>l9g!$(B\sfilename{hgwebdir.cgi}$B$O%(%i!<(B - $B$r@8$8$J$$$,!$5sF0$OM=B,$N$D$+$J$$$b$N$H$J$k!%(B +$B2>A[%Q%9$N=EJ#$KCm0U(B + +$BJ#?t$N%j%]%8%H%j$,F1$82>A[%Q%9$r;}$D>l9g$G$b(B\sfilename{hgwebdir.cgi}$B$O%(%i!<(B +$B$rI=<($7$J$$$,!$5sF0$OM=B,$N$D$+$J$$$b$N$H$J$k!%(B \end{note} %\subsection{Downloading source archives} @@ -1701,10 +1785,11 @@ %By default, this feature is not enabled. To enable it, you'll need to %add an \rcitem{web}{allow\_archive} item to the \rcsection{web} -%section of your \hgrc. +%section of your \hgrc; see below for details. + $B%G%U%)%k%H$G$O$3$N5!G=$OL58z$K$5$l$F$$$k!%M-8z$K$9$k$K$O(B \rcitem{web}{allow\_archive}$B9`L\$r(B\hgrc $B$N(B\rcsection{web}$B%;%/%7%g%s$KDI(B -$B2C$9$kI,MW$,$"$k!%(B +$B2C$9$kI,MW$,$"$k!%!J>\:Y$K$D$$$F$O2<5-$r;2>H!%!K(B %\subsection{Web configuration options} \subsection{Web$B@_Dj%*%W%7%g%s(B} @@ -1803,18 +1888,39 @@ $BCM$G$=$l$>$l$N%9%H%i%$%W$N9T?t$r@_Dj$9$k!%(B %\item[\rcitem{web}{style}] Controls the template Mercurial uses to -% display the web interface. Mercurial ships with two web templates, -% named \texttt{default} and \texttt{gitweb} (the latter is much more -% visually attractive). You can also specify a custom template of -% your own; see chapter~\ref{chap:template} for details. Here, you -% can see how to enable the \texttt{gitweb} style. +% display the web interface. Mercurial ships with several web +% templates. +% +% \begin{itemize} +% \item \texttt{coal} is monochromatic. +% \item \texttt{gitweb} emulates the visual style of git's +% web interface. +% \item \texttt{monoblue} uses solid blues and greys. +% \item \texttt{paper} is the default. +% \item \texttt{spartan} was the default for a long time. +% \end{itemize} +% +% You can also specify a custom template of your own; see +% chapter~\ref{chap:template} for details. Here, you can see +% how to enable the \texttt{gitweb} style. + \item[\rcitem{web}{style}] Mercurial$B$,%&%'%V%$%s%?!<%U%'!<%9$rI=<($9$k$?(B - $B$a$K;HMQ$9$k%F%s%W%l!<%H$r@)8f$9$k!%(BMercurial$B$K$O(B - \texttt{default}$B$H(B\texttt{gitweb}$B$H$$$&(B2$B$D$N%&%'%V%F%s%W%l!<(B - $B%H$,F1:-$5$l$F$$$k!%!J8e<T$NJ}$,8+1I$($,$9$k!%!KFH<+$N%F%s%W(B - $B%l!<%H$r;XDj$9$k$3$H$b2DG=$G$"$k!%>\:Y$O(B~\ref{chap:template}$B$r(B - $B;2>H$N$3$H!%$3$3$G$O(B\texttt{gitweb}$B%9%?%$%k$rM-8z$K$9$kJ}K!(B - $B$r<($9!%(B + $B$a$K;HMQ$9$k%F%s%W%l!<%H$r@)8f$9$k!%(BMercurial$B$K$O$$$/$D$+$N(B + $B%&%'%V%F%s%W%l!<%H$,F1:-$5$l$F$$$k!%(B + + \begin{itemize} + \item \texttt{coal} $BC1?'$N%F%s%W%l!<%H!%(B + \item \texttt{gitweb} git$B$N%&%'%V%$%s%?!<%U%'!<%9$rLOJo$7(B + $B$?%G%6%$%s$N$b$N!%(B + \item \texttt{monoblue} $BC1?'$N@D$H%0%l!<!%(B + \item \texttt{paper} $B%G%U%)%k%H(B + \item \texttt{spartan} $B$3$l$^$GD9$i$/%G%U%)%k%H$H$7$F;H$o(B + $B$l$F$-$?$b$N!%(B + \end{itemize} + + $BFH<+$N%F%s%W%l!<%H$r;XDj$9$k$3$H$b2DG=$G$"$k!%>\:Y(B + $B$O(B~\ref{chap:template}$B$r;2>H$N$3$H!%$3$3$G$O(B\texttt{gitweb}$B%9(B + $B%?%$%k$rM-8z$K$9$kJ}K!$r<($9!%(B \begin{codesample4} [web] style = gitweb @@ -1927,6 +2033,75 @@ $B%H%j$K(B\hgrc\ $B%U%!%$%k$r:n$j!$@_Dj$r%7%9%F%`$N(B\hgrc\ $B%U%!%$%k$K$bDI2C$9$k(B $BI,MW$,$"$k!%(B +%\section{System-wide configuration} +\section{$B%7%9%F%`%o%$%I$N@_Dj(B} + +%On Unix-like systems shared by multiple users (such as a server to which +%people publish changes), it often makes sense to set up some global +%default behaviors, such as what theme to use in web interfaces. + +$BJ#?t$N%f!<%6$,;HMQ$9$k(BUnix$B7O$N%7%9%F%`!J%f!<%6$,JQ99$r8x3+$9$k%5!<%P$J(B +$B$I!K$G$O!$%&%'%V%$%s%?%U%'!<%9$G;HMQ$9$k%F!<%^$N$h$&$K!$%7%9%F%`A4BN$G$N(B +$B%G%U%)%k%H$N5sF0$rDj5A$9$k$H$h$$>l9g$,$"$k!%(B + +%If a file named \filename{/etc/mercurial/hgrc} exists, Mercurial will +%read it at startup time and apply any configuration settings it finds in +%that file. It will also look for files ending in a \texttt{.rc} +%extension in a directory named \filename{/etc/mercurial/hgrc.d}, and +%apply any configuration settings it finds in each of those files. + +\filename{/etc/mercurial/hgrc}$B$H$$$&%U%!%$%k$,$"$k$H!$(BMercurial$B$O5/F0;~$K(B +$B$3$l$rFI$_!$A4$F$N@_Dj$rE,MQ$9$k!%$^$?!$(B\filename{/etc/mercurial/hgrc.d} +$B%G%#%l%/%H%jFb$N%U%!%$%kL>$,(B\texttt{.rc}$B$G=*$k%U%!%$%k$rC5$7!$=q$+$l$?@_(B +$BDj$rE,MQ$9$k!%(B + +%\subsection{Making Mercurial more trusting} +\subsection{Mercurial$B$N?.Mj@-$r>e$2$k(B} + +%One situation in which a global \filename{hgrc} can be useful is if +%users are pulling changes owned by other users. By default, Mercurial +%will not trust most of the configuration items in a \filename{.hg/hgrc} +%file inside a repository that is owned by a different user. If we clone +%or pull changes from such a repository, Mercurial will print a warning +%stating that it does not trust their \filename{.hg/hgrc}. + +$B%7%9%F%`A4BN$N(B\filename{hgrc}$B%U%!%$%k$,M-MQ$J>l9g$N0lNc$K!$B>$N%f!<%6$,=j(B +$BM-?t(Br$B%j%]%8%H%j$+$i(Bpull$B$9$k>l9g$,$"$k!%%G%U%)%k%H$G$O(BMercurial$B$OJL$N%f!<(B +$B%6$N=jM-$9$k%j%]%8%H%jFb$K$"$k(B\filename{.hg/hgrc}$B%U%!%$%k$N$[$H$s$I$N9`L\(B +$B$r?.Mj$7$J$$!%$=$N$h$&$J%j%]%8%H%j$+$i%/%m!<%s$dJQ99$N(Bpull$B$r9T$&(B +$B$H!$(BMercurial$B$O(B\filename{.hg/hgrc}$B$r?.Mj$7$J$$$H$$$&7Y9p$rI=<($9$k!%(B + +%If everyone in a particular Unix group is on the same team and +%\emph{should} trust each other's configuration settings, or we want to +%trust particular users, we can override Mercurial's skeptical defaults +%by creating a system-wide \filename{hgrc} file such as the following: + +Unix$B$GFCDj$N%0%k!<%W$KF~$C$F$$$k%f!<%6A4$F$,F1$8%A!<%`$KB0$7!$8_$$$KB>$N(B +$B%f!<%6$N@_Dj$r?.Mj(B\emph{$B$9$Y$-(B}$B>l9g$d!$FCDj$N%f!<%6$?$A$N@_Dj$r?.Mj$9$Y$-(B +$B>l9g$O!$<!$N$h$&$J%7%9%F%`A4BN$N(B\filename{hgrc}$B%U%!%$%k$r:n@.(B +$B$7!$(BMercurial$B$N2{5?E*$J@_Dj$r%*!<%P%i%$%I$9$k$3$H$,$G$-$k!%(B + +%\begin{codesample2} +%# Save this as e.g. /etc/mercurial/hgrc.d/trust.rc +%[trusted] +%# Trust all entries in any hgrc file owned by the "editors" or +%# "www-data" groups. +%groups = editors, www-data +% +%# Trust entries in hgrc files owned by the following users. +%users = apache, bobo +%\end{codesample2} + +\begin{codesample2} +# $B$3$NFbMF$r(B /etc/mercurial/hgrc.d/trust.rc $B$J$I$H$7$FJ]B8$9$k(B +[trusted] +# $B=jM-<T$,(B "editors" $B$^$?$O(B "www-data" $B$G$"$k(B hgrc $B%U%!%$%k$r?.Mj$9$k(B +groups = editors, www-data + +# $B<!$N%f!<%6$N=jM-$9$k(B hgrc $B%U%!%$%k$N%(%s%H%j$r?.Mj$9$k(B +users = apache, bobo +\end{codesample2} + %%% Local Variables: %%% mode: yatex %%% TeX-master: "00book"
--- a/ja/filenames.tex Sun Jun 21 09:20:47 2009 +0900 +++ b/ja/filenames.tex Thu Jul 09 13:32:44 2009 +0900 @@ -126,15 +126,15 @@ %The principle here is of \emph{least surprise}. If you've exactly %named a file on the command line, there's no point in repeating it -%back at you. If Mercurial is acting on a file \emph{implicitly}, +%back at you. If Mercurial is acting on a file \emph{implicitly}, e.g. %because you provided no names, or a directory, or a pattern (see -%below), it's safest to tell you what it's doing. +%below), it is safest to tell you what it's operating on. \emph{$B$G$-$k$@$1$S$C$/$j$5$;$J$$(B}$B$H$$$&$N$,$3$3$G$N86B'$G$"$k!%%3%^%s%I%i(B $B%$%s$G%U%!%$%kL>$r40A4$K;XDj$7$?>l9g!$%U%!%$%kL>$,I=<($5$l$k$3$H$O$J$$!%(B -Mercurial$B$O!$L>A0$rM?$($J$$$+!$%G%#%l%/%H%jL>!$0J2<$G2r@b$9$k%Q%?!<%s$rM?(B -$B$($?$?$a$K(B\emph{$B0EL[E*$K(B}$B;XDj$5$l$?%U%!%$%k$KBP$7$F%"%/%7%g%s$9$k>l9g$O!$(B -$B:G$b0BA4$J$d$jJ}$H$7$F!$8=:_$7$F$$$k$3$H$rI=<($9$k!%(B +Mercurial$B$O!$L>A0$rM?$($J$$$+!$%G%#%l%/%H%jL>$d!$0J2<$G@bL@$9$k$h$&$J%Q%?!<(B +$B%s$rM?$(!$%U%!%$%k$,(B\emph{$B0EL[E*$K(B}$B;XDj$5$l$?>l9g$O!$0BA4$N$?$a$K8=:_A`(B +$B:n$7$F$$$k%U%!%$%kL>$rI=<($9$k!%(B %For commands that behave this way, you can silence them using the %\hggopt{-q} option. You can also get them to print the name of every @@ -378,10 +378,92 @@ $BFI$_BX$($k$N$,:G$bAj1~$7$$!%(B \interaction{filenames.filter.exclude} -%\section{Ignoring unwanted files and directories} -\section{$BITMW$J%U%!%$%k$d%G%#%l%/%H%j$rL5;k$9$k(B} + +%\section{Permanently ignoring unwanted files and directories} +\section{$BITI,MW$J%U%!%$%k$d%G%#%l%/%H%j$r1J5WE*$KL5;k$9$k(B} + +%When you create a new repository, the chances are that over time it will +%grow to contain files that ought to \emph{not} be managed by Mercurial, +%but which you don't want to see listed every time you run +%\hgcmd{status}. For instance, ``build products'' are files that are +%created as part of a build but which should not be managed by a revision +%control system. The most common build products are output files +%produced by software tools such as compilers. As another example, many +%text editors litter a directory with lock files, temporary working +%files, and backup files, which it also makes no sense to manage. + +$B?7$7$$%j%]%8%H%j$r:n@.$7!$3+H/:n6H$rB3$1$k$H!$;~4V$N7P2a$H$H$b$K%S%k%I@8(B +$B@.J*$J$I$N$h$&$K%j%S%8%g%s4IM}%7%9%F%`$G4IM}$9$Y$-$G$J$$%U%!%$%k$,%j%]%8(B +$B%H%j$KB?$/4^$^$l$k$h$&$K$J$k!%(BMercurial$B$N4IM}30$K$"$k$3$l$i$N%U%!%$%k(B +$B$O!$(B\hgcmd{status}$B$r<B9T$9$k$H$$$A$$$A2hLL$KI=<($5$l$F$7$^$&!%:G$bE57?E*(B +$B$J%S%k%I@8@.J*$O!$%3%s%Q%$%i$J$I$N%D!<%k$G@8@.$5$l$k=PNO%U%!%$%k$G$"$k!%(B +$B$=$NB>$K$O!$B?$/$N%F%-%9%H%(%G%#%?$,%G%#%l%/%H%j$KCV$/%m%C%/%U%!%$%k$d!$(B +$B0l;~E*$J%o!<%-%s%0%U%!%$%k!$%P%C%/%"%C%W%U%!%$%k$J$I$,$"$k!%(B + +%To have Mercurial permanently ignore such files, create a file named +%\filename{.hgignore} in the root of your repository. You \emph{should} +%\hgcmd{add} this file so that it gets tracked with the rest of your +%repository contents, since your collaborators will probably find it +%useful too. + +Mercurial$B$K$3$l$i$r1J5WE*$KL5;k$5$;$k$?$a$K$O!$%j%]%8%H%j$N%k!<%H%G%#%l%/(B +$B%H%j$K(B\filename{.hgignore}$B$H$$$&L>A0$N%U%!%$%k$r:n@.$9$k!%$3$N%U%!%$%k$O(B +$B$*$=$i$/B>$N6(NO<TC#$K$H$C$F$bM-MQ$G$"$k$+$i!$%j%]%8%H%j$NB>$N;D$j$NItJ,(B +$B$HF1MM$K4IM}$5$l$k$h$&!$(B \hgcmd{add}$B$9$Y$-$G$"$k!%(B + +%By default, the \filename{.hgignore} file should contain a list of +%regular expressions, one per line. Empty lines are skipped. Most people +%prefer to describe the files they want to ignore using the ``glob'' +%syntax that we described above, so a typical \filename{.hgignore} file +%will start with this directive: -XXX. +$B%G%U%)%k%H$G$O(B\filename{.hgignore}$B%U%!%$%k$O(B1$B9T$K(B1$B$D$:$D@55,I=8=$N%j%9%H(B +$B$r<u$1IU$1$k$h$&$K$J$C$F$$$k!%6u9T$OL5;k$5$l$k!%KX$s$I$N%f!<%6$OL5;k$9$Y(B +$B$-%U%!%$%k$rA0=R$N(B``glob''$B9=J8$rMQ$$$F5-=R$9$k$3$H$r9%$`$N$G!$(B +\filename{.hgignore}$B$N:G=i$O<!$N$h$&$J%G%#%l%/%F%#%V$G;O$a$k!%(B + +\begin{codesample2} +syntax: glob +\end{codesample2} + +%This tells Mercurial to interpret the lines that follow as glob +%patterns, not regular expressions. + +$B$3$l$O8eB3$N9T$r@55,I=8=$G$O$J$/(Bglob$B%Q%?!<%s$H$7$F2r<a$9$k$h$&(BMercurial$B$K(B +$B;X<($9$k!%(B + +%Here is a typical-looking \filename{.hgignore} file. + +$BE57?E*$J(B\filename{.hgignore}$B%U%!%$%k$NNc$r<($9!%(B + +\begin{codesample2} +syntax: glob +%# This line is a comment, and will be skipped. +%# Empty lines are skipped too. +# $B$3$N9T$O%3%a%s%H$G!$%9%-%C%W$5$l$k!%(B +# $B6u9T$bF1MM$K%9%-%C%W$5$l$k!%(B + +%# Backup files left behind by the Emacs editor. +# Emacs$B%(%G%#%?$K$h$C$F;D$5$l$k%P%C%/%"%C%W%U%!%$%k!%(B +*~ + +%# Lock files used by the Emacs editor. +%# Notice that the "#" character is quoted with a backslash. +%# This prevents it from being interpreted as starting a comment. +# Emacs$B%(%G%#%?$,;HMQ$9$k%m%C%/%U%!%$%k(B +# "#"$BJ8;z$,%P%C%/%9%i%C%7%e$G%(%9%1!<%W$5$l$F$$$k$3$H$KCm0U!%(B +# $B$3$l$K$h$C$F%3%a%s%H$N3+;OJ8;z$H$7$F2r<a$5$l$k$N$rKI$$$G$$$k!%(B +.\#* + +%# Temporary files used by the vim editor. +# vim$B%(%G%#%?$,;HMQ$9$k0l;~%U%!%$%k(B +.*.swp + +%# A hidden file created by the Mac OS X Finder. +# Mac OS X$B$N%U%!%$%s%@!<$K$h$C$F:n$i$l$k1#$7%U%!%$%k(B +.DS_Store +\end{codesample2} + %\section{Case sensitivity} \section{$BBgJ8;z>.J8;z$N1F6A(B} @@ -548,15 +630,6 @@ $B$K;D$C$F$*$j!$(B Windows$B$d(BMacOS$B$7$9$F$`$G$O$=$N%A%'%s%8%;%C%H$X(B \hgcmd{update}$B$9$k$3$H$O$G$-$J$$$b$N$N!$LdBj$J$/3+H/$rB3$1$k$3$H$,$G$-$k!%(B -\begin{note} -% Prior to version~0.9.3, Mercurial did not use a case safe repository -% storage mechanism, and did not detect case folding conflicts. If -% you are using an older version of Mercurial on Windows or MacOS, I -% strongly recommend that you upgrade. -0.9.3$B$h$jA0$N(BMercurial$B$O(Bcase$B%;!<%U$N%9%H%l!<%85!9=$r;H$C$F$*$i$:!$(Bcase$B$N(B - $B>WFM$r8!=P$G$-$J$+$C$?!%(BWindows$B$d(BMacOS$B$G8E$$%P!<%8%g%s$N(BMercurial$B$r;H$C(B - $B$F$$$k$J$i$P!$%"%C%W%G!<%H$9$k$3$H$r6/$/4+$a$k!%(B -\end{note} %%% Local Variables: %%% mode: yatex