我想将一个新仓库创建为我的项目的子模块。
通常,我会先在 Github 上创建一个仓库,然后使用命令 git submodule add url_to_repo.git
将其作为子模块添加。
有没有一种方法可以直接创建一个新的仓库作为子模块,而不需要事先在其他地方创建该仓库(无论是本地还是远程例如 Github)?
我想将一个新仓库创建为我的项目的子模块。
通常,我会先在 Github 上创建一个仓库,然后使用命令 git submodule add url_to_repo.git
将其作为子模块添加。
有没有一种方法可以直接创建一个新的仓库作为子模块,而不需要事先在其他地方创建该仓库(无论是本地还是远程例如 Github)?
submodule_dir
是您希望将其作为子模块化的目录名称(假设它尚未受到git控制)。cd submodule_dir
git init
git add .
git commit
# on github, create the new repo, then:
git remote add origin git@github.com:your_username/your_repo_name.git
git push -u origin master
cd ..
mv submodule_dir submodule_dir_delete_me
git submodule add git@github.com:your_username/your_repo_name.git submodule_dir
rm -rf submodule_dir_delete_me
.gitmodules
文件中的地址。
子模块由主仓库中所谓的gitlink tree entry组成,它指向内部仓库中的特定提交对象,该对象完全独立。
submodule.<name>.url
定义一个URL,用于克隆子模块存储库。它可以是一个绝对URL,可直接传递给git-clone(1),也可以是(如果以
./
或../
开头)相对于超级项目的源存储库的位置。
因此,您可以在本地创建子模块存储库,但无论如何都必须创建它。
git init .; mkdir a; cd a; git init .; cd..; git submodule add ./a a
这样做怎么样?是不是不好的主意? - manuels如果我理解正确,以下是我经常在Eclipse项目和工作空间中所做的事情。让我们从这个结构开始:
$ find .
.
./projekt.txt
./sub1
./sub1/sub1.txt
./sub2
./sub2/sub2.txt
首先初始化子模块和主模块:
$ cd sub1
$ git init
$ git add *
$ git commit -m "init sub1"
$ cd ../sub2
$ git init
$ git add *
$ git commit -m "init sub2"
$ cd ..
$ git init
$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# projekt.txt
# sub1/
# sub2/
./sub
,而不是仅使用sub
。$ git submodule add ./sub1
$ git submodule add ./sub2
$ git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
# (use "git rm --cached <file>..." to unstage)
#
# new file: .gitmodules
# new file: sub1
# new file: sub2
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# projekt.txt
git add *
和 git commit -m "init parent"
,完成了!如果你现在更改了一个子模块中的文件,为了使别人在克隆你的父仓库时得到最新版本的子模块,你必须先提交子模块,再提交父仓库。./sub1/sub2
,那么 git submodule add ./sub1/sub2
会将 sub2
克隆到 .
中,这不是你想要的。为了解决这个问题,请使用 git submodule add ./sub1/sub2 ./sub1/sub2
。第一个路径指定从哪里添加,第二个路径指定添加到哪里。 - nwp
git mv wrong_path correct_path
命令进行修复,git会自动修复子模块管道并移动子模块。(此mv子模块需要> git版本1.8.5) - texdevelopers