- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在一家公司工作,我们创建了许多特定于客户的小型应用程序。我们有几个开发人员,但大多数时候每个项目只有一名开发人员。
Customer1
ProjectX
App
Tests
ProjectY
App
Tests
Customer2
Project2
Products
Product1
Common
如今,所有内容都存储在一个存储库中。
过程很简单。
没有标记也没有分支。早期版本是根据日期 checkout 的。
这个过程多年来一直运行良好,但当前工具 (CVS) 存在一些痛点
我私下使用 Mercurial 一段时间了,希望将其扩展到所有开发人员。
我可能全错了,但有一些事情我不明白如何在我们的组织中实现。
CVS 提交仅是当前文件夹,但在 Mercurial 中它们是存储库范围内的。在我们的例子中,这意味着在一个文件夹中提交维护工作也会在另一个文件夹中提交尚未完成的内容。(我假设我们可以在更改的文件夹中执行 hg ci ./**
,但 merge 时不允许这样做,至少文档是这么说的 If you are committing the result of a merge, do not provide any filenames or -I/-X filters.
)
Mercurial 中的常见做法是每个项目都有一个存储库。
每个项目一个存储库对我们来说没问题,但它会产生一些其他问题,例如:
如何管理中央服务器上的多个存储库?
如果开发人员创建了一个新项目,他最终需要插入他的更改。只是在做
hg push <a href="http://localhost:8000/Customer1/NewProject" rel="noreferrer noopener nofollow">http://localhost:8000/Customer1/NewProject</a>
通过丑陋的堆栈转储使 hg-webserver 崩溃并挂起客户端。
我的理解是,开发人员需要访问服务器 shell 将新存储库添加到配置文件并重新启动 hgweb
另一种方法是使用 SSH 或共享(使用 SSH 代替文件共享有好处吗?)
cd Customer\NewProject
hg init
hg clone --noupdate --pull . //mercurialshare\Customer\Project
echo "[paths]" >.hg\hgrc
echo "default=//mercurialshare\Customer\Project" >>.hg\hgrc
hg push
可以工作,但对于某些开发人员来说有点复杂
所有开发人员都需要拥有所有项目。
(并非所有项目都是链接的,但许多项目都是链接的,因此它们需要存在,并且最简单的是拥有所有项目)
随着许多现有项目和每周添加的新项目,我们需要一种方法来一次性拉取所有项目并克隆新项目。
我认为子存储库可以解决“全局”拉力,但以下内容文档中的一行是一个精彩的内容
“当我们提交时,Mercurial 将尝试创建整个项目及其子存储库状态的一致快照。它通过首先尝试提交所有修改的子存储库,然后记录所有子存储库的状态来实现此目的。”
回到全局提交的单一存储库问题。
(尝试了 hg ci .hgsub .hgsubstate <subrepo>
的一些变体,但 .hgsubstate 似乎只在完全提交时更新。如果项目文件夹中没有明确的 hg pull --update
,其他用户将看不到项目更改)
我目前的想法是在根目录中有一个批处理文件来提取所有项目
关于如何在我们的组织中使用 Mercurial 还有其他想法吗?
编辑
感谢您的回复。我目前正在评估每个项目一个存储库如何为我们工作。我将批处理文件放在顶层
FOR /F %%x IN (repolist.txt) DO (
If EXIST .\%%x\.hg (
ECHO Pull %%x
hg pull --update --repository .\%%x
) ELSE (
ECHO Clone %%x
mkdir .\%%x
hg clone --pull %1\%%x .\%%x
)
)
最佳答案
您有权说 Mercurial 是为每个存储库的一个项目而设计的。当您像这样工作时也会好得多,因为不同项目的历史记录是分开的。
尝试在 DVCS 存储库中包含多个项目只会带来痛苦。
我个人更喜欢通过 SSH 而不是 HTTP 来提供项目服务。原因之一是能够...
# hg init blah
# hg clone blah ssh://server/blah
如果您通过 HTTP 提供服务,则这不起作用(正如您所发现的)。我很惊讶它会导致严重崩溃:-/
获取所有项目的子存储库方法并不完全像您所描述的那样。并不是说你回到了全局提交(项目可以单独开发),而是 super 项目存储了它所依赖的子项目的版本。如果您(例如)有一个库作为子项目,那么这正是您想要的,但版本取决于特定版本。实际上,子存储库链接是特定版本另一个存储库的书签。
但这并不是你真正想要的。
可能,通用的东西应该是需要它的项目的子存储库。然后,每个项目可能会被卡住在相同代码的不同版本上,并且您不会遇到任何问题。这需要稍微考虑一下。
否则脚本的想法可能是最简单的。
关于mercurial - DVCS (Mercurial) 不适合我吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4119462/
如果你做一个 hg pull然后是 hg update (或 hg merge ),有没有办法解决这个问题?即:将您的存储库恢复到执行 hg pull 之前的状态? 我相信你可以做到hg update
我有一台带有 ssh 的服务器,我想将其用作中央存储库。但是我不能在上面安装 mercurial。因此,客户端如何在服务器上没有安装 mercurial 的情况下通过 ssh 推送到服务器。 谢谢 最
我们有一个专门的问题跟踪 (Redmine) 机器,它有一个 Mercurial 存储库(称为“Redmine 存储库”)。 Redmine 设置为使用该存储库,据我了解,Redmine 从未对该存储
一个 hg 存储库可以存在于我的本地文件系统上的另一个 hg 存储库中吗? 我正在拉取“sandbox”的 bitbucket wiki,我想知道是否应该将其放置在 repos/sandbox/wik
我有一个项目,我使用 Bitbucket 作为我的 HG 服务器,但我最近发现,作为一个单独的开发人员,我可以免费使用 Fogbugz/Kiln。我想将我的文件移至 Kiln,但我不想丢失我的历史记录
Mercurial 如何判断文件已被修改? 我问的原因是因为当我运行时 hg status它告诉我有几个文件被修改了。 但是,当我运行 hg diff 时没有变化要报告。 我有一个关于为什么会发生这种
我需要获取本地存储库中文件的特定版本/节点的内容,并将其写入临时文件。 我知道可以通过内部Mercurial API进行操作。 有内置命令或扩展名吗? 最佳答案 您可以使用 hg cat : hg c
这两个命令有什么区别(我想回滚到修订版 1): hg update -r 1 hg backout -r 1 --merge (在示例中提示修订为 3) 最佳答案 首先, update -r 1 将撤
我看到 mercurial 有效地压缩了存储库中的文件 (repo/.hg/store/data) 有人知道存储库文件使用哪种压缩吗? 谢谢。 最佳答案 Mercurial 存储库中有两个压缩级别:增
如果 Mercurial does not track file permissions默认情况下,它如何决定它创建的任何文件/目录的权限? 是否使用umask ?如果不是,它有什么用? 我有 rea
我已经阅读了很多关于 Mercurial 及其分支的信息,但是,我仍然是一个版本控制新手。 我目前正在做一个项目,我的任务是开发一个新模块。 我有一个“主”存储库,其中包含项目其余部分的最新代码,以及
尝试运行 hg update 时出现以下错误: abort: Operation not permitted: /var/www/simira/web/public/images/nomination
mercurial 如何处理拆分的文件?如果我创建一个分支并拆分一个文件会发生什么。我可以轻松地从修改原始未拆分文件的另一个分支中提取更改吗? 最佳答案 我只是做了一个小实验。我用一个大文件创建了一个
我想使用hg graft将变更集从一个分支复制到另一个分支。 但是,在变更集中修改的文件已在源分支中重命名(使用hg rename)-在要移植的变更集之前。 当我尝试时,我得到: scanning f
Annotate可以使您看到该行的最新更改,如果该更改是合并,那么我别无选择,只能浏览修订历史记录并查找下一次对其进行修改的情况。 我也尝试过hg grep -l '[contents of line
我有一个小项目,我从集市开始,作为练习bzr的练习。从那以后,我决定选择 Mercurial 。我如何将这个项目迁移到Hg? 最佳答案 我相信您的答案可以在here中找到。 本质上,您只需要运行 $
什么决定分支是否处于非事件状态?是否有客户使用的特定时间段? 我们有很多不活跃的分支。值得我们花时间关闭它们吗? 该文档似乎没有指定如何确定非事件分支: https://www.mercurial-s
假设我创建了一个存储库,添加 x 文件并提交。说大小是 初始提交后的 Mb。 有什么方法可以估计存储库在一年内会有多大? 如果代码行数增加了 10%,存储库会相应增长吗? 提交、分支、标签等的数量如何
我正在使用 Mercurial(特别是 Windows 上的 TortoiseHg)对 VBA 代码进行版本控制。任何尝试过这个的人都知道,只要在项目中的任何地方更改了该变量的任何声明(无论范围如何)
不幸的是,我已经清理了我的 Mercurial 货架,忘记了我需要进行一些更改。我有定期的文件系统备份,但不知道 Mercurial 在哪里存储搁置文件。有人可以告诉我在哪里看吗? Mercurial
我是一名优秀的程序员,十分优秀!