gpt4 book ai didi

git - 如何处理嵌套的 git 存储库?

转载 作者:太空狗 更新时间:2023-10-29 13:40:14 26 4
gpt4 key购买 nike

我有一个新项目,整个项目都在版本控制之下。

项目目录如下所示:

/projectname
--/web
--nodeapp.js
--/mobile
--androidapp

所以目前,.git 在项目的根目录中 /projectname。是否可以将这两个子目录也放入他们自己的仓库中?例如,/web 目录包含一个将通过 Heroku 部署的节点应用程序,而 Heroku 部署使用 git 进行部署,因此我需要该部分作为其自己的 repo,因为显然要部署整个项目(包括 android)到 Heroku 会很愚蠢。

认为我读过子模块可能适合这个用例,但我不太确定那是否正确以及在我的案例中如何使用它们。谢谢!

最佳答案

Is it possible to also put the two subdirectories into their own repo?

是的。这正是子模块的含义。当你这样做时会发生什么,子目录的 git add 将当前 checkout 的提交的 ID 存储在该目录中。

您不需要使用 git submodule 命令。它有一些经常需要做的任务,但它们是显而易见的,而且实际上几乎所有任务都是简单的单行代码——而那些不是的,并不比这难多少。 submodule 命令所做的最有用的事情是将实际存储库从子目录中提升到现有存储库中一个方便的(和任意的)角落,这样您仍然可以不受惩罚地破坏您的工作树。


以下是您如何找到所有当前跟踪的子模块,无论您是否已将它们告知子模块命令:

git ls-files -s|grep ^16            # ls-files -s output: mode id stage path

提交中的所有子模块,无论您是否已将它们告知子模块命令:

git ls-tree -r $id|grep ^16         # ls-tree -r output:  mode type id path

($id 可以是例如 master,或 @ a.k.a. HEAD)

标识子模块的跟踪状态

git rev-parse :path/to/it           # from index i.e. last add/checkout/reset/etc 
git rev-parse $id:path/to/it # from $id, e.g. `master` or `3fac3`

找出当前在子模块中 checkout 的内容:

(cd "$submodule"; git rev-parse HEAD)

检查子模块中的正确提交:

(id=`git rev-parse :"$submodule"` && cd "$submodule" && git checkout $id)

...等等。

那么,子模块命令真正为您做什么?除了上面的提升之外,它唯一添加的是一个方便的地方来记录笔记——例如,在哪里可以找到这些提交的默认位置? git submodule 命令选择了 .gitmodules 作为存储此类内容的好地方。与所有 git 一样,唯一重要的是提交。其他一切,包括 .gitmodules 文件,都只是方便但可有可无的笔记。

关于git - 如何处理嵌套的 git 存储库?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37241996/

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