git submodule 添加,更新与删除

git submodule 是一个很好的多项目使用共同类库的工具,它允许类库项目作为repository,子项目做为一个单独的git项目存在父项目中,子项目可以有自己独立的commit、push、pull。而父项目以submodule的形式包含子项目,父项目可以指定子项目header、父项目中的提交信息包含submodule信息,再clone父项目的时候可以把Submodule初始化,使用方法如下:
一、如何在主工程中添加submodule
1、进入到主工程的目录、执行如下命令
在主工程中添加一个submodule的
$ git submodule add https://gitee.com/ddonggua/submoudle.git
Cloning into ‘D:/gitproject/Test/submoudle’…
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
warning: LF will be replaced by CRLF in .gitmodules.
The file will have its original line endings in your working directory.
默认情况下、子模块会将子项目放到一个与仓库同名的目录中
如果这是执行git status,你会注意到几个东西
Your branch is up to date with ‘origin/master’.

Changes to be committed:
(use “git reset HEAD …” to unstage)

new file: .gitmodules
new file: submoudle
.gitmodules该文件中保存了子项目URL和已经拉取的本地目录之间的映射
$ cat .gitmodules
[submodule “submoudle”]
path = submoudle
url = https://gitee.com/ddonggua/submoudle.git
如果有多个文件,该文件有多条记录
2、git add *
3、git commit -m “directions”
4、将本地提交更新到主工程的远程仓库
这样主工程就把对submodule的依赖关系提交到远程仓库了

二、克隆含有子模块的项目
接下来我们我们会clone一个含有子项目的功臣
1、 git clone https://gitee.com/ddonggua/Test2.git
Cloning into ‘Test2’…
remote: Enumerating objects: 85, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 85 (delta 9), reused 0 (delta 0)
Unpacking objects: 100% (85/85), done.
这是进入到Test2目录发现
$ git clone https://gitee.com/ddonggua/Test2.git
Cloning into ‘Test2’…
remote: Enumerating objects: 85, done.
remote: Counting objects: 100% (85/85), done.
remote: Compressing objects: 100% (66/66), done.
remote: Total 85 (delta 9), reused 0 (delta 0)
Unpacking objects: 100% (85/85), done.

wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd
$ cd Test2/

工程Test2包含子项目的submodule目录、但是你会发现submodule是空的
wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd/Test2 (master)
$ cd submoudle

wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd/Test2/submoudle (master)
$ ls

这时必须执行submodule的初始化:git submodule init和git submodule update 则从子项目中抓取所有数据
$ git submodule init
Submodule ‘submoudle’ (https://gitee.com/ddonggua/submoudle.git) registered for path ‘./’
Submodule ‘submoudle2’ (https://gitee.com/ddonggua/submoudle2.git) registered for path ‘../submoudle2’

wangyue@ZZ-RDC-00074A MINGW64 /d/gitproject/ddddd/Test2/submoudle (master)

$ git submodule update

Cloning into ‘D:/gitproject/ddddd/Test2/submoudle’…
Cloning into ‘D:/gitproject/ddddd/Test2/submoudle2’…
Submodule path ‘./’: checked out ‘d49ee61ee18b5fa794dd4f71c3428bf4876921c3’
Submodule path ‘../submoudle2’: checked out ‘20387903799b25efb41d8d3af97a08a8b067051f’
这时就讲submodule的工程更新到本地了
三、subm子仓库更新
主工程依赖的子仓库更新了,主工程如何更新
1、更新主仓库
2、git submodule update –remote
这样会将子仓库的更新拉取下来
如果远程仓库有跟新
$ git status
On branch master
Your branch is up to date with ‘origin/master’.

Changes not staged for commit:
(use “git add …” to update what will be committed)
(use “git checkout – …” to discard changes in working directory)

modified: submoudle (new commits)

no changes added to commit (use “git add” and/or “git commit -a”)

在你的主工程下面会看见如下变更,这时,如果将此变更提交到主仓库的远程服务器
其他的开发人员执行update 之后就会将submoudle的更新拉取到本地
四、删除submoudle
git 并不支持直接删除Submodule需要手动删除对应的文件:
cd mainproject git rm –cached submodule rm -rf submodule 以上将submodule文件删除
删除.gitmodules中对应的submodule的信息,如下红色部分所示
$ cat .gitmodules
[submodule “submoudle”]
path = submoudle
url = https://gitee.com/ddonggua/submoudle.git
[submodule “submoudle2”]
path = submoudle2
url = https://gitee.com/ddonggua/submoudle2.git

更改git的配置文件config: vim .git/config
可以看到Submodule的配置信息:
[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote “origin”]
url = https://gitee.com/ddonggua/Test2.git
fetch = +refs/heads/:refs/remotes/origin/
[branch “master”]
remote = origin
merge = refs/heads/master
[submodule “submoudle”]
active = true
url = https://gitee.com/ddonggua/submoudle.git
[submodule “submoudle2”]
active = true
url = https://gitee.com/ddonggua/submoudle2.git

删除submodule相关的内容[红色部分],
这是还未将submodule的信息清空,任然需要将 modules目录下的submoudle删除
这样就彻底将submodule的信息删除了,然后提交到远程仓库,over

 

本文转载自:https://blog.csdn.net/qq_41163331/article/details/81672836

03-19
### IEEE 802.1Q VLAN Tagging Protocol Standard IEEE 802.1Q 是支持虚拟局域网(VLAN)的标准协议之一,通常被称为 Dot1q。该标准定义了一种用于以太网帧的 VLAN 标记系统以及交换机和桥接器处理这些标记帧的操作流程[^2]。 #### 协议结构概述 IEEE 802.1Q 的核心功能在于通过在以太网数据帧中插入特定字段来实现 VLAN 标签的功能。这种标签使得网络设备能够识别哪些流量属于哪个 VLAN,并据此执行转发决策。具体来说: - **Tag Header**: 在原始以太网帧头部增加了一个额外的 4 字节字段作为 VLAN 标签头。这四个字节包含了以下部分: - **Priority Code Point (PCP)**: 使用 3 比特表示优先级级别,范围从 0 到 7,主要用于 QoS 控制。 - **Canonical Format Indicator (CFI)**: 这是一个单比特位,在传统以太网环境中设置为零。 - **VLAN Identifier (VID)**: 使用 12 比特标识具体的 VLAN ID,理论上可以支持多达 4096 个不同的 VLAN(编号从 0 至 4095),其中某些特殊值保留给内部用途或管理目的。 #### 数据包处理机制 当一个带有 VLAN tag 的数据包进入支持 IEEE 802.1Q 的交换机时,它会依据此标签决定如何路由或者过滤该数据流。如果目标端口不属于同一 VLAN,则不会传输至其他无关联的物理接口上;反之亦然——只有相同 VLAN 成员之间才允许互相通信除非经过路由器跨网段访问[^1]。 此外,为了简化管理和配置过程并增强互操作性,还引入了一些辅助性的子协议和服务组件比如 GARP(通用属性注册协议)。GARP 可帮助分发有关 VLAN 成员资格的信息到各个连接节点以便动态调整其行为模式而无需频繁手动干预[^3]。 以下是创建带 VLAN TAG 的 Python 示例代码片段展示如何模拟构建这样的 Ethernet Frame: ```python from scapy.all import Ether, Dot1Q, IP, sendp def create_vlan_packet(src_mac="00:aa:bb:cc:dd:ee", dst_mac="ff:ff:ff:ff:ff:ff", vlan_id=100, src_ip="192.168.1.1", dst_ip="192.168.1.2"): ether = Ether(src=src_mac, dst=dst_mac) dot1q = Dot1Q(vlan=vlan_id) ip_layer = IP(src=src_ip, dst=dst_ip) packet = ether / dot1q / ip_layer return packet packet = create_vlan_packet() sendp(packet, iface="eth0") # Replace 'eth0' with your network interface name. ``` 上述脚本利用 Scapy 库生成包含指定源地址、目的地址及所属 VLAN 编号的数据报文并通过选定的网卡发送出去测试实际效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值