您是忽略.git文件中的git子模块,还是将其提交给repo?

您是忽略.git文件中的git子模块,还是将其提交给repo?,git,Git,现在,每次运行git status时,我都会在project\u dir/vendor/submodule\u one中将一个子模块添加到我的项目中,我得到修改:vendor/submodule\u one(新提交) 我的问题是什么是最好的解决方法?我是否将供应商/submodule\u one-文件夹添加到我的.gitignore,因为我的主项目不需要知道我的子模块的细节 或者,当我更改并提交对子模块的更改时,我是否也需要在主项目中进行提交 刚刚开始使用子模块,除了设置它们之外,似乎找不到更多

现在,每次运行
git status
时,我都会在
project\u dir/vendor/submodule\u one
中将一个子模块添加到我的项目中,我得到
修改:vendor/submodule\u one(新提交)

我的问题是什么是最好的解决方法?我是否将
供应商/submodule\u one
-文件夹添加到我的
.gitignore
,因为我的主项目不需要知道我的子模块的细节

或者,当我更改并提交对子模块的更改时,我是否也需要在主项目中进行提交


刚刚开始使用子模块,除了设置它们之外,似乎找不到更多信息。

不,您不需要将子模块添加到
。gitignore
:家长将从子模块中看到的是gitlink(a)

这意味着:直接在子模块中进行的任何更改都需要在父目录中进行提交。
这样,父目录将记录子模块状态的正确提交:提交就是上面提到的“gitlink”

您可以在“.”中阅读有关该策略的更多信息。
子模块背后的主要思想是,在特定提交时引用其他回购协议。但是,如果您更改了这些子模块中的任何内容,您也需要更新父repo中的那些引用


请注意,使用Git 2.13(2017年第2季度),在不忽略gitlink的同时,您仍然可以忽略子模块,包括:

git config submodule.<name>.active false
相反,我们希望它在被忽略的文件中显示子模块 第节:

分支主机上的

忽略的文件:
(使用“git add-f…”将提交的内容包括在内)
跟踪/子模块/

由于某种原因,子模块.module name.active对我不起作用

这就是我使用子模块的原因。模块名称。忽略

git config submodule.<your module path>.ignore all
git config子模块..忽略所有
-此处可以找到参数可能值的说明


适用于(新提交)和(修改内容)邮件。

要添加到已接受的答案中,我发现将Git子模块文件夹添加到.gitignore实际上会导致问题,尤其是在尝试创建项目的新克隆时。具体而言,运行正常的子模块克隆命令会导致子模块文件夹为空:

git submodule init
git submodule update
git pull --recurse-submodules
只有尝试重新运行

git submodule add <Git repo> <submodule folder>
git子模块添加
从产出来看,问题很明显:

The following path is ignored by one of your .gitignore files:
<submodule folder>
Use -f if you really want to add it.
以下路径被一个.gitignore文件忽略:
如果您确实想添加它,请使用-f。

我没有添加
-f
,而是从.gitignore中删除了Git子模块文件夹,并重新运行了子模块克隆命令,该命令现在成功地创建了该文件夹。我认为其中一个子模块克隆命令可能存在缺陷。gitignore但没有警告它相应地跳过子模块。

谢谢VonC,这样说很有道理。这个答案令人困惑,因为问题标题是询问是否忽略子模块文件夹,在问题主体后面的一个单独的问题上,你的回答是肯定的。我认为它现在更有意义,并且提供了一些非常有用的深入信息。真棒,谢谢更新:)参数为.gitignore:为什么签入.gitsubmodules文件,其中包含的url可能包含一个用户名为param的用户特定git url?@djangofan问题(和我的答案)是关于忽略子模块文件夹本身(由gitlink表示的文件夹)。不是关于忽略
.gitmodules
文件。的确,这一个文件(
.gitmodules
)可能包含凭据,但如果仅用于克隆公共回购,则不必包含凭据。此外,即使在Windows上,也可以使用诸如“Git credential Manager for Windows”(Git credential Manager for Windows)()之类的凭据帮助程序缓存它们。因此,在
.gitmodules
中拥有凭证不是致命的。
git submodule add <Git repo> <submodule folder>
The following path is ignored by one of your .gitignore files:
<submodule folder>
Use -f if you really want to add it.