首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何检测子模块中父Git存储库的正确GIT_DIR和GIT_WORK_TREE

在Git中,子模块是指一个Git存储库作为另一个Git存储库的子目录存在。子模块允许将一个Git项目作为另一个Git项目的一部分进行管理,这在大型项目中非常有用。

要检测子模块中父Git存储库的正确GIT_DIR和GIT_WORK_TREE,可以按照以下步骤进行:

  1. 确定当前工作目录是否在子模块中。可以使用以下命令检查:git rev-parse --is-inside-work-tree如果返回true,则表示当前工作目录在子模块中。
  2. 如果当前工作目录在子模块中,可以使用以下命令获取父Git存储库的GIT_DIR和GIT_WORK_TREE:git rev-parse --show-toplevel这将返回父Git存储库的根目录路径。
  3. 在父Git存储库的根目录中,可以使用以下命令获取GIT_DIR和GIT_WORK_TREE的值:git rev-parse --git-dir git rev-parse --show-cdup第一个命令将返回GIT_DIR的路径,第二个命令将返回GIT_WORK_TREE相对于当前工作目录的路径。
  4. 如果需要在脚本或其他程序中使用这些值,可以将命令的输出捕获到变量中,例如:GIT_DIR=$(git rev-parse --git-dir) GIT_WORK_TREE=$(git rev-parse --show-cdup)

子模块中父Git存储库的正确GIT_DIR和GIT_WORK_TREE对于在子模块中执行Git命令或操作非常重要。通过上述步骤,可以获取这些值并在需要时使用它们。

请注意,以上答案是基于Git的标准功能和命令,不涉及任何特定的云计算品牌商。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Git 中文参考(三)

/关系仅在--parents可见,但这不会影响在默认模式下选择提交,因此我们显示了行。...E,CB都走了,但只有B是!TREESAME,所以没有出现。 请注意,如果没有改写,就不可能谈论提交之间/关系,因此我们将它们显示为断开连接。...可以为其他分支映射指定多个Push:Pull:行。 $GIT_DIR/branches命名文件 您可以选择在$GIT_DIR/branches中提供文件名。此文件 URL 将用于访问存储。...可以为其他分支映射指定多个Push:Pull:行。 $GIT_DIR/branches命名文件 您可以选择在$GIT_DIR/branches中提供文件名。此文件 URL 将用于访问存储。...可以为其他分支映射指定多个Push:Pull:行。 $GIT_DIR/branches命名文件 您可以选择在$GIT_DIR/branches中提供文件名。此文件 URL 将用于访问存储

16810

10.8 Git 内部原理 - 环境变量

环境变量 Git 总是在一个 bash shell 运行,并借助一些 shell 环境变量来决定它运行方式。 有时候,知道它们是什么以及它们如何Git 按照你想要方式去运行会很有用。...GIT_WORK_TREE 是非空版本工作目录根路径 如果没指定,就使用 $GIT_DIR 目录。...如果你有很多项目有相同内容大文件,这个可以用来避免存储过多备份。 路径规则 所谓 “pathspec” 是指你在 Git 如何指定路径, 包括通配符使用。...这主要在服务器端有用, 如果你想在一个版本存储单个版本多个 fork, 只要保持引用是隔离就可以。 GIT_FLUSH 强制 Git 在向标准输出增量写入时使用没有缓存 I/O。...从底层了解 Git 工作原理有助于更好地理解 Git 在内部是如何运作,也方便你能够针对特定工作流写出自己工具脚本。

1K30

Git 中文参考(一)

GIT_DIR 如果设置了GIT_DIR环境变量,则它指定要使用路径而不是存储基础默认.git。 --git-dir命令行选项也设置此值。...GIT_DISCOVERY_ACROSS_FILESYSTEM 当在没有“.git存储目录目录运行时,Git 会尝试在目录中找到这样目录以查找工作树顶部,但默认情况下它不会跨越文件系统边界...对于文本文件,正确做法是:它校正行结尾符,这样我们在存储只有 LF 行结尾。但对于意外归类为文本二进制文件,转换可能会破坏数据。...如果指定了–git-dir 或 GIT_DIR 但未指定–work-tree,GIT_WORK_TREE core.worktree,则当前工作目录将被视为工作树顶级。...status.renames Git 是否以及如何git-status [1] git-commit [1] 检测重命名。如果设置为“false”,则禁用重命名检测

23220

Git 中文参考(五)

--recurse-submodules 递归搜索已在存储初始化检出每个子模块。当与组合使用时选项所有子模块输出前缀将是项目的名称。宾语。...目前,以下操作是属性感知。 退房登记入住 当 git checkout git merge 等命令运行时,这些属性会影响存储存储内容如何复制到工作树文件。...它们还会影响 Git 如何git add git commit 存储您在存储工作树准备内容。 text 此属性启用并控制行尾标准化。...在 Git 调用钩子之前,它将其工作目录更改为裸存储 GIT_DIR 或非裸存储工作树根。...特定于特定存储但不需要与其他相关存储共享模式(例如,存储存储但特定于一个用户工作流辅助文件)应该进入$GIT_DIR/info/exclude文件。

17210

Git 中文参考(六)

请注意,这可能意味着为单个 SVN 修订创建了多个 Git 提交。 例如:在具有标准中继/标签/分支布局 SVN 存储,在 r.100 创建目录中继/。...任何未处理属性都会记录到$ GIT_DIR / svn / /unhandled.log Git检测到重命名复制目录,因此在提交 SVN 时不会进行跟踪。...组态 git svn 将[svn-remote]配置信息存储存储$ GIT_DIR / config 文件。...160000:gitlink,对象 SHA-1 引用另一个存储提交。 Git 链接只能由 SHA 或提交标记指定。它们用于实现子模块。 040000:一个子目录。...请注意,此句柄正确合并!如果 Darl 在 P1 P2 之间提交了合并,它将被正确传播,并且合并所有节点将成为与 P1,P2 作为其父节点而不是合并提交合并提交。

22210

Git中文命令大全

对象 --bare # 将存储视为裸存储, 如果未设置GIT_DIR环境, 则将其设置为当前工作目录 --git-dir=...# 设置存储路径, 可以通过设置GIT_DIR环境变量来控制, 可以是当前工作目录绝对或相对路径 --work-tree= # 设置工作树路径, 可以通过设置GIT_WORK_TREE...$GIT_DIR或者./.git/, 创建一个包含路径实际存储文本文件存在, 该文件充当文件系统不可知Git存储符号链接 --shared[=(false|true|umask|group...如存储位于本地计算机上, 则自动设置.git/objects/info/alternates为从存储获取对象将已存在存储用作备用存储将需从正在克隆存储复制更少对象, 而降低网络本地存储成本...# 仅显示已更改文件名称状态 --submodule[=] # 指定如何显示子模块差异 --color[

16800

git使用笔记

GIT虽然概念比较难理解,但不得不说他是一款开发利器。 老高总结出了一些GIT很常见操作命令,分享给大家。但由于GIT命令繁多,所以我将分为基础进阶两部分。...裸仓库 查看 git status # 显示工作流状态 git diff # 显示工作目录(Working tree)暂存区域快照(index)之间差异 git diff --stat #...-m "comment" # 将Stage(index)文件提交至本地(commit),并添加注释 git commit -am "comment" # 省略了add步骤,直接提交Working...DirectoryStage(index)内容 git rm # 删除文件 git reset --hard # 恢复最近一次提交过状态,即放弃上次提交后所有本次修改...软件没有添加remote功能,所以如果你要新加入一个远程就需要在terminal中使用以下命令 git remote add origin "path to .git" fatal: No existing

25910

探秘git隐藏文件夹

效能优化文件,文件包含索引并且压缩object,能达到随机访问对象. branchtag变更(统称为 ref)是每个ref在目录下)目录存储一个文件$GIT_DIR/refs 。...尽管许多分支往往会经常更新,但是大多数tag某些分支从未更新。当存储具有成百上千个ref时,这种“每个引用一个文件”格式既浪费存储空间,又损害性能。pack文件夹正是为了解决这个问题而生。...此命令用于通过将ref存储在单个文件来解决存储性能问题 $GIT_DIR/packed-refs。...当传统$GIT_DIR/refs目录层次结构缺少ref时,将在此文件查找该引用并在找到后使用。 分支持续commit总是在$GIT_DIR/refs目录层次结构下创建新文件 。...有过多ref存储做法是将其ref打包--all一次,并偶尔运行git pack-refs。根据定义,tag是固定,并且不会更改。

4.5K311

Git 版本及版本范围表示法

根据不同命令,有时候 revision 参 数代表一个特定提交,有时候代表某一个提交可以追踪到所有的提交(比如 git log)。在 后面的这种情况,一般也可以提供一个版本范围作为参数。...在该例,由于前导串 dae86e 在仓库是唯一,所以可以 使用 dae86e 来代表 dae86e1950b1277e545cee180551750029cfe735。...如果你同时存在 heads/master tags/master,要想代表 master 分支,可以显式指定为: heads/master。...这种用法只能用于引用上面,不能用于一个确切 commit ID, 并且该引用必须在 $GIT_DIR/logs/ 存在有 log 记录。注意,这种用法只会查看你 本地仓库在给定时间点状态。...^ 代表第 n 个提交(例如, \^ \^1 是等同)。\^0 代表 rev 自己。

2K20

Git 中文参考(二)

还创建了引用主分支 HEAD 初始HEAD文件。 如果设置了$GIT_DIR环境变量,则它指定要使用路径而不是./.git作为存储基础。...--separate-git-dir= 不是将存储初始化为$GIT_DIR或./.git/目录,而是在其中创建包含实际存储路径文本文件。...这允许属于同一组用户进入该存储。指定时,将设置配置变量“core.sharedRepository”,以便使用请求权限创建$GIT_DIR文件目录。...请注意,在使用-s克隆存储运行没有-l选项git repack会将源存储对象复制到克隆存储,从而节省clone -s磁盘空间节省。...但是,运行git gc是安全,它默认使用-l选项。 如果要在其源存储中断使用-s克隆存储依赖关系,只需运行git repack -a即可将源存储所有对象复制到克隆存储

14910

Git 中文参考(八)

pattern>] 描述 显示本地存储可用引用以及关联提交 ID。...无论如何,此选项使 git update-index 继续。 --ignore-submodules 不要尝试更新子模块。只有在–refresh 之前传递时才会遵循此选项。...这对仅状态存储很有用。 --cacheinfo--info-only行为类似:索引已更新,但对象数据未更新。当对象在数据但文件在本地不可用时,--cacheinfo很有用。...每个存储,特别是如果您想在所使用所有存储执行此操作,因为您可以在$HOME/.gitconfig中将配置变量设置为true(或false)一次,并使其影响您触摸所有存储。...,特别是如果您想在所使用所有存储执行此操作,因为您可以在$HOME/.gitconfig设置一次配置变量,并使其影响您触摸所有存储

13710

如何在Ubuntu 14.04上使用Git Hooks部署Rails应用程序

介绍 在本教程,我们将向您展示如何使用Git hooks自动将Rails应用程序生产环境部署到远程Ubuntu 14.04服务器。...初始化Git Repo 如果您应用程序由于某种原因尚未存在于Git存储,请初始化它并执行初始提交。 在开发计算机上,切换到应用程序目录。...我们将在主目录创建一个名为“appname_production”git存储。...git init --bare 由于这是一个裸存储,因此没有工作目录,并且传统设置位于.git所有文件都在主目录。...fi done 请务必更新以下突出显示值: GIT_DIR:您之前创建git存储目录 WORK_TREE:您要将应用程序部署到目录(这应该与您在Puma配置中指定位置匹配) APPNAME_DATABASE_USER

2.5K60

Git 中文参考(四)

如果指定了--force,则子模块将被检出(使用git checkout --force),即使包含存储索引中指定提交已经与子模块检出提交匹配。...独立克隆并随后作为子模块或旧设置添加存储在子模块内部具有子模块 git 目录,而不是嵌入到 superprojects git 目录。 默认情况下,此命令是递归。...FILES 初始化子模块时,使用包含存储顶级目录.gitmodules文件来查找每个子模块 URL。该文件格式应与GIT_DIR/config相同。.../关系仅在--parents可见,但这不会影响在默认模式下选择提交,因此我们显示了行。...这样,链接到同一存储多个工作树 rebase 操作不会相互干扰。如果label命令失败,则立即重新安排,并提供有用消息如何继续。 reset命令将 HEAD,索引工作树重置为指定修订版。

17010

Git 曝任意代码执行漏洞,所有使用者都受影响

但是,Git 稍后会发现它不需要复制子模块,因为子模块之前已经提交给存储,它也被写入工作目录,这个子模块已经存在于磁盘上。...子模块存储提交给存储,并且从未实际复制过。 子模块存储可能存在已配置挂钩。 当用户再次出现时,恶意会被精心设计。...将写入工作目录,然后 Git 读取子模块,将这些子模块写入工作目录,最后一步执行子模块存储任何 Post-checkout 挂钩。...为了解决这个问题,Git 客户端现在将更仔细地检查文件夹文件夹名称。 包含现在非法名称,并且它们不能是符号链接,因此这些文件实际上必须存在于 .git ,而不能位于工作目录。...Edward ThomsonMay 提到,Git,VSTS 大多数其他代码托管服务现在拒绝使用这些子模块配置存储来保护尚未更新 Git 客户端。

54010

Git 工具 - 子模块: submodule与subtree使用

也许是第三方,或者你独立开发,用于多个项目的。 所以需要提取一个公共提供给多个项目使用,但是这个library怎么git在一起方便管理呢?...开发过程重叠部分如果开发两套代码会浪费不少的人力。 个人推荐选用Git模块方式进行开发,级仓库依赖两个公共模块,子模块本身级仓库一同进行开发,可避免了版本问题重复开发问题。...subtree与submodule作用是一样,但是subtree出现得比submodule晚,它出现是为了弥补submodule存在问题: submodule不能在版本修改版本代码,...只能在版本修改,是单向; submodule没有直接删除版本功能; subtree则可以实现双向数据修改。...在暂存区所以我们才发现了new commits这种提示语,Git并不关心子模块文件如何变化,我只需要在当前提交记录子模块commithash值即可,之后我们从父级仓库拉取仓库时候,Git拉取了本次提交记录模块

2.3K10

svn迁移至git指南

svn映射关系,然后通过git svn fetch拉取svncommits,我们可以git svn init建立映射后,通过更改$GIT_DIR/config文件svn配置,达到缩小分支范围目的...上传至远端仓库 在将svn克隆至本地git仓库时,你会发现本地并未自动创建svnbranchtags,而svnbranchestags显示在了git远程分支,如下图所示,究其原理,传送门3...平台却难监管,本地提交检测git hook是一个不错选择,它提供了各个不同阶段hook,例如针对commit操作有如下hook(更多请参考git-hook4): ?...而本地hook都被存放本地$GIT_DIR(即.git/hooks),同时也提供了一些例子(shell+perl),当然它也支持pythonruby,接下来以检查是否与tapd关联为例,以一些python...代码片段来描述下如何编写本地hook: 1.在.git/hook目录,将commit-msg.sample重命名为commit-msg,并更改如下内容: ?

1.5K20

有赞零售移动CICD实践

会在 git commit 这个时机,进行本地代码提交检查,发现了 A 同学修改了 RetailStock 模块代码对其进行提醒,并且提供了一个 Code Review URL 链接通过 git...="$project_dir/.git" git_hooks_dir="$git_dir/hooks" commit_msg="$git_hooks_dir/commit-msg" analyzer=...-d $git_dir ]; then echo ".git not exist" exit 1 fi if [ -f $commit_msg ]; then echo "commit-msg...Android 侧首选 Android Lint,其内容涵盖了大部分 Android 检测内容,并且使用 FindBugs 作为 Android Lint 在 Java 语言层上补充。...如上文所述,随着业务越来越复杂,涉及角色越来越多,代码集成管控需要更加严格,而严格代码集成管控将增加团队成员每次提代码痛苦。如何做到差异化检查准入,将是未来持续集成建设方向。

1.3K30

微前端qiankun从搭建到部署实践总结

() || { menu: [], user: {} }; // 将应用数据存储应用,命名空间固定为global if (!...本demo因为是基座应用都集合在一个git仓库上,所以采用了第一种方式,但实际应用时是发布到npm私服,因为后面我们会拆分基座应用为独立仓库,支持独立开发,后文会讲到。...git submodulegit subtree都是很好仓库管理方案,但缺点是每次子应用变更后,聚合还得同步一次变更。...由于qiankun暂时没有封装应用向应用抛出事件api,如iframepostMessage,所以方案一有些难度,不过可以将激活状态放到状态管理应用通过改变vuex值让应用同步就行,...现在觉得比较好做法是:主应用可以下发一些自身用到模块应用可以优先选择主应用下发模块,当发现主应用没有时则自己加载;应用也可以直接使用最新版本而不用应用下发

2.1K11

Git Submodule项目子模块管理

模块化与组件化 最近一直在研究客户端组件化/模块化问题,除了将项目拆分为多个小模块,还会涉及到多个子模块管理问题。下面说一些在模块化开发一些基本知识。...宿主层 宿主层位于最上层, 主要作用是作为一个 App 壳, 将需要模块组装成一个完整 App, 这一层可以管理整个 App 生命周期(比如 Application 初始化各种组件以及三方初始化...,需要注意submodule默认是不在任何分支上,它指向项目存储submodule commit id。...方法二 采用递归参数–recursive,需要注意同样submodule默认是不在任何分支上,它指向项目存储submodule commit id。...例如: git clone project.git project3 --recursive 修改子模块 修改子模块之后只对子模块版本产生影响,对项目的版本不会产生任何影响,如果项目需要用到最新模块代码

81820
领券