无法添加包含git clone子目录的目录?

时间:2012-12-28 09:16:24

标签: git clone add

我有一个directoryA,其中包含我通过git clone

创建的子目录

我想为directoryA创建一个git存储库 但是当我做git add -A && git commit -m "w"时,没有任何事情会被提交。

我是否需要特别注意处理git-cloned subdirectories

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

2 个答案:

答案 0 :(得分:0)

通常,git不允许将一个git存储库放在另一个的子目录中。

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

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

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

答案 1 :(得分:0)

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

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

子模块超越了基本的git,有了更多的学习曲线,但一旦被理解就能很好地服务于他们的目的,并与git的其余部分很好地融合。

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

  • 必须在父存储库知道它们之前初始化子模块。
  • 必须特别克隆,更新和提交子模块,尽管有一些命令选项可以自动执行其中的一些。
  • 子模块是完整的存储库,只检出一次提交;因此,他们是无头的,必须先创建一个分支,然后才能提交任何更改。
  • 在更改父存储库之前,应首先检查对子模块的任何更改。子模块的父更新实际上是更新父母知道的哪些子模块提交。

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

  

Git Tools - SubModules

     

Git Submodules: Adding, Using, Removing, Updating

     

Understanding Git Submodules