问题标签 [dvcs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
continuous-integration - 使用 dvcs 是否会使在企业环境中使用持续集成变得更加困难?
毫无疑问,使用 dvcs 有很多优势,它可以像集中式 vcs 一样使用,但是是否有本地提交并且能够非常轻松地为一些较小的团队分叉项目,这使得支持持续集成变得更加困难?它有助于开发,每个人都可以访问最新的更改,这些更改由 CI 服务器测试,因此可以最大限度地减少不兼容更改的可能性。
version-control - Mercurial 与多个项目
我的 SVN 存储库中有几个具有不同发布周期的项目。版本是使用 SVN 中的经典标签结构创建的。当版本中存在要修复的错误时,会从标签创建分支,修复错误,然后从那里合并到主干中。
现在,出于多种原因,我想通过中央推送站点从 SVN 切换到 mercurial。
问题:在 mercurial 中,组织多个项目之间共享少量代码的最佳方式是什么?我应该为每个项目创建多个推送站点吗?
请在答案中包含有关如何使用您首选的存储库设计版本重新创建我的发布标签、错误修复分支的描述。
编辑:我想安装尽可能少的扩展。
编辑2:
鉴于此 SVN 布局:
(感谢@bendin!:))
使用多个 hg 推送存储库会更好吗
为树枝。标签被折叠到适当的分支中。
或者您更愿意在本例中使用两个推送存储库
具有命名的分支,因此在一个 repo 中有多个头。
我看到的多头存储库的优势是我不必在多个存储库中寻找标签。我看到的缺点是 hg 书似乎不鼓励多头回购。你会/做什么?
git - 跨多台机器管理主目录有一些差异?
所以我现在有一个非常定制的点文件设置,我一直在寻找一种解决方案来保持机器之间的同步。我喜欢拥有一个 ~/dotfiles 目录(或类似目录)的想法,其中包含一个处理符号链接创建的 makefile。通过 rsync/unison/dvcs/whatever 将 dotfiles 目录从一个机器移动到另一个机器,我很高兴。
出现此问题是因为某些机器上的文件略有不同,我想要一种方法来跟踪它。例如,我的 .xmobarrc(不熟悉的面板应用程序)有一个配置设置,可以在我的笔记本电脑上显示电池寿命,而不是在我的台式机上。
像这样管理具有每台机器差异的文件的最佳方法是什么,如果我在一台机器上更改应该影响所有机器的东西,我可以合并回来,如果我在一台机器上更改不应该合并,不会。显然,与 rsync/unison/etc 不同的是,需要像 git 这样的 DVCS,但我不确定如何设置它。
主分支,每台机器一个分支,我来回选择合并/变基/樱桃?这似乎有点乏味。有没有更好的办法?
mercurial - 如何始终了解 Mercurial 中的所有标签?
我不使用 Mercurial,但我想开始,所以我正在阅读它。我广泛使用的唯一 SCM 系统是 CVS。我读过的关于 Mercurial 的大部分内容都是有道理的,而且听起来不错。但我对它做标签的方式时而感到震惊和困惑。
标记只是变更集的昵称(“变更集”实际上是指变更集产生的状态)。凉爽的。从标签到变更集 ID 的映射存储在.hgtags
文件中。也很酷。该.hgtags
文件是版本化的。
什么?
这有很多违反直觉的后果。例如,如果我提交了一个我想要标记的变更集(例如,将形成版本 1.0 的代码),我必须在标记后再次提交,以将更新的标记文件放入存储库。如果我稍后更新到该标记的变更集,则工作副本将不包含该标记的任何知识。如果我做了一些工作,从而建立了一个新分支(例如,对于错误修复,朝着 1.1 前进),那么该分支将不知道它所生长的标签。除非我手动复制它,否则就是这样。
随着原始主干和我的新分支上的开发继续进行,并创建标记以标记重要的变更集(主干上的 2.0 版本,分支上的 1.1 和 1.2 错误修复版本),两个分支将在不知道另一个的情况下继续进行分支的标签。所以,如果我完成了一个分支的工作,并且想要切换到另一个分支上的某个特定变更集(例如,我完成了 1.2 错误修复版本,但现在必须从基于 2.0 的 2.1 错误修复开始),我现在被填满了。我当前的变更集不知道 2.0!
我能做些什么?
- 我可以请在 2.x 分支上工作的人读出 2.0 的实际变更集 ID,并明确使用它,但这令人震惊。
- 我可以命名我的分支,也可以使用标签,这样我就可以跳到 2.x 分支的头部,从而了解新标签,然后跳回 2.0 标签。假设分支与标签不同,是普遍可见的——是这样吗?即使是这样,这似乎也很笨拙。
- 我可以在存储库之外维护一个全局
hgtags
文件,并使用几个钩子在更新时拉入副本,覆盖本地副本,并在提交时复制回任何更改。我不确定这在多用户环境中如何工作,开发人员正在将更改推送到共享存储库;我可能需要一个单独的存储库来存放hgtags
文件。 - 我可以使用本地标签,它位于版本控制机制之外,从而避免了整个问题。与共享全局标签一样,我必须建立一种机制来
localtags
在开发人员之间同步文件。
这些解决方案似乎都不是很好。我应该怎么办?
这里的一个假设是我正在使用单个存储库中的命名分支来管理分支,而不是每个分支的存储库。如果我做后者,情况会更好吗?
mercurial - 从 Visual Sourcesafe 迁移到 Mercurial
将 Visual Sourcesafe 存储库移动到 Mercurial 的最佳方法是什么(我有兴趣保留所有历史记录)?
version-control - hg 本地忽略
我可以发誓有一种方法可以将本地忽略文件保留在 hg 存储库中,即功能类似于 .hgignore 的文件,但未检入存储库。例如,如果使用不同的 IDE,这可用于忽略对 IDE 项目文件的更改。我很难找到它是如何完成的。有人记得细节吗?
windows - 开源 Clearcase 替代品
我正在帮助为一个新程序设置 SCM,我们目前正在决定一个 VCS。
此时的主要竞争者是 SVN、ClearCase、SVN+DVCS,而且只是一个 DVCS。
目前,该团队倾向于 SVN 或 SVN+DVCS。我们希望避免 ClearCase 的费用和管理成本,但希望它提供的工作流程和版本控制选项。我也提出了使用 DVCS 的选项,并且正在考虑这个想法。
对于 DVCS,我们正在考虑 Mercurial、Bazaar 和 Git。团队对 SVN 感到满意,但不认为它会提供所需的多功能性,这就是我们在 SVN 选项之上考虑 DVCS 的原因。
有没有人有任何建议(例如现有的工具、流程)来进行这样的设置?
担忧包括:
- 易于设置
- 设置工作流程(开发 <-> 代码审查 -> 测试 -> 主干,然后是主干 -> 集成测试分支 -> 将错误修复放入发布分支的发布),审计(发现错误,何时引入)
- 生成指标
- 用于习惯 ClearCase 的开发人员的合理学习曲线。
- 视窗开发
- 问题跟踪器集成(可能会是 Redmine,虽然它不是一成不变的)
version-control - 有没有办法删除 Mercurial 中单个文件的历史记录?
我想我已经知道了这个问题的答案,但我想我还是会问:
我们有一个文件被添加到 Mercurial 存储库中,其中包含敏感信息。有没有办法在不删除整个仓库的情况下删除该文件及其更改历史记录?
git - git cherry 混乱 - 不像文档中描述的那样工作
文档说:“因为 git-cherry 比较的是变更集而不是提交 id (sha1),所以您可以使用 git-cherry 来确定您在本地进行的提交是否已在不同的提交 id 下应用。”
让我们来看看:
git show 显示 409c.. 和 533e 的相同变更集
这意味着变更集在 master 和 release-1.1.0 中。那么 git cherry 怎么会显示 533e .. 呢?
git - git 子模块:自定义
使用 git 子模块时,进行自定义的首选方式是什么?我是不是该...
- 分叉项目并跟踪分叉
- 尝试覆盖默认行为
- 在本地进行更改
如果这些都没有意义,那又是什么?