环境:
github
问题描述:
文件夹上传到github分支最后github上面还是没有文件和文件夹,
和这样一样
解决方案:
从 git ls-tree -r HEAD
的输出中可以看到,metahuman-stream
文件夹显示为如下内容:
plaintext
160000 commit 0c63e9a11be04229c5f2d697c21bc4bc88feb944 metahuman-stream
这个显示表明 metahuman-stream
文件夹被 Git 视为一个子模块 (submodule) ,而不是普通的文件夹。这是导致 metahuman-stream
文件夹内容没有出现在 GitHub 的主要原因。
问题原因
metahuman-stream
之所以被标记为 160000 commit
,是因为在某个操作中,您可能运行了以下命令之一,导致 Git 将 metahuman-stream
文件夹初始化为一个子模块:
bash
git submodule add <repository-url> metahuman-stream
或者在其他情况下,metahuman-stream
文件夹被误识别为指向另一个 Git 仓库的子模块。
在这种情况下,Git 只会跟踪 metahuman-stream
子模块的引用 (即另一个仓库的commit ID: 0c63e9a11be04229c5f2d697c21bc4bc88feb944
),而不会跟踪文件夹中的实际文件内容。
解决方案:移除子模块并重新添加文件夹
我们需要将 metahuman-stream
文件夹恢复为普通文件夹并提交所有实际内容。以下是解决问题的步骤:
1. 删除子模块引用
首先,移除 metahuman-stream
子模块的引用。
-
运行以下命令,删除子模块记录:
bashgit rm --cached metahuman-stream
注意 :这个操作只会移除子模块的引用,而不会删除本地的
metahuman-stream/
文件夹内容。 -
删除
.gitmodules
文件中对metahuman-stream
的子模块记录:bashsed -i '/metahuman-stream/d' .gitmodules
-
提交更改:
bashgit add .gitmodules git commit -m "Remove metahuman-stream submodule reference"
2. 恢复 metahuman-stream
为普通文件夹
在移除子模块引用后,重新将 metahuman-stream/
文件夹中的内容添加为普通文件夹。
-
确保
metahuman-stream/
文件夹中的内容仍在本地:bashls -la metahuman-stream/
-
添加文件夹的所有内容到 Git 暂存区:
bashgit add metahuman-stream/
-
提交更改:
bashgit commit -m "Add metahuman-stream as a regular folder"
-
推送更改到远程分支:
bashgit push origin metahuman-stream
3. 验证远程分支的内容
推送成功后,登录到 GitHub 仓库,确认是否能在分支 metahuman-stream
上看到 metahuman-stream
文件夹及其内容。
完整操作命令
以下是完整的操作流程,请严格按照步骤执行:
bash
# 1. 移除子模块引用
git rm --cached metahuman-stream
# 2. 删除 .gitmodules 文件中对 metahuman-stream 的记录
sed -i '/metahuman-stream/d' .gitmodules
# 3. 提交更改
git add .gitmodules
git commit -m "Remove metahuman-stream submodule reference"
# 4. 确保 metahuman-stream 文件夹内容仍然存在
ls -la metahuman-stream/
# 5. 添加文件夹为普通文件夹
git add metahuman-stream/
git commit -m "Add metahuman-stream as a regular folder"
# 6. 推送更改到远程分支
git push origin metahuman-stream
注意事项
-
警告:不要删除本地
metahuman-stream
文件夹内容在移除子模块引用的过程中,Git 只会删除对于子模块的跟踪信息,但不会删除本地目录的实际文件。
-
检查
.gitmodules
文件如果
.gitmodules
文件中仍然存在任何子模块的记录,必须将其清理干净,否则远程分支可能会继续将metahuman-stream
文件夹视为子模块。 -
验证推送结果
推送完成后切换到 GitHub 上的
metahuman-stream
分支,确保metahuman-stream
文件夹显示为普通文件夹,而不是子模块。
总结
通过上述操作,您可以移除 metahuman-stream
文件夹作为子模块的引用,并将其恢复为普通的文件夹内容提交到远程分支。