git



git submodule:就是多个项目公共部分抽离出来,进行统一管理,只需把公共资源加入到git项目中去即可;、

例如:

准备环境

1、

1.1、mkdir -p submd/repos

1.2、创建本地仓库

1.2.1、git --git-dir=lib1.git init --bare

     git --git-dir=lib1.git init --bare

             git --git-dir=project1.git init --bare 

     git --git-dir=project1.git init --bare 

1.2.2、初始化工作区

            mkdir  -p subd/ws

 1.2.3、初始化项目

            git clone ../repos/projec1.git 

             echo "project1" > project-infos.txt(工作区)

            git add * (把工作区的文件添加索引)

            git commit -a -m "add file"(把工作区移到暂存区)

            git push origin master(把暂存区提交到远程服务器)


            git clone ../repos/projec2.git 

             echo "project2" > project-infos.txt(工作区)

            git add * (把工作区的文件添加索引)

            git commit -a -m "add file"(把工作区移到暂存区)

            git push origin master(把暂存区提交到远程服务器)


1.2.4项目的公共类库

            git clone ../repos/lib1.git 

             echo "lib1" > project-infos.txt(工作区)

            git add * (把工作区的文件添加索引)

            git commit -a -m "add file"(把工作区移到暂存区)

            git push origin master(把暂存区提交到远程服务器)


            git clone ../repos/lib2.git 

             echo "lib2" > project-infos.txt(工作区)

            git add * (把工作区的文件添加索引)

            git commit -a -m "add file"(把工作区移到暂存区)

            git push origin master(把暂存区提交到远程服务器)


1.2.5、为主项目添加公共类库

cd projec1

        git submodule add ../submd/repos/lib1.git libs/lib1

git submodule add ../submd/repos/lib2.git libs/lib2

        git status

         git commit -a -m "add submodules[lib1/lib2] to project1"

         git push


1.2.6、其他人员怎么引入带有子模块的项目呢

cd ../ws

        git clone ../repos/project1.git project1-b

         git status

          git submodules:会有hash码和文件目录,前面的-:含义是子模块没有检出;

        子模块内容为空,此时可以检出子模块 git submodule init && git submodule update(更新commit id号)


1.2.7、修改子模块中的文件信息

        cd libs/lib1

git status 

提示没有分支信息,原因:git对于submodule有特殊处理1,git记录引用的仓库。2,记录主项目中submodule的目录位置。3,记录引用submodule的commint id

在project1中git push之后其实就更新了commint id,然后project-b在clone的时候获取到了commint id,然后当执行git submodule update的时候git就根据git link 获取 submodule的commint id,最后获取submodule文件,所以clone之后不存在任何分支上;但是master的commint id和HEAD保持一致

cat .git/HEAD

cat .git/refs/heads/master

         修改lib1上面的文件需要切换到master上面 git checkout master 

echo "aaa" > project-infos.txt

git commint -a -m "chanage file"

submodule中文件修改提交ok了。但是回到主项目上面project也要提交了update等操作


回到主项目cd ../project1-b

git status

git diff 发现commint id发生了变化(注意如果此时执行git commint update 那么libs/lib1的commint id 又回到原来的commint id,此次submodule修改就没了?不会在切换到master即可)

回到 libs/lib1中把修改的push上去这样submodule 就有了新的commint id

回到主项目中project1-b

git add -u 

git commint -a -m "update libs/lib commint id"

git push


此时已经把修改的子项目主项目都提交到了远程服务器上面。其他人的主项目需要更新下来(是带有submodule的主项目更新)

cd ,,.project1

git pull

git status

git dif(comint id 不一样了,因为上一个人已经修改了libs/lib子项目得commint id),所在在project1中要更新一下子项目得mommint id

git submodule init (把子模块注册到.git/config中去)&& git submodule update

git status



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值