gpt4 book ai didi

git - 无法跟踪 Git 子模块中的文件

转载 作者:IT王子 更新时间:2023-10-29 00:44:00 24 4
gpt4 key购买 nike

问题:./shells/smallApps/* 中的文件添加到 ./.git/ 中的 Git,但我没有./.git/info/exclude 或任何 .gitignore 中的文件。

本题基于this tread问题没有完全解决的地方。

我跑

$git status                                                                                                                                          ~/bin
# On branch master
nothing to commit (working directory clean)
$git ls-files ~/bin
Screen/dev/vim-open.screen
--- cut ---

我注意到我的 Git 中没有文件“shells/smallApps/*”

$ls shells/smallApps/                                                                                                                                ~/bin
devTodo extract
~/bin

我想通过运行将它们添加到我的 Git

$git add shells/smallApps/devTodo shells/smallApps/extract
fatal: Path 'shells/smallApps/devTodo' is in submodule 'shells/smallApps'
$git add .

我注意到由于某些原因这些文件没有添加到我的 Git 中

$git status                                                                                                                                          ~/bin 
# On branch master
nothing to commit (working directory clean)

我在 .git/info/exclude 和 .gitignore -files 中都没有这些文件。

最后一个警告是什么意思?

最佳答案

更新

Git 会忽略文件的一般原因有两个:gitignoresubmodules .

更具体地说,以下情况将导致 Git 在调用“git add”时忽略文件:

  1. 文件匹配模式$GIT_DIR/exclude
  2. 该文件与存储库内 .gitignore 文件中的模式相匹配。
  3. 该文件与用户特定的 .gitignore 文件(由“git config --global core.excludesfile”指定)中的模式相匹配。
  4. 该文件是子模块的一部分。

在忽略的文件上强制“git add”:

您可以通过调用“git add full/path/to/file”来检查特定文件是否被忽略。

手册页指出“如果在命令行上明确指定了一个被忽略的文件,该命令将失败并显示一个被忽略文件的列表。”

如果文件被忽略,您可以使用“git add --force full/path/to/file”强制添加它。

消除子模块引用的说明:

如前一个答案所述,shells/smallApps 是一个 submodule在您的存储库中。

如果文件是子模块的一部分,情况就更复杂了。您不能从主项目中修改子模块的内容。

如果您想消除子模块引用并直接跟踪主仓库中的文件,则必须执行几个步骤。您不能简单地从子模块中删除“.git”目录。您的主存储库和子模块之间存在三个链接:

  1. 主仓库中的 .gitmodules 文件。
  2. 主仓库的 .git/config 中的一个条目。
  3. 与您的主 repo 历史中的子模块相关的任何提交。

根据这个related SO question ,您需要执行以下步骤才能完全删除子模块:

注意:如果另一个分支依赖于这个子模块,那么删除它会破坏你的存储库!这是一个危险的操作...谨慎使用。

  1. .gitmodules 文件中删除相关行。
  2. .git/config 中删除相关部分。
  3. 运行 git rm --cached path_to_submodule(没有尾部斜线)。
  4. promise

作为子模块一部分的文件现在未被跟踪,您可以根据需要决定保留或删除它们(下面提到的一个警告)。

如果您不需要这些文件,您可以简单地删除它们。

警告:如果您想保留这些文件(您似乎想要),您必须从子模块文件夹中手动删除 .git 目录:

  1. cd path_to_submodule
  2. rm.git
  3. cd ..
  4. git add path_to_submodule
  5. git status
  6. git commit

更新:

请求更多信息:

为帮助调试此问题,请发布以下完整命令 session 的输出:

cd to the top-level directory in your repo
ls -al
cat .git/config
find . -name ".git*"
git status
git add editors
git add shells
git status

根据您目前所做的描述,我希望看到:

  • 任何地方都没有 .gitmodules 文件
  • 只有一个 .git 目录(在你的 repo 的根目录下)
  • editors/vim/vimdoclet 中没有.git目录
  • shells/smallApps 中没有.git 目录

关于git - 无法跟踪 Git 子模块中的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1084969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com