gpt4 book ai didi

Git 命令行 - 知道是否在子模块中?

转载 作者:IT王子 更新时间:2023-10-29 01:21:06 25 4
gpt4 key购买 nike

在 git 中有什么方法可以知道你是否在子模块中?你可以在父目录中做 git submodule foreach 这样的想法,但我似乎无法想出一种通用的方法来表明你在一个子模块中,如果你在一个子模块中,或者在子模块内的任何子目录。

我猜你可以用 git rev-parse --show-toplevel 找到 repo root,然后 cd-ing 上一层,再次找到那个 repo 的 root,然后比较当前目录的子模块列表,但这看起来很粘......

最佳答案

(2017 年 4 月更新 Git 2.13,2017 年第 2 季度)

现在有一个官方命令来确定一个 repo 是否是父 repo 的子模块:

cd /path/to/potential/submodule/repo
git rev-parse --show-superproject-working-tree

参见 commit bf0231c (2017 年 3 月 8 日)作者 Stefan Beller (stefanbeller) .
(由 Junio C Hamano -- gitster -- merge 于 commit 3edcc04 ,2017 年 3 月 17 日)

rev-parse: add --show-superproject-working-tree

In some situations it is useful to know if the given repository is a submodule of another repository.

Add the flag --show-superproject-working-tree to git-rev-parse to make it easy to find out if there is a superproject.
When no superproject exists, the output will be empty.

Jethro Yu建议 in the comments :

get super project path regardless inside/outside of submodule:

git rev-parse --show-superproject-working-tree --show-toplevel | head -1

(2014 年更新)如 Quentin Pradet 所述,最近的 Git 子模块存储库显示一个简单的 .git 文件 而不是 .git 文件夹。
.git 文件引用存储在 parent repo .git/modules 子文件夹中的实际子模块 git repo 的路径。


(原始答案:2011 年 9 月)

子模块的本质是作为子模块的 git 仓库不知道它被父仓库用作子模块。

一个卑鄙的把戏是:

  • 更改文件
  • 返回到当前仓库的上一级
  • 尝试“git status --ignore-submodules=none
  • 恢复更改的文件。

如果您在 git status 的结果中看到该文件,则您的 repo 应该是一个子模块。
如果它只是一个嵌套的 repo,git status 应该完全忽略你的嵌套 repo。

关于Git 命令行 - 知道是否在子模块中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7359204/

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