Git 和 Visual Studio 项目参考

2024-03-20

好吧,我的问题的简短版本是:

当您的项目在多个解决方案之间共享时,在 Git 中处理项目引用的最佳方法是什么?我的 Git 存储库应该如何组织?

长版本是:

我们是一个小型开发团队(5 名开发人员),目前我们使用 TFS 作为我们的源代码控制和构建服务器,Visual Studio 是我们选择的 IDE。我一直热衷于尝试新事物并尝试改善我们的开发环境,因此我决定阅读 Git,看看它是否可以很好地替代 TFS 的源代码控制部分。 我们刚刚将 Jira 集成到我们的工作流程中,因此我决定尝试使用 Stash 作为我们的 Git 环境,因为它与 Jira 的集成非常好。我现在正在尝试找出组织 git 存储库的方法,这就是我来这里的原因。现在我将描述我们组织了多少解决方案。

我们有很多解决方案。有些是库,有些是通过 Visual Studio 中的项目引用引用这些库的程序。

所以让我困惑的主要问题是如何处理许多解决方案中引用的库?

我们是否应该开始对库进行版本控制并将每个库放在单独的存储库中?当库收到必须部署的更新并且该库正在被 20 多个解决方案使用时,这种方式似乎会涉及大量额外的维护。我错了吗 ? 我看到的另一个缺点是 Visual Studio 中不再有项目引用,这会使调试变得更加乏味。

我是否应该使用我们所有的解决方案进行大型回购,这样我们所有的参考资料都是最新的?

我还认为也许我可以创建自己的 nuget 存储库,其中包含所有这些库,这样在需要时更新引用的库就不会那么麻烦了。这只是一个想法,我还没有正确研究过这一点,所以我不确定这是否有任何好处。

那么,有没有人可以给我一些关于这方面的建议?


不幸的是,这是没有单一答案的问题之一——这取决于情况。

最简单的解决方案始终是拥有一个存储库。这避免了管理具有不同版本的多个存储库的许多问题。但这只有在所有东西都只有一个版本的情况下才真正有效。同一存储库中的两个产品几乎不可能有不同的发布周期。那就是疯狂。当存储库增长到任何不显着的大小时,它也不会真正扩展。

正如蒂尔指出的,一种选择是Git 子模块 http://git-scm.com/book/en/Git-Tools-Submodules。这将允许您在特定提交或分支处动态地将一个存储库的源加载到另一个存储库中。当然,这还附带一个整体问题的主机 http://somethingsinistral.net/blog/git-submodules-are-probably-not-the-answer/,一些特定的子模块和其他子模块只是链接存储库的本质。*

有些人真的很喜欢Git 子树 http://blogs.atlassian.com/2013/05/alternatives-to-git-submodule-git-subtree/,这有点作弊,它允许您重复提取然后跨存储库导入文件夹的历史记录,然后再返回。

最后,您可以依赖依赖管理工具,具体取决于您的构建环境。我对 Visual Studio 的了解不够,无法发表评论。在 Atlassian,我们(目前)使用 Maven 来解决这个问题。如果您使用 JS,它可能是 NPM/Bower,在 Ruby 上它是 Gems。为了对程序 Y 进行微小的更改而不得不发布新版本的库 X 可能会令人沮丧,但在大多数情况下它运行得很好。

这确实是一个持续存在的问题,我知道有些事情每天都让我烦恼。我觉得可能有机会找到一个更好的解决方案,结合最好的子模块和依赖管理,但我还没有找到它。

我希望这有帮助吗?

* 除了工具问题之外,我自己对子模块最大的抱怨是它鼓励人们签入其他存储库的绝对 URL。这一切都很完美,直到您决定迁移 Git 服务器或其中一个存储库,但现在一切都崩溃了。前几天我发现你可以使用相对路径 https://stackoverflow.com/questions/1974181/cant-add-git-submodule-when-specified-as-a-relative-path,这很简洁,但并不能解决问题。

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

Git 和 Visual Studio 项目参考 的相关文章

随机推荐

  • 检测到设备正在关闭?

    在我的 Android 应用程序中 如果设备突然关闭 我需要执行一些操作 有什么方法可以检测设备是否已关闭 广播操作 设备正在关闭 这是广播时 设备正在关闭 完全关闭 而不是睡眠 一次 广播完毕 将进行最后的关闭 所有 未保存的数据丢失 应
  • RecyclerView 的 GridLayoutManager 上的方形布局

    我尝试用方形图像制作网格布局 我认为一定可以操纵GridLayoutManager通过操纵onMeasure做一个 super onMeasure recycler state widthSpec widthSpec 代替 super on
  • 使用 apache2 作为 proxypass 时的 Apache OpenMeetings 4.0.4 CSRF 攻击

    我有 Apache OpenMeetings 4 0 4 女巫 Apache 2 2 22 作为代理 在 OM 的 conf red5 properties 中我有 http port 8080 我想做两件事 重定向 HTTP 80 gt
  • Laravel Jetstream 与 Intertia 不返回用户

    我已经安装了带有 Inertia 的 Jetstream 我注册一个用户 然后尝试登录 控制台给出以下错误 Vue warn Error in render TypeError vm page user is null 当我查看控制器的响应
  • SSRS - 如何使 IIF 语句忽略无效值

    我正在使用 Business Intelligence 2008 在 SSRS 中创建一个表 我有一个日期 作为字符串 作为表中使用的值之一 该值可能有一个表示日期的字符串 也可能为空 如果它有一个值 我希望该值以不同的方式格式化 现在 我
  • Google 自定义搜索 API - 排序/过滤

    无论如何 是否可以通过页面标题标签或某些元标签来过滤结果 我阅读了文档 但一团糟 有人有想法吗 是的 您可以对自定义元标记进行排序和过滤 首先 将要过滤的数据放入元标签 https developers google com custom
  • iOS 4核心横向运动姿态

    我一直在尝试根据从 CMMotionManager 返回的 CMAttitude 旋转视图 特别是俯仰 x 和滚动 y 我用参考态度来设定我的视野 这对于纵向模式非常有效 但是当我尝试在横向视图中执行此操作时 它就出错了 由于手机现在逆时针
  • 隐藏 JSON.stringify() 输出中的某些值

    是否可以排除某些字段不包含在 json 字符串中 这是一些伪代码 var x x 0 y 0 divID xyz privateProperty1 foo privateProperty2 bar 我想排除 privateProperty1
  • 反转字符串,但不反转整数

    面试问题 反转字符串 但仅反转字母字符 整数应保持其原始位置 输入 abc12de 输出 edc12ba 输入 abcde79 输出 edcba79 输入 123ab456 输出 123ba456 下面是我的半工作代码 def revers
  • Razor 视图语法无法识别 HTML 属性中的“@”

    我正在将一个项目从 MVC 2 迁移到 MVC3 和 razor 视图引擎 在 MVC 2 中 我将有以下 html div div 使用剃刀时 我尝试了以下操作 它呈现文字文本 电子邮件受保护 cdn cgi l email protec
  • 如何使用 Coffee-Bytes 代码折叠

    如何使用 Coffee Bytes 代码折叠 http market eclipsesource com yoxos node com cb eclipse folding feature group 我想使用用户定义的区域 但不知道如何使
  • 如何在多个程序中接收相同的udp流?

    我有一个封闭的第三方系统 它发送单播 UDP 流 MPEG TS 我想在同一台计算机上的两个不同程序中访问该流 我无法更改源上的任何内容 甚至无法更改 IP 或端口 除了编写自己的小程序来捕获流然后创建新流并重新发送这两个流之外 还有其他选
  • 迁移以更改字段的默认值,并将所有现有记录的值更改为新的默认值(仅当它具有旧的默认值时)。

    我需要将字段的默认值从 0 更改为 3 但问题是我已经有数千条记录 并且希望这些记录仅当记录的默认值是 0 时才将值从 0 更改为 3 但对于其他值 例如1 2 应该保持不变 我该怎么做 在迁移中 您应该使用方法change column来
  • WebRTC 无法从 USB 输入设备获取视频源(readyState 转为结束)

    我正在尝试使用 WebRTC 在屏幕上显示视频输入作为实时源 我不想进行任何点对点通信或类似的事情 只是显示视频源 我的代码对于我的笔记本电脑集成网络摄像头工作得很好 但是当我连接外部视频输入设备 在本例中是一台旧摄像机 使用 StarTe
  • 如何在 Mac 上的 Chrome 中复制请求负载?

    最近我无法从以下位置复制已解析的请求负载Chrome 开发工具 按钮被禁用 我可以复制正常的 POST 和 GET 请求 但不能复制已解析的 JSON 负载 这是巨大的痛苦 有人知道解决方案吗 来到你的问题有同样的问题 我的解决方案 用鼠标
  • 应用程序布局中的渲染引擎

    背景 我正在创建一个由核心和多个模块组成的应用程序 这些模块是轨道引擎 并提供实际的功能 因为核心本身仅充当主机 引擎托管于 lib并安装在各自的路径上 coreApp lib module1 module2 etc 然后像这样安装模块 m
  • 增加 matplotlib 中的内部填充/边距

    如何增加 修改内边距 填充 用红色箭头标记的 绿色的可以增加subplots adjust 有没有办法改变内部的 红色 改变源和观察者之间的距离 ax dist 15 default is 10
  • 如何在 R 中安装 keras 包

    我正在尝试安装深度学习包keras在 RStudio 上使用这个website https blog rstudio com 2017 09 05 keras for r 我安装了keras using install packages k
  • 对象化 NoClassDefFoundError

    所以我刚刚使用 Google Eclipse 插件在 Eclipse Indigo 中创建了一个新的 GAME 项目 并且我只有以下 servlet public class TestServlet extends HttpServlet
  • Git 和 Visual Studio 项目参考

    好吧 我的问题的简短版本是 当您的项目在多个解决方案之间共享时 在 Git 中处理项目引用的最佳方法是什么 我的 Git 存储库应该如何组织 长版本是 我们是一个小型开发团队 5 名开发人员 目前我们使用 TFS 作为我们的源代码控制和构建