将遗留代码库从 cvs 转移到分布式存储库(例如 git 或 Mercurial)。初始存储库设计所需的建议[关闭]

2023-11-23

简介和背景

我们正在更改源代码控制系统,目前正在评估 git 和 Mercurial。总代码库大约有 600 万行代码,所以不算大,也不算小。

首先让我简单介绍一下当前存储库设计的外观。

我们有一个用于完整代码库的基本文件夹,在该级别之下有在多个不同上下文中使用的各种模块。例如,“dllproject1”和“dllproject2”可以被视为完全独立的项目。

我们正在开发的软件称为配置器,可以根据不同的客户需求进行无限定制。我们总共可能有 50 个不同的版本。然而,他们有一个共同点。它们都共享几个强制模块(mandatory_module1 ..)。这些文件夹基本上包含内核/核心代码和公共语言资源等。所有自定义都可以是其他模块(module1 ..)之间的任意组合。

由于我们当前使用的是 cvs,因此我们在 CVSROOT/modules 文件中添加了别名。它们可能看起来像这样:

core –a mandatory_module1 mandatory_module2 mandatory_module3
project_x –a module1 module3 module5 core

因此,如果有人决定在project_x上工作,他/她可以通过以下方式快速检查所需的模块:

base>cvs co project_x

问题

直观上,将基本文件夹作为单个存储库感觉是错误的。作为一名程序员,您应该能够检查您正在使用的当前项目所需的确切代码子集。您对此有何看法?

另一方面,将每个模块放在单独的存储库中感觉更正确。但这使得程序员更难检查他们需要的模块。您应该能够通过单个命令来完成此操作。所以我的问题是:在 git/mercurial 中是否有类似的定义别名的方法?

任何其他问题、建议、指点都非常欢迎!

附言。我搜索过类似的问题,但觉得没有一个问题 100% 适用于我的情况。


只是一个简短的评论来提醒您:

  • 这些迁移通常提供了重新组织源的机会,不是沿着模块(每个模块都有一个存储库),而是沿着功能域拆分(同一给定功能域的多个模块放入同一存储库中)。

Then 子模块被用作定义一个配置.

  • Git 没问题,但是来自莱纳斯本人承认,将所有内容放入一个存储库可能会出现问题。

[...] CVS,即它实际上最终几乎面向“一个文件” 一次”模型。

这很好,因为你可以拥有一百万个文件,然后只检查 其中一些 - 你甚至永远不会see对方的影响 999,995 个文件。

git 从根本上来说,从来没有真正关注过整个仓库。即使你 限制一下事情(即只查看一部分,或者让历史记录消失) 稍微向后退一点),git 最终仍然总是关心整个事情, 并携带知识。

因此,如果你强迫 git 将所有东西视为一个整体,那么 git 的扩展性会非常糟糕huge存储库。我不认为这部分是真正可以修复的,尽管我们 也许可以改进它。

是的,还有“大文件”问题。我真的不知道该怎么办 处理大文件。我知道我们很讨厌他们。


上述两点主张对大型系统(和大型遗留存储库)采用更加面向组件的方法。

With Git 子模块,您可以在项目中查看它们(即使这是一个两步过程)。然而,您拥有的工具可以使子模块管理更容易(git.rake例如)。


当我考虑修复多个项目之间共享的模块中的错误时,我只需修复该错误并提交它,然后所有项目都只需进行更新

这就是我在帖子中描述的供应商分支机构作为“系统方法”:每个人都致力于最新的(HEAD)一切,并且对于少量项目来说是有效的。
虽然对于大量的模块来说,“模块”的概念仍然非常有用,但是它的管理与DVCS不一样:

  • 对于密切相关的模块(又名“在同一功能领域”,例如“与财务领域中的 PNL - 利润和损失 - 或“风险分析”相关的所有模块),您确实需要使用最新的(HEAD)涉及的所有组件。
    这可以通过使用子树策略,不是为了让您发布(推送)对其他子模块的更正,而是为了跟踪其他团队完成的工作。
    Git 的额外好处是,这种“跟踪”不必在您的存储库和一个“中央”存储库之间进行,也可以在您和其他团队的本地存储库之间进行,从而可以非常快速地进行跟踪。类似性质的项目之间来回集成和测试。

  • 但是,对于不直接位于功能域中的模块,子模块是更好的选择,因为它们引用模块的修复版本(提交):
    当低级框架发生变化时,您不希望它被传播瞬间,因为这会影响所有其他团队,然后这些团队必须放弃他们正在做的使代码适应新版本的工作(尽管您确实希望所有其他团队都了解这个新版本,以便他们能够不要忘记更新该低级组件或“模块”)。
    这允许您仅使用其他模块的官方稳定识别版本,而不是潜在不稳定或未经过完全测试的 HEAD。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将遗留代码库从 cvs 转移到分布式存储库(例如 git 或 Mercurial)。初始存储库设计所需的建议[关闭] 的相关文章

  • DVCS命令的统一

    当处理多个 开源 项目时 多个版本控制系统开始出现问题 虽然它们共享共同的操作 但我经常在输入时犯错误hg add反而git add 我记得前段时间看到过一个项目 通过提供基本命令以统一的方式访问不同的源代码控制软件提交 ci add等在外
  • refname 不明确且拉取失败

    我运行了以下命令 因为我想将生产分支移回而不必先签出 git branch f production HEAD 1 现在 当我检查生产时 我收到以下警告 warning refname production is ambiguous 然后我
  • git diff 在尖括号中显示 unicode 符号

    我有一个带有 unicode 符号 俄语文本 的文件 当我修复一些拼写错误时 我使用git diff color words 看看我所做的改变 如果是 unicode 西里尔文 符号 尖括号会造成一些混乱 如下所示 cat p1 cat p
  • SSH 到 Openshift 服务器失败

    我正在 openshift 服务器上使用 jboss catridge 我希望与其他人共享此实例并添加其他用户的公钥 id rsa pub 当其他人尝试访问该实例时 他会收到以下错误 我在他的实例中尝试了同样的方法 但看到了同样的错误 与
  • 分支明显不同,但提交历史是相同的

    git status告诉我我的分支和我在另一个存储库上开始的分支已经分歧 On branch master Your branch and origin master have diverged and have 13 and 13 dif
  • 如何解决 VSTS 中拉取请求中的合并冲突?

    我已经创建了拉取请求 我进入了这个 批准 按钮不执行任何操作 并且 完成 被禁用 如何解决拉取请求中的冲突 Update 微软刚刚添加了基于浏览器的合并 这可能会让你摆脱小冲突的困境 并提供自 Sprint 150 起改进了不同场景的可视化
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • 有没有办法让 git flow 显示它在幕后执行的命令?

    有什么方法可以让 git flow 提前告诉我当我执行 flow 命令时它将执行的确切 git 命令吗 或者告诉我它是东吗 我只能看到输出和摘要吗 你可以使用Git的GIT TRACE 环境变量 http git scm com docs
  • git reset 命令中的 ~1 是什么意思?

    git 重置 HEAD 1 我的印象是 1 的意思是 从 HEAD 开始 遵循 1 链接 并将 HEAD 标签设置为新的提交节点 我正期待着 git 重置 HEAD 2 跟随 2 个链接 然后设置 HEAD 标签 但是 如果我尝试它 我会收
  • 第一次使用node.js - “ReferenceError:节点未定义”

    我刚刚安装了node js 我尝试编写应该检查版本的node v 但它不起作用 这是输出 gt node v ReferenceError node is not defined at repl 1 2 at REPLServer self
  • .gitconfig 别名函数调用

    我在 gitconfig 中定义了以下别名 alias teamcity tc tc是我在我的中定义的一个shell函数 bashrc文件 由于某种原因 我收到以下错误 aafghani 03 git workday amirafghani
  • 我可以直接从我的谷歌云端硬盘在线推送/拉取吗?

    有一些方法可以通过谷歌驱动器同步 Windows 应用程序将我的本地 git 存储库同步到我的谷歌驱动器 但我想知道我是否可以完全绕过它的需要 Fro eg git remote add origin https drive google
  • Netbeans 和 Git,.obj 文件被忽略

    我正在开发一个涉及 obj 文件的小型 git 项目 当我查看 项目选项卡 时 我发现它们被忽略了 但如果我查看我的 gitignore 我无法理解为什么 DepthPeeling nbproject private DepthPeelin
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • git 日志历史记录图,每次提交一行,彩色,带有日期

    我需要的格式如下 git log decorate graph oneline date order 但我也需要它 包含日期 短 具有相同的颜色 I tried git log decorate graph oneline date ord
  • 如何使用 AWS Lambda 安装 Git?

    我在代码提交存储库中有代码 我正在编写一个 lambda 函数来为代码提交存储库的每个签入 事件 构建代码 我无法安装 git 因此无法克隆存储库 我该怎么办呢 正如其他人提到的 在 lambda 上安装 git 要么非常困难 要么完全不可
  • 当当前分支上有未提交的更改时签出另一个分支

    大多数时候 当我尝试签出另一个现有分支时 如果我在当前分支上有一些未提交的更改 Git 会不允许我这样做 所以我必须首先提交或隐藏这些更改 然而 有时 Git 确实允许我在不提交或存储这些更改的情况下签出另一个分支 并且它会将这些更改携带到
  • Android 存储库初始化失败

    我想我非常仔细地遵循该网站的说明 http source android com source downloading html http source android com source downloading html 但是当我尝试这
  • 无法通过 Git Bash 克隆 git 存储库

    在尝试使用克隆存储库时git clone 它显示以下错误 致命 无法访问 https github com microsoft c9 python getting started git https github com microsoft

随机推荐