Differences between revisions 4 and 13 (spanning 9 versions)
Revision 4 as of 2010-11-08 14:17:36
Size: 5751
Editor: ZoomQuiet
Comment: appended Discuss
Revision 13 as of 2011-07-04 20:09:33
Size: 6783
Editor: JimHague
Comment: AIX now 1.9
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from subrepos
#pragma section-numbers 2
#language zh
# 翻译自 http://mercurial.selenic.com/wiki/Download?action=raw
Line 5: Line 3:
''Other Languages: [[Subrepository|En]],[[Frenchsubrepos|Fr]]''


= 子仓库 =

可自动化的从各种来源管理嵌套[[Repository|仓库]]
'' (Other languages: [[Download|English]] [[FrenchDownload|Français]] )''
Line 14: Line 7:
== 简介 == = 源代码 =
 * 所有 [[WhatsNew|发布版本]]的Mercurial 源代码都以 .tar.gz 文件下载: [[http://mercurial.selenic.com/release/?M=D|http://mercurial.selenic.com/release/]].
 * [[http://selenic.com/repo/hg-stable|hg-stable]] 仓库发布稳定版本-下载 [[http://selenic.com/repo/hg-stable/archive/tip.tar.gz|快照]].
 * [[http://selenic.com/repo/hg|hg]] 仓库为开发主线 - 下载 [[http://selenic.com/repo/hg/archive/tip.tar.gz|快照]]^最新版本^.
 * 当你克隆 hg 代码仓库时,注意请检查其它关联的[[DeveloperRepos|开发仓库]].
Line 16: Line 13:
子仓库特性允许我们将不同的仓库成组的使用,允许统一的作为模块组进行克隆,检入,推送,下拉. 获得源代码后,参考[[UnixInstall|Unix]]/[[WindowsInstall|Windows]]安装说明来进行安装.
Line 18: Line 15:
这一特性从 Mercurial 1.3 开始被内置支持了.
当前还有一些遗留命令来处理类子仓库事务,我们将统一这些命令,进行致性的子仓库感知.
= 二进制包 =
== Windows ==
 * TortoiseHg 是 Windows 浏览器界面集成的^很易用^
  * [[http://bitbucket.org/tortoisehg/stable/downloads/tortoisehg-0.9.2-1-hg-1.4.2.exe|tortoisehg-0.9.2-1-hg-1.4.2.exe]] TortoiseHg 0.9.2 + Mercurial 1.4.2 套件!
  * 仅 [[http://bitbucket.org/tortoisehg/thg-winbuild/downloads/mercurial-1.4.2.exe|Mercurial-1.4.2]] 安装包 ,不含 !TortoiseHg
  * [[http://bitbucket.org/tortoisehg/thg-winbuild/downloads/|thg-winbuild]] 是Mercurial + !TortoiseHg 每日集成包, 可将 Mercurial 作为Python 的模块来安装.
 * [[http://mercurial.berkwood.com|Minimal]] Windows 安装器 - 独立或依赖Python 环境(最新和前一版本快,快照)
 * [[http://cygwin.com/|cygwin]] 也能安装 Mercurial.
Line 21: Line 24:
对于SVN用户,子仓库的体验,非常接近运用 `svn:externals` 属性聲明的"卖方仓库".
Mervurial 1.5 开始已经支持将SVN 作为子仓库使用. ^译注:万能的Python^
 /!\ 类似 !TortoiseSVN, [[http://www.selenic.com/pipermail/mercurial/2010-January/029680.html|我们建议]] 关闭对本地工作仓库目录的索引和病毒扫描事务.
Line 24: Line 26:
== Mac OS X ==
 * [[http://mercurial.berkwood.com|Mac OS X]] 包 (应该在`~/.profile`加入`export LC_ALL=en_US.UTF-8` and `export LANG=en_US.UTF-8`)
 * [[http://pdb.finkproject.org/pdb/package.php/mercurial-py25|fink]] - 1.2.1
 * [[http://www.macports.org/|macports]]: 使用 'sudo port install mercurial' - 1.2.1
Line 25: Line 31:
== 基础使用 == == Linux (.deb) ==
 * '''Debian'''
  * [[http://packages.debian.org/squeeze/mercurial|Debian squeeze (testing)]] - 1.3.1
  * [[http://packages.debian.org/lenny/mercurial|Debian lenny (stable)]] - 1.0.1
 * '''Ubuntu'''
  * [[http://packages.ubuntu.com/hardy/mercurial|Ubuntu Hardy]] - 0.9.5 ([[http://packages.ubuntu.com/hardy-backports/mercurial|1.0.1]] 只要[[https://help.ubuntu.com/community/UbuntuBackports|允许backports]])
  * [[http://packages.ubuntu.com/intrepid/mercurial|Ubuntu Intrepid]] - 1.0.1
  * [[http://packages.ubuntu.com/jaunty/mercurial|Ubuntu Jaunty]] - 1.1.2
  * [[http://packages.ubuntu.com/karmic/mercurial|Ubuntu Karmic]] - 1.3.1
  * '''Launchpad PPAs''' (carrying packages for Hardy, Intrepid, Jaunty and Karmic)
   * [[https://launchpad.net/~mercurial-ppa/+archive/releases|Releases]] - 1.4.2
   * [[https://launchpad.net/~mercurial-ppa/+archive/stable-snapshots|稳定快照]] - DeveloperRepos 的每日快照 (注意: 未测试的)
   * [[https://launchpad.net/~mercurial-ppa/+archive/snapshots|快照]] - 未稳定 DeveloperRepos 的每日快照(注意: 未测试的)
Line 27: Line 45:
=== 准备 === Mercurial (from 1.0 onwards) 已经发布为 Debian-related 仓库软件包, ''mercurial'' and ''mercurial-common'' - 只需下载相关 .deb 文件完成手工安装 - 当然, APT 将统一管理你安装的 ''mercurial''.
Line 29: Line 47:
啓用子仓库,至少需要两个版本仓库,主仓库和嵌套仓库: == Linux (.rpm) ==
 * [[http://rpmfind.net/linux/rpm2html/search.php?query=mercurial&submit=Search+...&system=mandriva&arch=|Mandriva]]: install with {{{urpmi mercurial}}} - 1.2.1
 * [[http://koji.fedoraproject.org/koji/packageinfo?packageID=2518|Fedora]] and CentOS 5 with [[http://fedoraproject.org/wiki/EPEL|Fedora Projects EPEL]]: install with {{{yum install '*mercurial}}}*' - 1.4.1 (EPEL 1.3.1)
 * [[http://repos.opensuse.org/devel:/tools:/scm|OpenSUSE]] - 1.2.1
 * [[http://arklinux.osuosl.org/dockyard-devel/SRPMS/|Ark Linux]] - 1.0.2
 * [[http://www.openpkg.org/product/packages/?package=mercurial|OpenPKG]] - 1.2.1
Line 31: Line 54:
An rpm package can be built from a Mercurial source repository with ''contrib/buildrpm''. It has currently mostly been tested on Fedora.

== Linux (其他) ==
 * [[http://archlinux.org/packages/search/?repo=all&category=all&q=mercurial&lastupdate=&limit=50|Arch Linux]] - 1.2.1
 * [[http://packages.gentoo.org/package/dev-util/mercurial|Gentoo ebuild]]: install with {{{emerge mercurial}}} - 1.3.1 (1.4.1 in unstable)
 * [[http://www.t2-project.org/packages/mercurial.html|T2 SDE]] - 1.3
 * [[http://ftp.osuosl.org/pub/slackware/slackware-12.2/slackware/d/|Slackware 12.2]] - 1.0.2
 * [[http://ipkg.nslu2-linux.org/feeds/optware/|Optware cross compilation ipk]] - latest for Python 2.4 and 2.5

== Solaris ==
 * [[http://opencsw.org|OpenCSW]]: [[http://opencsw.org/packages/mercurial|mercurial-1.3.1]], [[http://mirror.opencsw.org/testing.html|testing contains mercurial-1.4.1]], for Solaris 8-10, SPARC/x86.
 * [[http://www.blastwave.org/pkg/search.ftd?qs=mercurial|blastwave]] - 1.3.1
 * [[http://sunfreeware.com|sunfreeware.com]] - SPARC/Solaris 2.6-10 packages, x86/Solaris 8-10 packages - 1.4.1

== AIX ==
 * [[http://lunch.org.uk/wiki/aix_packages|Mercurial and supporting RPMs, for AIX 5.2 and later]] - 1.9

== BSD ==
 * [[http://freebsd.org/cgi/url.cgi?ports/devel/mercurial/pkg-descr|FreeBSD Mercurial port]] ([[http://freebsd.org/cgi/cvsweb.cgi/ports/devel/mercurial/|port-webdir]]). [[ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/devel/mercurial-1.2.1.tbz|i386 package]] - 1.2.1
  * Requires [[http://freebsd.org/cgi/cvsweb.cgi/ports/lang/python25/|python25]] (i386 package: [[ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-stable/lang/python25-2.5.2_1.tbz|python25-2.5.2_1.tbz]]). Use [[http://freebsd.org/cgi/man.cgi?query=pkg_add&apropos=0&sektion=0&manpath=FreeBSD+6.3-RELEASE&format=html|pkg_add]] for installing.
 * [[ftp://ftp.netbsd.org/pub/pkgsrc/current/pkgsrc/devel/mercurial/README.html|NetBSD]] packages compiled from [[http://pkgsrc.se/devel/mercurial|pkgsrc]] - 1.2.1

= 使用easy_install =
Mercurial 同样可以使用 {{{easy_install}}} 从 [[http://pypi.python.org/pypi/Mercurial/|pypi]] 仓库中安装. 几乎和下载源代码安装相同. 只是在OS X 中无法完成安装.

需要事先安装 Python 和 C 编译器. 例如在Ubuntu 中:
Line 32: Line 81:
$ hg init main
$ cd main
$ hg init nested
$ echo test > nested/foo
$ hg -R nested add nested/foo
$ hg -R nested ci -m '初始化子仓库'
sudo apt-get install build-essential gcc python-dev
Line 40: Line 84:
我们要在特殊文件:''`.hgsub`'' 中创建记录,聲明嵌套仓库.
注意,这里使用 .ini 类似的参数聲明形式,等号前的 `nested` 是指我们将嵌套仓库安装到的目录;
后面的 `nested` 是子仓库真正的访问URI, 这里因为是就地创建的,所以和安装目录相同;
意思就是:''任何人只要找到我们的主仓库,就可以根据这里的路径访问到子仓库''
{{{easy_install}}} 可能包含在 {{{python-dev}}} 或 {{{python-setuptools-devel}}} 包中,
也可以直接从 http://peak.telecommunity.com/DevCenter/EasyInstall 抓取.
Line 45: Line 87:
准备好以上依赖后,你就可以通过以下操作完成最新版本Mercurial 的安装:
Line 46: Line 89:
$ echo nested = nested > .hgsub
$ hg add .hgsub
easy_install -U mercurial
Line 49: Line 91:

注意,嵌套仓库必须在 `.hgsub` 中聲明,才能和主仓库形成嵌套关系;
否则,你得手工的逐一对"嵌套"仓库进行克隆下拉.^即,形式上嵌套,但是仓库间不认识^

{{{
$ echo nested = https://example.com/nested/repo/path > .hgsub
$ hg add .hgsub
$ hg clone https://example.com/nested/repo/path nested
}}}

如果你对默认分支进行更新时,也正是你得对子仓库进行更新之时.


==== SVN 子仓库 ====

从1.5版本之后,Mercurial 支持其它版本系统的子仓库.
比如说,你将一个SVN 仓库装配成子仓库:

{{{
$ echo 'nested = [svn]https://example.com/nested/trunk/path' >.hgsub
$ hg add .hgsub
$ svn co https://example.com/nested/trunk/path nested
}}}

实际上, Mercurial 将没有 `[<仓库类型>]` 前导的聲明,视作使用了 `[hg]`


=== 检入 ===

当我们对子仓库首次检入时,Mercurial 将创建一个子仓库版本状态的快照,以供主仓库判定是否进行联合检入;

{{{
$ hg ci -m "test"
committing subrepository nested
}}}

 {i} 子仓库状态,储存在 ''`.hgsubstate`'' 文件中,由 Mercurial 自动进行管理.
 

=== 克隆 ===

不论何时 Mercurial 都将试图更新所有嵌套仓库,到合适的状态:

{{{
$ cd ..
$ hg clone main main2
updating working directory
pulling subrepo nested
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
2 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ cat main2/nested/foo
test
}}}


子仓库也包含专用的版本数据库,Mercurial 知道如何循环处理.

=== 推送 ===

Mercurial 也自动尝试将所有嵌套仓库的变更推送上去.
只要在顶层仓库中聲明清楚所有包含的子仓库.


=== 下拉 ===

但是,杯具是 `pull` ^下拉^命令 '''不是递归的!'''

这是因为 Mercurial 无法使用子仓库是否有变更,除非逐一进行 `pull -u`.

=== 在子仓库中同步 ===

子仓库并不自动追踪所有源仓库的最新变化.
只是从顶层变更获取当前最新更动. 这样开发者在更新时总是可以获得兼容代码或是库的 ''一致变更集'' .

因而,更新子仓库是个标准操作,只要在对应的子仓库目录中执行 `hg up`,
同时这样也在顶层仓库中记录了最新变更组合.

=== 删除 ===

从父仓库清除子仓库,必须从 ''`.hgsub`'' 删除对应聲明.
这时执行 `hg st` 询问仓库状态,子仓库树就将标识为 `未知`.
你就可以直接删除相关文件了.

== 警告 ==

因为这是全部的特性,有一些已知问题:

 * 一些命令需要 `-S` 开关来操作子仓库
 * 很多命令并不理解子仓库
 * 更新/合并,当前还无法彻底的清除子仓库的本地变更
 * 对于子仓库还无法进行交叉重命名/移动
 * 正常文件和子仓库的冲突还无法感知
 * 子仓库的下拉总是被 延迟 直到进行更新
 * `pull -r` 在子仓库中无法过滤版本
 * push 命令也同样忽略 URL和版本过滤参数
 * 还无法对子仓库传递一些命令参数,比如说:`-A`


= 讨论 =
ZoomQuiet ::
 * [[http://groups.google.com/group/kcpymaster/browse_thread/thread/f9c11451e5c494ac|Mercurial 作品集锦多仓库模式?]]
 * 实际上当前内置的 嵌套仓库支持,只是简单的将标准多仓库操作进行了自动化,还不能象 SVN 的卖方仓库那样灵活的进行仓库间的组合,比如说:
  * 在服务端,使用相对路径可以对本地仓库目录进行子仓库聲明:{{{
nested = ../foorepo
  }}}
  * 但是在本地,进行克隆时,先下载下来的主仓库会优先下载 `.hgsub` 聲明文件,并按照文件中的路径进行子仓库的克隆
  * 于是就杯具的报告:`无法在 ../foorepo` 找到仓库!
  * 即使我们在 `.hg/hgrc` 以及 `.hgsub` 中进行了 URL 式的嵌套仓库聲明也依然难以成功:
   1. `http://foo.exsample.org/main/foorepo` 是无法接受的! ~ Hg 仓库的发布无法只检出子目录
   1. `http://foo.exsample.org/foorepo` 是不能识别的,因为单独发布的子仓库,不在 `.hgsub`聲明的嵌套关系中!
 
 

(Other languages: English Français )

源代码

获得源代码后,参考Unix/Windows安装说明来进行安装.

二进制包

Windows

Mac OS X

  • Mac OS X 包 (应该在~/.profile加入export LC_ALL=en_US.UTF-8 and export LANG=en_US.UTF-8)

  • fink - 1.2.1

  • macports: 使用 'sudo port install mercurial' - 1.2.1

Linux (.deb)

Mercurial (from 1.0 onwards) 已经发布为 Debian-related 仓库软件包, mercurial and mercurial-common - 只需下载相关 .deb 文件完成手工安装 - 当然, APT 将统一管理你安装的 mercurial.

Linux (.rpm)

An rpm package can be built from a Mercurial source repository with contrib/buildrpm. It has currently mostly been tested on Fedora.

Linux (其他)

Solaris

AIX

BSD

使用easy_install

Mercurial 同样可以使用 easy_installpypi 仓库中安装. 几乎和下载源代码安装相同. 只是在OS X 中无法完成安装.

需要事先安装 Python 和 C 编译器. 例如在Ubuntu 中:

sudo apt-get install build-essential gcc python-dev

easy_install 可能包含在 python-devpython-setuptools-devel 包中, 也可以直接从 http://peak.telecommunity.com/DevCenter/EasyInstall 抓取.

准备好以上依赖后,你就可以通过以下操作完成最新版本Mercurial 的安装:

easy_install -U mercurial

ChineseDownload (last edited 2014-12-19 12:12:56 by JimHague)