在Windows上使用mercurial跟踪硬链接或符号链接

fsc*_*enm 14 windows mercurial

在一个相当大的项目中,我想将相同的文件(或文件夹)放在不同的位置.在一个位置更改时,应传播更改.在Subversion中,我可以使用externals来实现这种行为.

我试图通过使用硬链接和符号链接来解决这个问题,但Mercurial似乎没有跟踪它们中的任何一个.相反,它将文件的内容提交到其存储库而不是link属性.当我克隆存储库时,信息会丢失.

这是Mercurial特定于Windows的行为还是根本无法跟踪链接?是否有其他方法可以跟踪可从Mercurial中的不同位置访问的文件?

Mar*_*ler 16

Mercurial 可以跟踪符号链接,但在Windows上签出时它们看起来很奇怪.会发生什么是Mercurial创建一个文件,链接目标作为文件内容.遗憾的是,不支持在支持它们的Windows系统上创建真正的符号链接,例如Windows Vista.这样做的结果是您不能在应该在两个系统之间移植的存储库中使用符号链接.有关此功能的更多信息,请参阅Issue1825中的讨论.

最接近的svn:externalsMercurial subrepositories.根据您的使用方式svn:externals,subrepos可能是您想要的,也可能不是.请参阅我关于subrepos的另一个问题的答案,以获得一些建议.我为subrepos编写了部分代码并且在我的脑海中,我认为在同一个主存储库中多次安装subrepo听起来像是一个混乱的秘诀.但也许你可以让它工作 - 只要知道subrepos是Mercurial的一个棘手的部分.

  • Windows符号链接需要管理员权限,这使得它们完全不适合像Mercurial这样的用户级工具中的日常使用.Python 3与它无关. (8认同)
  • @mpm:是的,您需要"创建符号链接"权限,管理员默认具有此权限.据我了解,普通用户也可以在不让他们成为管理员的情况下获得特权. (4认同)
  • 转而Python在[changeset 730b728e5aef](http://hg.python.org/cpython/rev/730b728e5aef/)中添加了对Windows符号链接的支持.但是,这仅对Python 3有帮助,而Mercurial仅在Python 2上运行. (3认同)
  • 但是NTFS确实支持自Windows Vista以来的符号链接. (2认同)
  • 哇,已经5年了?:-)奇怪的是我们当时没有创建它们.我鼓励你使用[hackable Mercurial](http://mercurial.selenic.com/wiki/HackableMercurial)使用[这个答案](http://stackoverflow.com/a/1447651/110204)并查看是否你可以拿出一些东西.相关的起点是`mercurial.windows.checklink`和调用`checklink`的地方,以确定它们是否可以调用`os.symlink`. (2认同)