问题标签 [repository-design]

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.

0 投票
6 回答
16609 浏览

svn - Subversion 存储库布局

大多数颠覆工具使用 /trunk、/branches 和 /tags 创建默认存储库布局。该文档还建议不要为每个项目使用单独的存储库,以便更轻松地共享代码。

遵循该建议导致我拥有一个具有以下布局的存储库:

等等,你明白了。随着时间的推移,我发现这个结构有点笨拙,我突然想到对这些建议有另一种解释,例如:

那么,人们使用哪种布局,为什么?或者 - 还有另一种方法可以做我完全错过的事情吗?

0 投票
2 回答
388 浏览

c# - 在此领域数据建模场景中访问参考数据的正确方法是什么?

初始警告:很长的帖子,无论如何我可能完全错误地理解了模式:

给定以下类,它是客户聚合的开始:

CustomerType 由一个值对象表示:

当我有一个带有 CustomerTypeId 的客户对象时,这一切都很好。但是,当我想在我的 MVC 视图中填充 DropDownList 时,我正在努力解决如何从 ICustomerTypeRepostory 正确获取 CustomerType 值列表的概念。

ICustomerTypeRepository非常简单:

基本上,我想要的是能够ICustomerTypeRepository从我的控制器正确调用,但是我认为最好将 DAL(存储库)层与控制器分开。现在,我只是把事情复杂化了吗?

这就是我的控制器当前的状态:

这对我来说似乎是错误的,因为我在 Controller 和 Customer 中有存储库。对我来说,应该有一个用于 CustomerType 的隔离访问层,这似乎是合乎逻辑的。即CustomerType.GetList()

那么,我应该通过哪种方式将CustomerType对象暴露ICustomerTypeRepositoryCustomerController?

0 投票
2 回答
139 浏览

svn - 在 tortoisesvn 中更改文件树

我们有一个 subversion 存储库,它没有使用标准的 \trunk \tags \branch 布局设置,现在几年后我们正在寻求纠正这个问题。我们使用 tortoiseSVN。

我们当前的系统是我们有一个“dev”文件夹,其中包含 UI、业务逻辑等的各种子目录。

理想情况下,我们希望有一个包含主干、分支和标签的 dev 文件夹,然后在主干文件夹中创建我们的子目录。

我的计划是在 dev 文件夹下创建新的主干、分支和标签文件夹,与我们的子目录处于同一级别,添加并提交新文件夹,然后将子目录 svnmove 到主干文件夹中。

我可以在最新的工作副本上执行此操作;但是,我们所有人都有许多本地更改,我担心当我们更新时,我们不可避免地会遇到数百个树冲突。任何人都可以看到更好的方法吗?

我能看到的唯一选择是将所有本地更改的文件从我们当前的工作副本单独复制到存储库的新签出中,然后删除旧的工作副本,但这并不理想。我们有很多本地更改,而且不太可能我们都有一个相当最新的工作副本。

提前谢谢了,

戴夫

0 投票
2 回答
596 浏览

branch - 如何使用带有非标准 svn repo 布局的 git-svn 访问 svn 分支?

svn 中的标准 repo 布局如下。

我正在使用的存储库是一个更扁平的结构。

本质上,主干与其他分支处于同一水平。因此,我不能使用 -s 或 -b 选项git svn init

我将如何trunk作为 git 分支加入masterfeatureX作为同名 git 分支加入?我不关心任何其他分支或标签。

我见过类似的问题,人们建议重组 svn 存储库。就这个问题而言,这是不可能的。

0 投票
1 回答
1489 浏览

svn - 为网站的 git repo 设置项目目录结构

我正在开发一个drupal网站。我一直在保留我最近移植到 github 的自定义模块的 svn 存储库,以便与其他开发人员一起工作。

来自 SVN,我习惯于直接从我的 SVN 存储库更新暂存网站上的自定义模块文件夹。但是从我读过的内容来看(如果我错了,请纠正我)这个工作流程在 Git 上是不可能的。

为 drupal Web 项目设置存储库的推荐方法是什么。我是否应该将整个站点放入一个受修订控制的项目(drupal 核心和贡献模块以及任何自定义代码)。Orm 我可以继续只将自定义代码保留在版本控制之下吗?

笔记:

我当前存储库的目录结构与网站的结构不同,因为我只是重新设计了我的自定义代码。

我确实在@Charles Bailey 在他对"how-to-do-a-git-export-like-svn-export" 的回答中的建议中看到了我的可能性。

那么真正的问题就变成了:

我是否可以更改存储库的目录结构,同时保持我的存储库历史完整?


我没有仔细看 git-archive 概要:

<tree-ish> [path]显然意味着我可以“归档”存储库的任何部分。我很困惑,因为我错误地认为我只能归档整个存储库。因此,这种方法将替代我在 SVN 中能够做的事情。:)

0 投票
2 回答
3330 浏览

git - 如何跨 2 个服务器同步 Git 存储库

我正在寻找一种在 (2) 台服务器之间自动同步 Git 存储库的方法,以便它们可以从第三点互换。

情况如下:我们在所有项目中大量使用 git,并且一些 Repositories 的大小增长得相当快。目前我们有一个中央服务器,每个人都在向/从这个服务器推/拉。然而,这一切都通过互联网连接,因此不是最快的方式。

想法:在办公室中放置另一台服务器,并在那里拥有所有 git 存储库以供办公室使用。该服务器需要与在线服务器同步。充其量,用户甚至不会通过一些 dns 调整知道他们使用的是哪一个,因此当连接到那里的网络时,在线服务器存储库的地址会解析为办公室内的存储库。

有没有人已经在做类似的事情了?或者有没有更简单的方法来完成目标。

0 投票
1 回答
86 浏览

security - 我的安全逻辑应该去哪里?

假设我有一个调用存储库层的 ASP.NET MVC Web 应用程序,该存储库层构建在 nHibernate 之上。控制器传递一个ISecurityToken封装当前用户身份和权限的存储库,存储库在查询时使用它只返回用户应该能够看到的行。

我希望实体(票证)只能由特定的用户组以及票证分配给的用户关闭。换句话说,假设CanCloseTicket()方法需要两个输入:

  1. 票证本身(或其当前所有者 ID)
  2. 当前用户的ISecurityToken

这种假设的方法应该在哪里?我可以看到几种可能性,但每种都有其缺点。

  • 在控制器中:控制器可以访问所有必要的东西,但这使得安全性被绕过成为可能。(“糟糕,在设置为 false 之前,我忘记在此操作中调用 CanCloseTicket() ticket.IsOpen!”这闻起来很糟糕。
  • 在存储库中:存储库也可以访问这两个部分,但我还必须将Ticket.IsClosed's setter 设为私有以阻止上述相同事情的发生。存储库位于与模型完全不同的程序集中,因此使用内部设置器将不起作用。相反,我可以将 setter 公开并将属性的当前值与其原始值进行比较,如果非特权用户将其关闭,则返回错误,但这对我来说也有点奇怪。(“糟糕,我忘记检查repo.CloseTicket()这个动作方法的返回值了!”)
  • 在票证中:添加Ticket.Close(ISecurityToken token)并让实体负责自己的安全逻辑感觉就像违反了SRP

我认为存储库是这里最好的选择,但感觉更像是最差的选择。还有别的事吗?

0 投票
0 回答
245 浏览

visual-c++ - VC++ 目录的 Mercurial 存储库结构

我正在将我们的旧 C/C++ 代码库迁移到 Mercurial。我有点不清楚存储库结构的最佳(或至少接近最佳)应该是什么样子,因为我发现的示例是针对 .NET 或 Java 的。我的问题主要是关于处理VC++ 目录,在我之前我们就一直在使用它。

以下是我可以看到我们无需做太多思考就可以做到这一点,但我可以预见在链接期间会出现一些版本控制/依赖性问题(链接到旧的 .lib)。\source\include并且\static-libs在本例中是旧的全局VC++ 目录在签出时。

进入备选方案#2。这会更好吗?如果我唯一想做的就是使用新版本的 lib 对某个项目进行新的生产构建,我是否可以进入子存储库并仅对子存储库进行拉取/更新/合并?这种替代方案实际上删除了全局\lib目录并改为按项目创建,希望它更灵活一点。另一方面,签入已编译的库会感觉非常错误。

还有其他想法吗?你怎么做呢?在过去的 4 年中主要使用 .NET 工作,我不再那么喜欢这些全局\source/\include文件夹,但我不明白我们如何才能完全摆脱它们。绝对应该可以稍微削减源代码或将一些代码移动到库中,从而最大限度地减少那些 .h/.cpp 文件中的项目间依赖关系,但仍然需要存在一些简单的代码重用。

附加问题:我可以看到\include甚至\source在 SAME 存储库中,因为它们几乎是同步的,你是这样做的吗?

0 投票
1 回答
365 浏览

rest - 如何为提供基于 REST 的智能访问的存储库建模

我正在寻找一种独特的方式来以 REST 方式查询以下用例:-

假设存储库包含以下内容:-

我们的存储库可以基于 Google Storage、Amazon S3、Mongodb GridFS、Java 内容存储库 (JCR 2.0) 或简单的文件系统。

存储和检索上述数据的理想方式是什么。我希望 REST URL 尽可能具有表现力,以便我可以对上述任何用例 [1-6] 进行建模。感谢有关如何设计通用存储库的任何指示,以便我可以使用适当的命名约定来根据上述查询获取文档。

0 投票
1 回答
20557 浏览

visual-studio - 传统 n 层设计中具有多个项目的 Git 存储库的最佳实践

我正在从集中式 SCM 系统切换到 GIT。好的,我承认哪一个,它是 Visual SourceSafe。因此,除了克服 Git 命令和工作流程的学习曲线之外,我目前面临的最大问题是如何将我们当前的存储库迁移到 Git,以了解单个或多个存储库的某种风格。

我已经看到以各种方式提出这个问题,但通常只是基本的......“我有想要共享一些较低级别库的应用程序”并且预设响应始终是“使用单独的存储库”和/或“使用Git 子模块”没有太多解释何时/为什么应该使用这种模式(它克服了什么,它消除了什么?)从我迄今为止对 Git 的有限知识/阅读来看,似乎子模块可能有自己的恶魔要战斗,特别是对于刚接触 Git 的人。

然而,我还没有看到有人公然问过,“当你有传统的 n 层开发(UI、业务、数据,然后是共享工具),其中每一层都是自己的项目时,你应该使用一个还是多个存储库?” 我不清楚,因为几乎总是,当添加新的“功能”时,代码更改会波及每一层

为了使 Git 的问题复杂化,我们在“框架”中复制了这些层,以便从开发人员的角度制作更易于管理的项目/组件。出于本次讨论的目的,我们将这些项目/层的集合称为“Tahiti”,它代表了一个完整的“产品”。

我们设置的最后一个“层”是添加在大溪地进行定制/扩展的客户网站/项目。在文件夹结构中表示它可能最好如下所示:

在解释了我们如何通过多个项目扩展传统的 n 层设计之后,我正在寻找任何关于您在类似情况下做出的决定的经验(即使是简单的 UI、业务、数据分离都是您的全部)使用)以及由于您的决定而变得更容易/更难的事情。我对子模块如何有点痛苦的初步阅读是正确的吗?痛苦大于好处?

我的直觉反应是为 Tahiti 提供一个存储库(除“客户项目”外的所有项目),然后为每个客户创建一个存储库。我猜的整个大溪地资源必须是 <10k 文件。这是我的推理(我欢迎批评)

  • 在我看来,在 Git 中,您想要跟踪“功能”与单个“项目/文件”的历史记录,即使我们的项目分离,一个“功能”也将始终跨越多个项目。
  • 核心网站中编码的“功能”几乎总是对核心网站和“框架”的所有项目的影响最小(即 CoreWebsite、Framework1.Business、Framework1.Data)
  • 一个特性可以很容易地跨越多个框架(我想说我们实现的特性中有 10% 会跨越框架——CoreWebsite、Framework1.Business、Framework1.Data、Framework2.Business、Framework2.Data)
  • 以类似的方式,一项功能可能需要更改 1 个或多个 SharedLib 项目和/或“UI 网站助手”项目。
  • 对客户自定义代码的更改几乎总是只在其存储库本地进行,并且不需要跟踪对其他组件的更改以查看“整个功能更改集”是什么。
  • 鉴于一个功能跨越项目以查看整个范围,如果每个项目都是它自己的存储库,那么尝试分析存储库之间的*所有*代码更改似乎会很痛苦?

提前致谢。