协同开发利器——Git Submodule

别再手动复制代码了!用Git Submodule优雅管理多项目依赖(保姆级教程) 本文详细介绍了如何使用Git Submodule优雅管理多项目依赖,解决代码复用中的版本混乱问题。通过保姆级教程,从基础操作到高级技巧,帮助开发者掌握子模块的添加、更新和团队协作规范,提升项目管理效率。 阅读详情

Git

对于我们开发人员来说,Git的操作真的是再熟悉不过了,但是,我们真的利用好了Git了吗?或者,Git还给我提供了哪些更好功能,更丰富的功能帮助我们更好的管理代码,更好的完成项目的构建?

今天,我就来介绍一个对于团队十分有帮助的Git的功能——Git Submodule。

Git Submodule

Submodule,直译过来就是子模块的意思,顾名思义就是控制子模块的意思。

其实在蒋鑫的《Git权威指南》当中,有比较详细的介绍:项目的版本库在某些情况虾需要引用其他版本库中的文件,例如公司积累了一套常用的函数库,被多个项目调用,显然这个函数库的代码不能直接放到某个项目的代码中,而是要独立为一个代码库,那么其他项目要调用公共函数库该如何处理呢?分别把公共函数库的文件拷贝到各自的项目中会造成冗余,丢弃了公共函数库的维护历史,这显然不是好的方法。

简单来说每个公司,随着业务的发展或者针对许多项目我们开发和抽取出一套甚至公用的代码库,可以被多个项目效用,而这个代码库不是放在一个项目当中,而且我们单独作为一个代码库来使用,同时定期维护这套公共的代码库。

但是对于其他的业务代码来说,他们该如何调用公用的代码库呢?难道是要一遍一遍的拷贝吗?这样不仅仅是操作麻烦,而且还丢弃了公共代码库的维护历史,甚至后期维护公共代码库的时候维护起来也十分的不便。其实Git早就帮我们解决了这一个问题,就是通过git submodule来解决!

Git submodule用例

首先我们需要两个版本库

从名称,我们就做了区分,一个是公共的版本库

https://github.com/yang0range/SubModuleDemoLib.git

另一个是引用公共版本库的主版本库

https://github.com/yang0range/SubModuleDemoMain.git

有了这两个版本库,我们就该介绍如何把两个版本库关联起来了

Git submodule的操作了

这里我们先介绍Git命令的使用,接下来,我会介绍TortoiseGit的使用。

添加、提交过程
1.首先Clone主项目

2.接下来Clone Lib项目

可以看到,我们这两个项目都Clone成功了

3.接下来为主项目添加Submodule

用的命令是

git submodule add <repository> <path> //添加子模块

执行命令

 git submodule add https://github.com/yang0range/SubModuleDemoLib.git SubModuleDemoLib

4.查看状态

接下来,我们执行命令

cat .gitmodules

可以看到submodule添加成功了

同时我们可以看到目录下多了一个**.gitmodules**的文件

5.提交仓库

执行git cmmit命令
添加成功之后,再执行

git push指令

关于这两个我们最常用的指令,就不多介绍了。

之后我们查看git log就可以看到我们的提交记录了

以上就是完整的添加过程。

Clone流程

对于一个新成员来说,如果clone新代码也是尤为重要。
git为我们提供了两种克隆带有子模块版本库的方法

方法一

首先clone父项目,再初始化submodule,最后更新submodule。初始化只需要做一次,之后每次update就可以了。

git clone <main>
cd <main>
git submodule init
git submodule update

这种方法,较为繁琐Git又为我们提供了另外一个方法

git clone main --recursive

这里采用的是递归参数–recursive

修改子模块

对于子模块和主模块来说,两个库两个版本都是相对独立的,也就说对主模块来说,提交修改子模块不会对主模块造成任何影响。
修改和更新的时候也都是我们常用的指令

git add
git commit 
git datus
git push
...
更新子模块

对于子模块的更新,Clone有两种方法,自然更新也有两种方法

方法一

先pull主模块,然后更新submodule

cd <main>
git pull
git submodule update
方法二

进入子模块,然后切换到对应的分支,然后对子模块独立的pull

cd <submodule>
git checkout master
cd..
git submodule foreach git pull
删除子模块

对于子模块来说,我们也会遇到移除,删除的操作

git rm <submodule> 
git status
git commit -m "remove submodule"
git push origin master

TortoiseGit的Git submodule的使用

TortoiseGit的好处自然不必多说了。那么TortoiseGit如何操作带有submodule的项目呢?

添加过程

TortoiseGit已经为我们考虑了添加子模块的功能。

Clone过程

首先,我们Clone出主模块

Clone之后,我们发现,只是把子模块的目录Clone下来了,并没有内容!

别着急,通过Submodule Update就可以了

是不是很简单?

提交、更新过程

之前我也说过,对于主模块和子模块来说,两个是相对独立了,所以在执行命令的时候,单独对主模块,和子模块分别操作就可以了。

这些就是TortoiseGit的基本操作,随便网上一搜就能找到了。

参考

https://blog.youkuaiyun.com/zahuopuboss/article/details/51472842
https://blog.youkuaiyun.com/wkyseo/article/details/81589477
https://blog.youkuaiyun.com/xuanwolanxue/article/details/80609986

最后

相信,通过这篇文章,大家对于Git Submodule的使用有了一个全面的了解。

如果大家有任何疑问和问题欢迎关注我的公众号,或者给我留言!

动动小手指点赞,收藏,关注一键三连走一波吧!

欢迎关注公共号

关注公众号会有更多收获!

个人微信

我们一起讨论,进步,提高!

PX4开发环境搭建:如何用国内镜像加速git submodule更新(附完整路径清单) 本文详细介绍了如何为PX4飞控开发环境搭建加速,核心解决git submodule update --init --recursive命令因网络问题导致的超时与失败。通过系统性地修改.gitmodules文件,将GitHub仓库地址替换为国内镜像源(如github.com.cnpmjs.org),并提供完整路径清单与批量替换脚本,可将子模块更新过程从数小时缩短至几分钟,显著提升国内开发者的环境配置效率。 阅读详情

相关推荐

Obsidian + Git:用版本控制实现可追溯的知识协同

版本控制是软件开发中保障代码演进可审计、可回滚、可协作的核心机制;其原理在于记录每次变更的完整上下文,而非简单覆盖文件。将这一思想迁移到知识管理领域,能从根本上解决多端编辑冲突、协作丢失、历史不可查等痛点。Git 提供的分支管理、提交日志、差异比对与克隆能力,天然适配 Obsidian 纯文本笔记架构,使知识库具备工业级可靠性。典型应用场景包括跨设备同步、团队知识共建、模板与插件的版本化分发,以及基于 Git Hook 的自动化发布。当 `git clone` 成为知识获取起点,`fatal: not a

weixin_34337381的博客 604

别再手动复制代码了!用Git Submodule优雅管理多项目依赖(附完整命令清单)

本文详细介绍了Git Submodule如何优雅管理多项目依赖,解决传统代码复制带来的版本混乱和同步难题。通过完整的命令清单和实战示例,帮助开发者掌握子模块的添加、更新及团队协作技巧,提升项目管理效率。特别适合需要跨项目共享代码库的开发团队。

weixin_30521161的博客 330

Git子模块(Submodule)详解:前端项目管理的高效实践

Git子模块允许你将一个Git仓库作为另一个Git仓库的子目录。它能让你保持父子项目的独立版本控制,同时建立明确的依赖关系。Git子模块为前端项目的模块化管理提供了灵活方案,特别适合以下场景:✅ 需要严格控制依赖版本✅ 跨项目共享私有组件库✅ 维护多项目间的关联关系建议搭配可视化工具(如SourceTree、GitKraken)使用,可以更直观地管理子模块状态。

梦想成为公务员 2107

git submodule 升级commit并push

git submodule 升级commit并push 关于这个问题,起始可以参照以下文章: https://blog.youkuaiyun.com/wwj_748/article/details/73991862 流程写的很清楚,本文章记录一点,即在submodule的git push操作。 文章中是以master操作为例,可以直接git push,但很多场景是分支操作。这个时候,操作如下: submodule必须依赖一个分支,如果master不能直接修改,那就在submodule对应的代码库新建一个分支,用于提交

文战武谏的博客 4452

Git子模块(submodule)管理避坑指南:从克隆失败到同步成功的完整配置流程

本文深入解析Git子模块(submodule)的管理机制,提供从克隆失败到同步成功的完整解决方案。涵盖子模块指针系统原理、递归克隆(recursive)的故障排查矩阵、镜像源配置技巧,以及企业级项目中的最佳实践,帮助开发者高效管理复杂项目依赖关系。

weixin_42619742的博客 233

隐藏技巧!用ArcGIS Pro像素编辑器实现PS级影像编辑(附地貌伪装案例)

本文深入探讨ArcGIS Pro像素编辑器的创意应用,从基础操作到高级影像处理实战,展示了其在城市规划、环境分析等领域的独特价值。通过详细的功能解析和地貌伪装等案例,帮助用户实现媲美专业图像处理软件的精细操作,提升GIS工作效率。

weixin_28520495的博客 335

git submodule使用方法

1. submodule简介 submodule是一种git特性,用以将一部分公共代码从主项目中抽离出来成为一个独立的git工程,并以submodule的形式被主项目使用,submodule和主项目(或者叫主模块)充分解耦,这样做的好处是作为submodule的公共代码可以被多个主项目工程使用,减少了开发量和版本控制负担。同时,submodule作为独立的git工程,也使得权限管理、版本迭代更加灵...

蚂蚁搬家 6262

Unity URP管线下的Highlight Plus插件,从导入到实现物体高亮的保姆级避坑指南

本文详细解析了在Unity URP管线中使用Highlight Plus插件实现物体高亮的完整流程与常见问题解决方案。从URP环境配置、插件导入避坑到相机设置优化,提供了一套完整的保姆级指南,帮助开发者高效解决高亮效果不显示等典型问题,并包含移动端性能优化与复杂场景管理的高级技巧。

weixin_27379781的博客 408

git submodule 使用教程

(1)项目很大参与开发人员多的时候,需要将各个模块文件进行抽离单独管理。(2)使用git submodule来对项目文件做成模块抽离,抽离出来的文件可单独成为一个git仓库。整个主项目对抽离出来的子项目(子模块)有依赖关系,却又并不关心子项目(子模块)的内部开发流程细节;(3)代码如果全员可见,可以做成分支进行管理;如果代码不可见,可以创建为子仓库(独立一个git 仓库);子仓库管理模块代码,主仓库定时更新(4)简单理解:项目工程为一个仓库;模块为一个仓库;

卓学课堂 5839

什么是PON(无源光纤网络)、PON的发展及演进

全球知名媒体Omdia在光纤和铜缆接入设备预测报告中对2022年2月的预测显示,PON设备端口收入预计在2020年至2027年期间以12.3%的年复合增长率增长,到2027年将达到163亿美元,远高于2020年的82亿美元。 此前,Omdia有份报告称,在3月份举行的美国OFC展会中,众多 CSP 正在顺利部署 XGS PON(10G 对称),其他 CSP 专注于基于 GPON 的低速 FTTH 服务。另外关于25G PON 和 50G PON 之间的争论仍在继续,而Omdia 认为 25G PON 和 5

4929

【open judge】【程设】魔兽世界三开战!

#程设 魔兽世界三---开战!--------原以为会很容易ac,没想到写了好久,看来自己的水平还是亟待提高啊!有几个比较有趣的点:1. typeid(#include&lt;typeinfo&gt;)还是比较好用的,特别是本题当战士为wolf,iceman, dragon, ninja时有特殊技能,那么用typeid判断一下就很方便了。2. 对于这种输出很复杂的问题,往往通过使用文件的输入输出再...

weixin_40841416的博客 6073

【Git】Git submodule常用指令

文章出自个人博客 https://knightyun.github.io/2021/03/21/git-submodule,总结的很详细,本文只做学习记录,方便自己查阅~

All_In_gzx_cc的博客 7810

手把手教你用Cadence VPWLF源和参数扫描:搞定非周期激励与gmid曲线绘制(避坑指南)

本文详细介绍了如何在Cadence Virtuoso中使用VPWLF源生成复杂非周期激励信号,并结合gmid方法进行双参数扫描优化电路设计。通过实战案例和避坑指南,帮助工程师高效解决波形生成和参数可视化难题,提升模拟电路设计效率。

weixin_29260291的博客 424

带submodule的git仓库自动化一键git push、git pull脚本

不知道大家在使用git的时候有没有遇到过这样的问题:发现git submodule特别好用,适合用于满足同时开发和部署的需求,并且结构清晰,方便我们对整个代码层次有一个大概的了解。但是很烦人的一点就是每次做完开发都要一个一个进入仓库提交更改,很浪费时间,也浪费力气。于是哥们奋发图强,为了一劳永逸,终于是憋了两坨大的出来,大家只要把下面的两个脚本放在顶层的仓库目录下就可以开开心心地使用了。然后是自动push脚本:(这个没问题,只要你submodule配置好了随便用)欢迎大佬提出指正意见!

JellyfishKnight的博客 1461

工业级向量检索核心技术:IVF-PQ原理与全流程解析

在大规模高维向量检索场景中,IVF-PQ(倒排索引结合乘积量化)凭借“粗筛范围+细算距离”的双重加速策略,成为核心解决方案。本文将深入解析其原理与全流程,助力开发者掌握这一关键技术。

进一步有进一步的欢喜~ 1197

使用 syncstart 实现同场景下多个音视频音轨自动化同步

如果需要在视频编辑中同步多个机位的音轨,使得相同的视频能够同时播放,手动操作可能会变得相当复杂。特别是当处理多个视频文件时,例如有10个视频需要互相匹配,实现一对多的同步关系,这就涉及到为每对视频生成匹配的音轨数据。手动完成这样的任务,如生成90套对应的音轨数据,不仅耗时而且容易出错。因此,使用脚本自动化这一过程是一个更为高效和准确的解决方案。通过编写脚本,您可以批量处理多个视频文件,自动同步它们的音轨,大大简化了音视频编辑的工作流程,并确保了同步的准确性。

Mr数据杨 1076

Git Submodule 实战:基于 Nginx 二次开发的高效协作方案

Submodule 允许你将一个外部的 Git 仓库(如 Nginx 主线源码)嵌入到你自己的项目仓库中。嵌入的仓库在父仓库中只是一个链接(一个特殊的 Git 对象),记录了它当前指向的特定提交(commit)。在# 创建自定义模块目录 mkdir -p my_modules/ngx_http_hello_module # 创建模块源码文件 cat > my_modules/ngx_http_hello_module/ngx_http_hello_module.c << 'EOF'EOF。

拥抱开源 1035

从 VS Code 创建 ABAP Development Objects,包、命名、传输请求和 Clean Core 的一条线打通

文章摘要: SAP ABAP开发工具正从传统SAP GUI/Eclipse向VS Code迁移,通过ABAP Development Tools扩展实现代码编辑、调试和传输管理。文章重点分析了创建ABAP对象背后的治理逻辑:1)对象创建涉及包结构、命名规范、传输层等关键设计决策;2)VS Code通过命令面板(Ctrl+Shift+P)提供统一创建入口;3)对象类型选择反映架构意图,应从业务模型角度规划;4)Package是重要的治理边界,需按业务能力分区;5)命名和描述需体现业务语义;6)传输请求标记对象

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 173

Git Submodule深度避坑指南

Git Submodule作为多仓库依赖管理的经典方案,在大型项目协作中既是利器也是陷阱。本文基于2026年最新实践,系统梳理Submodule使用中的高频痛点,提供从基础配置到高级优化的完整解决方案。通过本文,你将掌握如何避免Detached HEAD、版本漂移、CI失败等典型问题,实现高效稳定的多仓库协作。

独坐一隅,凝神遐想,是种幸福! —— 独隅 721

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Android Studio项目依赖子模块?一份完整的Git Submodule配置与同步指南

本文详细介绍了在Android Studio项目中如何使用Git Submodule管理子模块依赖,包括基础概念、配置流程、日常开发工作流及高级技巧。通过完整的Git Submodule配置与同步指南,帮助开发者高效管理多模块项目,解决常见的子模块初始化与同步问题,提升团队协作效率。

weixin_30723433的博客 188

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

探索与实践:Git Submodule 的全面理解和应用

在使用过程中,应确保团队成员对其有充分的理解,并建立一套有效的子模块管理规范,以降低潜在的协作风险。:当项目依赖于一个独立版本控制的库或组件时,通过子模块将库纳入项目中,既能保证库的版本管理,又能方便地在项目间共享。仓库中仅存储子模块的引用信息(包括仓库地址和对应的提交哈希),而子模块的实际源代码则存储在其各自的。:对于模块化、分层架构的项目,可以通过子模块管理各层之间的依赖关系,便于不同团队分工协作。文件中配置子模块指向的具体分支或提交哈希,以便控制项目中使用的子模块版本。从主项目中移除子模块的引用。

梁三石FE 1034

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Manul完整命令指南:从安装到高级操作的7个核心功能

Manul是一款专为Golang程序设计的依赖管理工具,它利用git submodule技术实现高效的依赖 vendoring。本文将详细介绍Manul的7个核心功能,帮助你从入门到精通这款强大的工具。 ## 1. 快速安装依赖:`manul -I`的终极用法 `manul -I`命令是安装依赖的核心功能,它能自动检测项目依赖并通过git submodule添加到vendor目录。当不指定具体

gitblog_00073的博客 719

Git高级操作指南

git reset`的灵活使用(如`--soft`、`--mixed`、`--hard`参数)能精准控制回退范围,而`git restore`则提供了更直观的文件状态恢复方式,避免误操作。除了常见的`git checkout`和`git merge`,`git rebase`可以优化提交历史,避免冗余合并节点。通过`.gitconfig`文件,可以定义别名(如`git lg`替代复杂日志命令),或配置差异对比工具(如`difftool`)。**高效分支管理策略****定制化Git配置**

ckkzhq_648的博客 276
上一篇: RecyclerView介绍(五)----实现点击效果以及动画
下一篇: Flutter系列(一)——详细介绍
yang0range
博客等级 码龄12年 15粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值