【问题标题】:Different location for mercurial repository and project folder?mercurial 存储库和项目文件夹的不同位置?
【发布时间】:2015-09-17 13:02:00
【问题描述】:

我是 Mercurial 的新手,我之前使用过 SVN,但现在我将 Mercurial 安装为本地版本控制系统。现在我想要实现的是将我的 IDE 项目文件夹放在 C:\Projects\ 中,并将我的 Mercurial 存储库放在 C:\Repo\ 中。问题是我只想将.cpp.h 文件保留在我的回购中,其余的包括我的项目文件夹中的源文件。有没有可能有这样的东西?

谢谢!

【问题讨论】:

  • 首先,你为什么想要那个?其次,使用 .hgignore 简单地忽略不应该受版本控制的文件有什么问题?
  • 好吧,我需要定期将我的整个回购交给某人。他只想要 repo 中的 .cpp 和 .h 文件,但需要查看我的更改。不幸的是,除了这个,我别无选择。我必须使用本地 Mercurial,并且 repo 中不能有其他文件。
  • 嗯...那么使用hg archive 命令有什么问题,类似于svn export?如果您使用 SVN 作为您的版本控制,您将在尝试发送没有临时文件和 .svn 文件夹的 .cpp 和 .h 文件时遇到同样的问题。
  • 我已经研究过了,但似乎这会产生一个未版本化的存档。我需要所有的提交和更改。 .svn/hg 文件夹很好,但我不需要 IDE 中的任何 .project 文件
  • @Ben: hg serve 会更 HG 方式,顺便说一句

标签: svn mercurial


【解决方案1】:

简短回答: 这就是 .hgignore 文件和 hg pull 的用途。事实上,将受版本控制的文件(并且仅限于那些文件)轻松分发给其他人是 Mercurial 的重点。

如果不进行一些非常冒险的复制或链接(无论如何,在 Windows 系统上很难做到),您就不能将存储库放在工作文件夹所在的位置以外的地方。

改为使用 .hgignore 文件从存储库中排除一些文件,并使用hg pull 使更新可用。

步骤:

  1. 使用带有正则表达式语法的 .hgignore 来忽略除 .cpp.h 文件之外的所有内容,如下所示:

# regexp syntax.
syntax: regexp
\.(?!cpp|h)[^.]+$

该正则表达式会忽略任何以.whatever 结尾但不是.cpp.h 的内容。

  1. 然后,每当您的同事需要 repo 时,他都可以发送 hg pull 来准确获取 repo 中的内容,而不是其他任何内容。

即使您因某种原因无法进行 远程 hg pull,您也可以进行 本地 拉取或克隆(即到您自己的硬盘驱动器) ,然后压缩新目录并将其发送给他。它只会包含版本控制的文件,而不是您工作目录中可能拥有的任何其他文件(如.project 文件)。但是请注意,hg 确实旨在用于网络环境。

【讨论】:

  • 不错的尝试,但对于 Mercurial 的菜鸟来说,idea 很糟糕......而且正则表达式很脏,太容易出错。 hg st ? .hgignore ? b.cpp ? c.h ? d.hpp ? dir\b.cpp ? dir\c.h ? dir\d.hpp ? dir\e.h1 ? e.h1
  • 太好了,这正是我想要的,非常感谢!
【解决方案2】:
  1. 除了工作目录中的.hg 文件夹之外,您不能在任何其他地方拥有存储库
  2. 可以仅将树中现有文件的一部分(即仅需要)添加到版本控制中

【讨论】:

  • 为了扩展它:忽略 所有 文件,以免它们在hg status 打扰您。并且只将您感兴趣的(*.cpp 和 *.h)文件添加到 repo。
猜你喜欢
  • 2019-01-08
  • 2017-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-29
  • 1970-01-01
  • 2015-01-21
相关资源
最近更新 更多