目标是提交一个 git 分支。分支的“git status”的输出是:
On branch zeromq_new
Your branch is up to date with 'origin/zeromq'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
(commit or discard the untracked or modified content in submodules)
modified: log4cplus (modified content, untracked content)
modified: ../lib/notification/cppzmq (modified content)
目录结构如下:
HySecureGateway
├──fes
│ └──log4cplus
│ ├──.git
│ ├──.gitattributes
│ ├──.gitignore
│ ├──.gitmodules
│ ├──catch
│ │ ├──.git
│ │ ├──.gitattributes
│ │ ├──.github
│ │ ├──.gitignore
│ │ └──.github
│ │ ├──issue_template.md
│ │ └──pull_request_template.md
│ └──threadpool
│ └──.github
└──lib
└──notification
└──cppzmq
├──.git
└──.gitignore
我在这里阅读了类似问题的答案:
并不能完全理解它。 logc4plus/.gitmodules 还包含以下内容:
[submodule "threadpool"]
path = threadpool
url = https://github.com/log4cplus/ThreadPool.git
[submodule "catch"]
path = catch
url = https://github.com/philsquared/Catch.git
我所做的就是跑步:
git rm -rf --cached myuntrackedfolder
这告诉 git 忘记它(因为它正在被正式跟踪)。
然后我用:
git add myuntrackedfolder
添加它,我就可以开始了。
从子文件夹中删除
.git
。这对我有用。
解决方案包括从带有“已修改内容、未跟踪内容”标签的目录中删除
.git/
,从这些目录中删除归档的 --cached
,然后再次在这些目录上运行 git add
。
逐步解决方案:
.git/
中删除 ../lib/notification/cppzmq
。git rm -rf --cached log4cplus/ && git rm -rf --cached ../lib/notifications/cppzmq
由于某种原因,这些单独的存储库已更改文件。有几种方法可以处理它,具体取决于它们的实际情况。
您可以导航到每个存储库并查看更改了哪些文件。然后您可以提交、创建新分支或删除更改。
如果这些存储库是您想要跟踪但不想弄乱的单独项目,您可以使用以下方法让您的父存储库简单地忽略这些子模块中的更改:
git update-index --assume-unchanged $DIRECTORY
(其中
$DIRECTORY
是您要忽略更改的子模块)。
我也遇到过这样的问题,确实很困扰我。 我通过运行
git submodule update
解决了这个问题。
这里发生的情况是,您位于根文件夹中,并且想要将所有子文件夹推送到 git 存储库。因此会创建一个 git 文件。如果您收到无法跟踪或未跟踪的文件错误,原因是您的子目录中的某些文件还有一个git存储库。您可以通过命令从未跟踪或无法跟踪的文件夹中删除git存储库 ---->rmdir -Force -Recurse .git 此命令将删除 untracebale 或 untracked 目录中的本地 git 存储库,并再次转到根文件夹并键入相同的命令。 重新初始化 git repo 并完成!!!
log4cplus 是您的子模块,已修改且未跟踪内容。
现在您应该能够将子模块的提交更新到主存储库或外部存储库。 请注意,删除子模块中的 .git 文件并不是解决方案。
我遇到了同样的问题,我有这样的文件夹结构,
/project
---> /client
---> /server
客户端文件夹未被跟踪,因为它本身就是一个 git 存储库。 我按照以下步骤解决了问题
1) remove .git file from client folder
2) run the command "git rm -rf --cached client"
3) git add client
4) git push -u origin main
我通过移入不跟踪和运行的子文件夹解决了问题
这些命令: git 添加 . git commit -m“我的提交”
然后返回主文件夹并再次运行这些命令
cd your_submodule
git clean -fdx .
就是这样。无需手动删除任何敏感文件或重新下载任何内容。
我已经关闭了编辑器(Visual Studio)并输入了常用命令:
git add .
git commit -m "Comment text"
git push -u origin master
这对我有用。