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

ma1*_*169 7 git powershell atlassian-sourcetree

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

project: (Repo) 
folder1 (sub1)
folder2 (sub2)
Run Code Online (Sandbox Code Playgroud)

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

每当我尝试时,在powershell中:

PS E:\Projects\Project> git submodule add ./sub1
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

sub1 already exists in the index
Run Code Online (Sandbox Code Playgroud)

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

sub1 already exists and is not a valid git repo
Run Code Online (Sandbox Code Playgroud)

那么我做错了什么?

Cod*_*ard 9

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

git submodule add <url>
Run Code Online (Sandbox Code Playgroud)

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

git submodule init
git submodule update
Run Code Online (Sandbox Code Playgroud)

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

git submodule update --remote --merge
Run Code Online (Sandbox Code Playgroud)

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

--remote

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

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


Von*_*onC 8

添加子模块意味着在现有模块中克隆另一个git repo并保持对它的引用.

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

git submodule add -- /url/of/sub1/repo sub1
Run Code Online (Sandbox Code Playgroud)

如果sub1或者sub2不应该是自己的git repos,而是主repo文件夹的简单子文件夹,那么你不需要git submodule add命令.
只需添加文件sub1sub2,您就可以git addgit commit他们一起.
没有涉及子模块.