0

我有一个directoryA包含我通过创建的子目录git clone

我想为directoryA.
但是当我什么都不做git add -A && git commit -m "w"时。

我需要特别注意处理git-cloned subdirectories吗?

directoryA是我用于我的项目的库集合的特殊目录。

4

2 回答 2

0

一般来说,git不允许有一个 git 存储库位于另一个的子目录中。

此规则的唯一例外是使用git submodules。但是,这还有很多其他你可能不喜欢的含义。例如,父 git 存储库必须跟踪必须签出的特定提交 id 子模块。如果您将新内容提交到子模块 - 在本地或从外部拉取,您还必须更改父仓库状态并再创建一个提交以反映子模块状态。

为了解决这些问题,Android 项目创建了另一种处理这些问题的方法,即他们创建了repo. 虽然repo主要由 Android 项目使用,但它是一种非常通用的机制,可用于任何其他目的。

repo依赖于名为 manifest 的 XML 文件(它存在于自己的小型 git 存储库中)。清单定义了定义整个项目的所有 git 存储库在哪里签出以及在哪些修订和分支。这是一个非常强大的机制。repo 唯一的限制是它不支持 Windows,因为它需要使用符号链接(但 Linux 和 Mac 支持得很好)。

于 2012-12-28T09:25:43.780 回答
0

您正在创建的是未初始化的子模块,是的,子模块需要一些特殊处理才能有效地使用它们。

初始化子模块后,您将能够从父项目提交它所在的子目录。

子模块超越了基本的 git,具有更多的学习曲线,但一旦被理解就可以很好地发挥其作用,并与 git 的其余部分很好地融合。

子模块处理的特殊之处可以概括为几个关键概念:

  • 子模块必须在父存储库知道它们之前被初始化。
  • 必须专门克隆、更新和提交子模块,尽管有一些命令选项可以自动执行其中的一些操作。
  • 子模块是完整的存储库,只需签出一次提交;因此它们是无头的,必须在提交任何更改之前创建一个分支。
  • 在对父存储库进行更改之前,应首先签入对子模块的任何更改。子模块的父更新实际上是更新父知道的子模块中的哪些提交。

当我需要深入研究子模块时,这里有一些对我非常有帮助的链接,这对于跟踪我的项目的各个部分非常有帮助。

Git 工具 - 子模块

Git 子模块:添加、使用、删除、更新

了解 Git 子模块

于 2012-12-28T15:31:21.127 回答