- 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/
阅读内置帮助后,在我看来,这两个命令都可用于修改工作区以匹配某个修订版。但我不明白更新和结帐之间的区别。请在您的答案中包含一些琐碎的工作流程,以显示何时更新/结帐是合适的。 最佳答案 第一个主要区别是
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
是否可以使用 Fossil 重命名目录?我试过明显的命令: fossil mv oldname newname Fossil 然后告诉我它做了一些事情: RENAME oldname newname
所以我一直在做一个相当大的项目,并像 VCS 一样使用 PlasticSCM。我将它与 DVCS 模型一起使用,但到目前为止,我几乎只是在我的办公机器和家庭之间进行同步。 现在我们正在让其他人参与该项
还有一个thread在 StackOverflow 上,处理多久提交一次对源代码控制的更改。我想把它放在使用 git 或 mercurial 之类的 DVCS 的上下文中。 你多久提交一次? 您是否仅
情况是这样的:在我的小办公室里,因为我们喜欢保持移动并且偶尔在家工作,所以我们没有中央文件服务器,而是将所有办公室文档都放在一个 SVN 存储库中,并且每个人都在他们自己的笔记本电脑。结帐重约 3GB
我最近问了一个关于 DVCS 是否适合企业环境的问题,这引发了我的另一个问题。 DVCS 的优点之一似乎是您可以轻松地分支和尝试新事物。当我开始考虑数据库更改时,我的问题就开始了。我一直发现将 DB
有没有办法明确删除“丢失”文件而不必使用 fossil rm 删除它们逐个? 我最近创建了一个存储库,其中有一个 Flash XFL 文件夹,Flash 似乎有点随意地删除和创建了一些二进制文件。每次
TFS 2010 是否有 SVN 提交后事件?每次开发人员 checkin 某些内容时,我都想运行脚本或应用程序或做一些事情。我浏览了互联网,但没有找到相关信息。 最佳答案 您将需要创建(并发布)一个
我正在寻找一个版本控制系统,它能够检测函数是否在文件中移动。例如,有一个文件“Foo.java”,其中包含函数“a()”、“b()”和“c()”。 public class Foo { voi
我的工作场所正在考虑转向现代 (D)VCS,这是我正在 push 的事情。 我的老板有这个想法,目前的工作流程是有一个集中的存储库,每个人都可以在任务完成后提交/merge 他们的更改,在处理任务时,
我最近开始在一个个人项目中使用 Git,我可以看到 DVCS 如何使我们在工作中受益(这是一家大型企业软件公司,目前正在运行 Perforce)。例如,我团队中的功能工作主要由开发人员创建自己的分支组
在使用 DVCS 近两年之后,似乎一个固有的“缺陷”是意外数据丢失:我丢失了未被推送的代码,我知道其他人也丢失了。 我可以看到一些原因:异地数据复制(即“提交必须转到远程主机”)不是内置的,存储库与代
还是传统的客户端 - 服务器 VCS 更合适?我目前正在使用 TortoiseSVN,但我对 DVCS 感兴趣,但我不确定尝试使用类似的东西是否是一个好主意。 最佳答案 由于您仍然可以推送到另一台运行
我希望在初学者的快速入门指南中对此进行解释,因为几乎每个从化石开始的人都会有他想要开始用化石管理的项目。但我在文档中找不到任何解释。 (我来自 git,这对于我的需求来说太重了,但至少在现有文件夹中创
我在一家公司工作,我们创建了许多特定于客户的小型应用程序。我们有几个开发人员,但大多数时候每个项目只有一名开发人员。 Customer1 ProjectX App
如何从 Bazaar 工作区中删除所有未版本控制的文件?我希望执行与 hg purge --all 或 git clean -fd 相同的操作。 最佳答案 我只在 BzrTools 中看到过这个,作为
我在这里和那里看到暗示直接从 DVCS 克隆运行实时部署是不好的,最好导出一个干净的树或 tarball 并部署它。在我看来,直接从 DVCS 克隆运行有几个优点: 无需在每次部署时传输整个代码库。
Smalltalk 令人讨厌的事情之一是,由于它管理源代码的方式,它(通常)需要自己的 VCS。 Squeak 和 Gemstone(至少在其 GLASS 版本中)有一个名为 Monticello 的
我想知道是否可以使用 nuget 在版本控制中仅存储对所需包的引用(仅 package.config 并忽略 packages 文件夹)。 有没有办法告诉 nuget(重新)下载各种 package.
我是一名优秀的程序员,十分优秀!