如何在现有仓库中创建子模块

时间:2016-02-21 10:07:14

标签: git powershell atlassian-sourcetree

我是git& amp;的初学者我有新项目的以下文件夹结构,所以我做的是我去了visual studio,我做了空项目它有这个文件夹结构:

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

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

每当我尝试时,在powershell中:

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

我收到以下错误:

sub1 already exists in the index

然后删除了sub1 git rm -r sub1,然后我再次重复git submodule add,我收到了这个新错误:

sub1 already exists and is not a valid git repo

那么我做错了什么?

2 个答案:

答案 0 :(得分:9)

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

git submodule add <url>

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

git submodule init
git submodule update

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

git submodule update --remote --merge

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

  

--remote

     

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

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

答案 1 :(得分:7)

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了。
没有涉及子模块。