【问题标题】:How to create submodule in existing repo如何在现有仓库中创建子模块
【发布时间】:2016-02-21 10:07:13
【问题描述】:

我是 git 的初学者,我有以下新项目的文件夹结构,所以我做的是我去了 Visual Studio,我做了一个空项目,它有这个文件夹结构:

project: (Repo) 
folder1 (sub1)
folder2 (sub2)

我在本地使用 git。
我使用 sourcetree 为项目创建了一个 repo,
现在我无法添加任何子模块,我不知道为什么。

每当我尝试时在 powershell 中:

PS E:\Projects\Project> git submodule add ./sub1

我收到以下错误:

sub1 already exists in the index

然后我决定使用git rm -r sub1 删除sub1,然后再次添加它,然后当我再次尝试使用git submodule add 再次添加它时,我收到了这个新错误:

sub1 already exists and is not a valid git repo

那么我做错了什么?

【问题讨论】:

  • 我还没有看到它,在我提出这个主题之前,这是我使用 git rm -r 的地方,但是在使用它之后它显示了新的错误,如我的主题中所述
  • 你用过--cached吗?
  • 是的,问题是我应该在将子模块添加为子模块之前创建子模块 git 我认为添加子模块使其成为 git .. 当我创建新项目时它解决了它

标签: git powershell atlassian-sourcetree


【解决方案1】:

您只需要在您的根文件夹中,然后添加子模块文件夹。

git submodule add <url>

现在,当您克隆项目时,您只需初始化并更新子模块

git submodule init
git submodule update

Git 1.8.2 提供了一个新选项 --remote

git submodule update --remote --merge

将从每个子模块的上游获取最新更改,将它们合并,并检查子模块的最新版本。正如 [the docs][1] 所说:

--remote

此选项仅对更新命令有效。不要使用超级项目记录的 SHA-1 来更新子模块,而是使用子模块的远程跟踪分支的状态。

这相当于在每个子模块中运行 git pull。

【讨论】:

  • 我所说的使用 git submodule add 导致我提到的错误谢谢。
  • 您也可以简单地使用git clone --recursive 而不是git submodule initgit submodule update
【解决方案2】:

Adding a submodule 表示在现有的 git repo 中克隆另一个 git repo 并保留对它的引用。

在您的情况下,您没有指定要添加的存储库:

git submodule add -- /url/of/sub1/repo sub1

如果sub1sub2 不应该是它们自己的git repos,而是主repo 文件夹的简单子文件夹,那么你不需要git submodule add 命令。
只需在sub1sub2 中添加文件,您就可以在git addgit commit 中添加文件。
不涉及子模块。

【讨论】:

  • 它们应该是两个不同的 git repos
  • @ma1169 那么我回答的第一部分就成立了。您需要为这些子文件夹提供远程存储库。
  • 你能解释一下这部分/url/if/sub1/repo sub1吗?所以 url 是目录位置.. 什么是 /if/ 不应该是 url/if/repo/sub1 sub1 吗??
  • @ma1169 我的意思是 /of/ 不是 /if/。你需要一个远程 url 来克隆到 sub1。这就是`/url/of/sub1/repo`。例如:https://github.com/&lt;user&gt;/&lt;arepo&gt;
  • @VonC 如果sub1 已经存在?因为我的Docker文件在sub1目录
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-01-01
  • 1970-01-01
  • 2023-01-21
  • 2016-10-04
  • 1970-01-01
  • 2013-04-26
  • 2019-07-07
相关资源
最近更新 更多