Git 不使用子模块更新项目,但 git clone 会

问题描述

我的问题


我尝试了解 Git 子模块的工作原理。出于试用目的。 我测试了一个场景:

  • 创建一个带有 plugin1 模块的项目容器 ma​​in
  • push ma​​in 到远程
  • 将 main 克隆到本地 team1 存储库
  • team1plugin1
  • 进行了更改
  • 远程推送每个人

那么:

  • 更新主要
  • 从远程克隆team2

我得到了什么


team2 两个都换了,没问题。

ma​​in 没有变化

我在从 main 中获取时也收到一条错误消息,不明白它是什么

$ git fetch
remote: Enumerating objects: 5,done.
remote: Counting objects: 100% (5/5),done.
remote: Compressing objects: 100% (2/2),done.
remote: Total 3 (delta 0),reused 0 (delta 0),pack-reused 0
Unpacking objects: 100% (3/3),320 bytes | 21.00 KiB/s,done.
From ..\Remotes\main
   e45fe74..c1a1094  master     -> origin/master
Fetching submodule plugin1
fatal: git upload-pack: not our ref e43b6a164b70e69bf31456bf4faabbf7b3f12f26
fatal: remote error: upload-pack: not our ref e43b6a164b70e69bf31456bf4faabbf7b3f12f26
Errors during submodule fetch:
        plugin1

我的问题


为什么ma​​in没有正确更新? 不确定这是一个子模块问题,我对 Git 比较陌生。

其他


这是我运行的批处理脚本:

mkdir demo 
cd demo 

@echo remotes 
@echo --------------------------

mkdir remotes 
cd remotes 

@echo Initialize remotes 
@echo --------------------------
mkdir main 
cd main 
git init --bare 

cd .. 

mkdir plugin1 
cd plugin1 
git init --bare 

cd ../..

@echo Create submodule repository
@echo --------------------------
mkdir plugin1
cd plugin1 
git init 
echo foofoo > lib1.txt 
git add lib1.txt 
git commit -m "first commit plugin1" 

git remote add origin1 ..\Remotes\plugin1 
git push --set-upstream origin1 master

cd .. 

@echo Create main repository
@echo --------------------------
mkdir main 
cd main 
git init 
echo barbarbar > code.txt 
git add code.txt 
git commit -m "first commit main" 

git submodule add ../plugin1 plugin1
git commit -m "Ajout du sous-module plugin1"

git remote add origin  ..\Remotes\main 
git push --set-upstream origin master

cd ..

@echo Team1 get project and modify it
@echo --------------------------

git clone --recursive remotes/main team1

cd team1
cd plugin1

git checkout master

@echo modify plugin1
echo "modify plugin1" > file1.txt 
git add file1.txt 
git commit -m "Commit test 1" 
git push

cd ..
@echo modify main
echo "modif main 1" >> code.txt 
git add *
git commit -m "2nd commit main" 
git push

cd ..

@echo go back to main
@echo --------------------------

cd main
git submodule update --init --recursive

cd ..
@echo Team2 get new project
@echo --------------------------
git clone --recursive remotes/main team2

谢谢

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)