如何暂存(git 添加)除嵌入式存储库之外的所有更改和新文件?

How to stage (git add) all changes and new files except embedded repositories?

我经常与 sourcetree and when you stage there it does not include the embedded repositories. I don't know how they do it but that's what I would like to achieve via the command line. I read through the documentation of git add here (https://git-scm.com/docs/git-add) 合作,但找不到任何可以做到这一点的东西。我可以使用 bash 脚本来实现它,但我想知道我是否遗漏了一些东西并且有更简单的方法来做到这一点?

顺便说一句,我不想​​使用需要键入嵌入式存储库的确切名称的命令来解决这个问题,因为我有很多这样的清单存储库,并且我正在寻找通用的解决方案。

编辑:以下是自己复制它的方法:通过创建任何 git 存储库并在其中创建另一个 git 存储库。转到父存储库并执行 git add .,你会看到 git 给你以下消息:

++++++++++++++++++++

背景:

我有一个包含其他几个嵌入式存储库的存储库。 我使用清单文件(一个列出每个存储库及其关联的提交和分支的文本文件)管理所有嵌入式存储库,当我想同步它们时,我只需使用 [=33= 根据清单文件检查相关分支和提交] 我写的脚本。我正在构建一个实现多回购管理解决方案的应用程序,该解决方案结合了子模块和 google 的回购功能,并添加了图形用户界面。这就是为什么我故意不在这里使用子模块的原因。

I manage all the embedded repos using a manifest file (a text file listing each repository and its associated commit nd brach) and when I want to sync them I simply checkout the relevant branches and commits based on the manifest file using bash script I have.

你明白你的 bash 脚本实现了子模块,对吧? .gitmodules 是一个文本文件,列出了跟踪的历史、用于获取它们的原始存储库以及您在使用它们时喜欢使用的各种选项,并且 git add 嵌套存储库将其列在 Git 清单又名索引。

如果您执着于自己做事的方式,我建议使用预提交挂钩,从索引中删除所有添加的 git 链接并更新并重新添加您的清单文件,然后如果它进行了任何更改,可能会弹出一条注释。这就像一个五行(就像大多数 git submodule 命令可以实现为五行一样)。

git ls-files -cs | grep ^16

将列出您所有跟踪的历史记录。假设为了简单起见,您将清单文件以该格式键入,更新是一个直的 sort -t$'\t' -usk2,2 | join 管道。