Git 中的子模块、子树或其他依赖项?

2023-12-12

我有一个较大的项目,其中有很多模块/库及其各自的存储库。这些模块中的大多数是其他模块的依赖项,而不是项目的依赖项。现在已经到了主项目有多个子项目并且许多模块被共享的地步。有些依赖关系的深度超过 3-4 层。

我读过可以在项目内部更新/拉取子模块,但这仅适用于第一级子模块。假设这些子模块有自己的子模块(第二级),并且某些第一级子模块共享相同的第二级子模块。另外,第二级子模块有它们的子模块(lvl3)等。现在我应该做的是首先推送第三级中所做的更改,而不是更新第二级模块中的子模块并推送它们,现在我可以转到第一级,更新和推送,最后更新我的项目子模块并推送它们。

现在这不仅是更多的工作,而且仍然没有解决我的问题,为什么我需要这样的东西,即当对相互依赖的存储库进行更改时能够轻松地推送和拉取多个存储库。很容易发生这样的情况:团队中的某人在 5 个存储库中的 4 个中推送更改,而当其他成员拉动除此之外的所有存储库时,生产线就会停止,直到发现错误。

对此我能做什么?也许有一些关于工作流程的建议,有没有其他人遇到过这个问题,或者 Git 中是否有一些功能可以解决这个问题。


我推荐android使用的repo工具。它足够通用,可以与任何 git 托管环境一起使用,并且不需要像子模块那样提交超级项目来更新子项目。

首先,按照此处所述安装客户端:https://source.android.com/source/downloading.html#installing-repo

然后创建一个清单存储库。清单是一个 xml 文件,描述了 git 存储库位置以及应检出它们的路径。像这样:

mkdir manifests
cd manifests
git init

创建清单文件default.xml:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>
  <remote name="github" fetch="ssh://[email protected]" />
  <default remote="github" revision="master" />
  <project name="git/git.git" path="git" />
  <project name="libgit2/libgit2.git" path="vendor/libgit2" />
</manifest>

然后添加、提交清单并推送到某处:

git add default.xml
git commit -m "My first try at a manifest file"
git push [email protected]:myusername/manifests.git master

现在您可以使用repo命令。

mkdir myproject
cd myproject
repo init -u [email protected]:myusername/manifests.git
repo sync -j2

您的 git 存储库将被克隆。您现在可以像平常一样在每一项中工作。在你推动任何一个项目之后,其他人需要做的就是repo sync并且它们将更新到最新版本(另请参阅repo start).

Caveats

您可能需要重新组织您的项目。通常,您可能有其他模块作为子目录(myproject/vendor/dependency)。虽然您仍然可以使用存储库维护此布局,但它将导致 git 存储库被另一个存储库签出。和.gitignore欺骗它可能是可行的,但我建议重新组织您的项目,这样存储库就不需要相互检查。

关于清单文件的简短说明

See https://gerrit.googlesource.com/git-repo/+/master/docs/manifest-format.txt有关 xml 文件中每个项目的完整说明。

See https://source.android.com/source/using-repo.html以获得简单的命令参考。repo help也很有用。注意:你应该忽略repo upload除非你使用 Gerrit。

<remote name="github" fetch="ssh://[email protected]" />

这就像添加一个遥控器一样git。这意味着我们可以引用给定名称的 url。

<default remote="github" revision="master" />

default 元素指定项目的默认选项。这相当于添加remote and revision每个项目的项目。这只是节省了一些打字时间。

<project name="git/git.git" path="git" />

这才是真正的工作发生的地方。repo sync将获取名称并使用斜杠将其附加到远程。在这种情况下,远程是默认的github,所以它会得到urlssh://[email protected]/git/git.git。它将检出项目到路径git在指定的修订版(在这种情况下默认是master)。随后的repo syncs 将签出最新版本(如果是分支)。

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

Git 中的子模块、子树或其他依赖项? 的相关文章

  • git 命令显示所有(轻量级)标签创建日期

    是否有一个衬垫可以向我显示所有 git 轻量级标签的创建日期 就像是 git show tags format date 我在这个发现link http osdir com ml git 2009 05 msg01404 html适合我需求
  • Git守护进程克隆错误

    All 我正在按照以下指示进行操作this SO https stackoverflow com a 377293 724357答案 快速提供回购 当我跑步时git clone git ipAddr git project我得到这个输出 r
  • 使用 Subversion 进行部分提交

    鉴于我做的案例两个独立的变化 in one文件 例如 添加了一个新方法并更改了另一个方法 我经常不想提交这两项更改 因为one提交 但作为two独立承诺 在 git 存储库上我会使用互动模式 of git 添加 1 http linux d
  • Eventmachine start_tcp_server 无接受器 - 端口正在使用或需要 root 权限(运行时错误)

    我已经 3 天无法运行本地服务器了 重新启动我的计算机没有帮助 有几次 在反复尝试大约 40 50 次之后 它随机地起作用了 我不明白为什么 我尝试过一次不同的端口并且有效 但从那以后 没有端口有效 每次我尝试运行我的 Rails 服务器时
  • 从 master 更改为新的默认分支 git

    这是一个场景 我们有一个默认的分支 Master 我们以此为基础 创建分支并向上推等等 我们现在创建了一个Develop分支Master并将其设置为默认开发分支 我想知道的是 我现在如何知道我的 git pull 命令是否通过命令行请求默认
  • 为什么在 Eclipse 中对 Egit 管理的项目禁用合并工具?

    根据Egit 用户指南 http wiki eclipse org EGit User Guide Using Merge Tool 要使用合并工具 应右键单击存在合并冲突的资源 然后选择Team gt 合并工具 但是 当我执行此操作时 合
  • 覆盖 Ivy 依赖项的修订版

    我使用 Apache Ivy 来处理库依赖性 在我的公司 我们有一个定期发布 版本控制的 核心 项目 然后 我们有许多针对特定客户的 客户 项目 每个客户项目都使用我们在客户项目的 ivy xml 中维护的核心项目的特定版本 一切都很好 有
  • 如何在本地快速拉取拉取请求

    在合并拉取请求之前 我想在本地快速拉取请求并运行测试并测试一些内容 我还不想点击 gihub 合并拉取请求 我以为滑轮会有帮助http ejohn org blog pulley http ejohn org blog pulley 但我收
  • Git 中的合并冲突是由什么构成的?

    git 如何确定特定合并存在冲突以及冲突是什么 我的猜测是这样的 如果正在合并的两个提交有一个共同的父提交 并且如果它们都更改了父提交的 X 行 那就是冲突 让我的理解变得复杂的是 更改 X 行 可能意味着用几行新行替换它 但这仍然显示为一
  • git Branch -d :致命 - 无法查找 HEAD 的提交对象

    假设我在一个裸存储库 远程 中 如果我尝试使用以下命令删除分支git branch d
  • 如何查看 github 的 SSH 密钥?

    我最近收到一封来自 Github 的电子邮件 要求我检查我的 SSH 密钥 请检查您的钥匙并确保您 认出他们 如果您有任何疑问 请拒绝钥匙并 上传新密钥 如何在 ubuntu 11 10 上使用 git 检查我的密钥 您可以按照 GitHu
  • Eclipse 与外部 src 和 Web 内容文件夹链接或映射

    首先这不是问题但是我遇到的问题的解决方案浪费了4 5个小时来找到解决方案 请让我知道是否有更好的替代方法来使用 eclipse 项目管理外部 src 文件夹 我正在使用版本控制系统 GIT 来管理我的项目 还使用外部 Git 客户端 Sou
  • 无法从我的电脑上使用 traefik 后面的 gitlab 进行 git 克隆

    这是我的 gitlab 和 traefik 配置 version 3 7 services gitlab web image gitlab gitlab ce latest restart always hostname gitlab ro
  • TeamCity 将功能分支推送到主分支

    有没有办法将成功构建的功能分支推送到另一个分支 我想要这样的东西 Git 存储库 Gitorious GitHub 等 分支机构 master 当前项目的代码 质量保证 代码等待 QA 的分支 功能分支 许多远程分支 开发人员可以在其中开发
  • Visual Studio Code 内置故事,用于查看 git 提交历史记录并对其内容进行比较

    In this https stackoverflow com questions 37899765 how can i view the git history in visual studio code 60013101 noredir
  • 在centos上设置jenkins:ssh密钥和git的问题

    经历了很多问题 但似乎没有什么能解决我的问题 或者更准确地说 我不确定我是否正确地完成了整个事情 所以这里是 已安装centos 6 3操作系统 然后我按照以下指南安装詹金斯 https wiki jenkins ci org displa
  • 未能将一些参考推送至 [email protected]

    当我尝试推送到 Heroku 存储库时收到此错误 我已经设置了autocrlf false在gitconfig中 但这个问题仍然存在 我也尝试过这个解决方案here https stackoverflow com questions 566
  • 如何禁用 GitHub 中的拉取请求?

    我试图了解如何禁用 github 中的 拉取请求 问题一 我们正在尝试使用变基工作流程 这意味着如果不是快速推进 那么使用拉取请求可能会有害 一种解决方案 为我想要禁用拉取请求的分支设置分支权限 或者将我添加为任何进入 master 的内容
  • 自动同步两个 git 存储库

    是否可以保持同步两个 Github 存储库 远程 的特定文件夹 有两个 github 存储库 repoA 和 repoB 这两个存储库都有名为 ABC 的文件夹以及其他独特的文件夹 如果repoA的文件夹ABC中的任何文件有更新 我想自动更
  • git-svn 如何知道要提交到哪个分支?

    我的存储库是 SVN 我使用 git 进行所有开发 我们有一个标准布局 我用以下命令初始化了我的本地存储库git svn init s

随机推荐

  • 如何使用 Perl 列出具有特定名称模式的目录下的文件?

    我有一个目录 var spool在其中 名为的目录 a b c d e f g h i j k l m n o p q r s t u v x y z 在每个 字母目录 内 有一个名为 user 在这个里面 许多目录称为auser1 aus
  • String.split(".") 没有分割我的长字符串

    我正在执行以下操作 String test this is a example String test2 test split 问题 test2没有物品 但也有很多 in the test String 知道问题是什么吗 注意公共字符串 s
  • MvvmCross 无法在 iPhone 上为 EditingDidBegin 创建目标绑定

    我有一个绑定到 EditingDidBegin 的应用程序 它在 iPhone 模拟器 iOS 7 上运行良好 但在实际 iPhone 上运行时 我收到以下警告消息 MvxBind 警告 1 29 无法为 EditingDidBegin 创
  • 如何将一个 Jupyter 笔记本导入到另一个笔记本中

    显然有可能import将一个 Jupyter 笔记本插入另一个 链接页面有相当多的代码来完成此操作 我应该将该代码添加到导入笔记本中吗 页面对此并不清楚 它应该是一个通用的解决方案 因此将所有代码添加到导入其他笔记本的所有笔记本中是没有意义
  • 为什么我的列表项项目符号与浮动元素重叠

    我有一个 XHTML Strict 页面 我在其中将图像浮动在常规文本段落旁边 一切都很顺利 除非使用列表而不是段落 列表的项目符号与浮动图像重叠 更改列表或列表项的边距没有帮助 边距是从页面左侧开始计算的 但浮动会将列表项推到右侧insi
  • 微软认知服务情感 API。错误:“图像尺寸太小或太大。”

    我注意到认知服务套件中的情感 API 存在一个相当奇怪的错误 只要我发送 URL 一切都会正常工作 发送图像附件时 我收到此 JSON 错误 error code InvalidImageSize message Image size is
  • Sql 查询查找一系列相隔 5 分钟内发生的日期?

    这是 Sql Server 2008 我有一组数据 如下所示 Table UserAchievement id userId achievementId completedDate 当用户获得奖励时 奖励和用户以及日期都会被记录下来 我想要
  • Visual Studio 编译源文件的顺序是什么?

    我在 Visual Studio 2012 中有一个 C 库项目 包含这些文件 A h A cpp defines function Do A B h B cpp defines function Do B C h C cpp define
  • 如何在 CMake 文件中添加链接器或编译标志?

    我正在使用arm linux androideabi g 编译器 当我尝试编译一个简单的 Hello World 时程序编译得很好 当我通过在该代码中添加一个简单的异常处理来测试它时 它也可以工作 添加后 fexceptions 我猜它默认
  • 如何在 onSnapshot 之外从 firestore DB 获取数据

    当我尝试从 firestore 获取值并将其放入变量时 结果未定义 但在控制台中有效 My code this db collection Users doc uid get then docSnapshot gt if docSnapsh
  • bootstrap:从 show.bs.modal 事件中抑制模态

    是否可以告诉 bootstrapNOT显示模式 通过返回false从内部到框架show bs modal event EDIT 使用 stopPropagation 或简单地disable按钮不是我想要的 我想处理逻辑inside show
  • 在插入查询中动态选择列名

    收到错误列名 ColumnNames 无效 在最后一行 插入子句 知道为什么吗 Declare ColumnNames varchar 2000 Declare OrderId int set OrderId 110077 select C
  • Android studio logcat 窗口日志级别过滤器丢失

    我的打印屏幕 我不知道如何解决它 即使我尝试过解决这些问题 类似问题1 类似问题2我的android studio版本是2021 3 1 这就是New Logcat 更新 海豚 如果你想放置级别过滤器那么你只需要写level error l
  • 以编程方式设置 Android IP、DNS、GATEWAY 设置

    如何从 android java 设置 wifi ip 地址 dns 地址 网关 即以编程方式设置 我没有找到任何能够存储这些值的方法 您可以通过编程方式更改系统设置 首先 您需要在 AndroidManifest xml 中请求 WRIT
  • 捕获 iframe 的屏幕截图 - html2canvas 不起作用

    我有以下 iframe 我只是想捕获 iframe 内容的屏幕截图 我已经尝试过 html2canvas 但它似乎不起作用 我尝试过将 iframe 放入 div 中 但没有任何乐趣 我见过使用 php 实现此目的的各种方法 但似乎没有什么
  • 用多字符字符串替换字符

    我正在尝试替换德语和荷兰语变音符号 例如 or 它们应该写成ae代替 所以我不能简单地将一个字符翻译成另一个字符 有没有更优雅的方法来做到这一点 实际上它看起来像这样 尚未完成 SELECT addr REPLACE REPLACE add
  • Android:如何获取文件的创建日期?

    这是我的代码 File TempFiles new File Tempfilepath if TempFiles exists String child TempFiles list for int i 0 i lt child lengt
  • git分支可以用数字列出吗?

    我想知道是否有人构建了一个脚本或有办法列出带有数字的 git 分支 以便代替这个 最好在 bash 中 feature myusername ID 1111 my branch name feature myusername ID 2222
  • django:控制json序列化

    有没有办法在django中控制json序列化 下面的简单代码将返回 json 中的序列化对象 co Collection objects all c serializers serialize json co json 将类似于以下内容 p
  • Git 中的子模块、子树或其他依赖项?

    我有一个较大的项目 其中有很多模块 库及其各自的存储库 这些模块中的大多数是其他模块的依赖项 而不是项目的依赖项 现在已经到了主项目有多个子项目并且许多模块被共享的地步 有些依赖关系的深度超过 3 4 层 我读过可以在项目内部更新 拉取子模