man*_*els 14 git git-submodules
我想创建一个新的存储库作为我的项目的子模块.
通常,我创建一个Github仓库,然后使用该命令将其添加为子模块
git submodule add url_to_repo.git
有没有办法直接创建一个新的repo作为子模块而不先在其他地方创建repo(既不是本地也不是远程,例如在Github上)?
我不知道你怎么可能:子模块根据定义是来自另一个repo的SHA1(即父repo必须存在另一个repo以提取所述SHA1):你必须在你保留的.gitmodules
文件中引用它的地址.父母回购.
子模块由主存储库中的所谓gitlink树条目组成,该条目引用内部存储库中完全独立的特定提交对象.
submodule.<name>.url
Run Code Online (Sandbox Code Playgroud)
定义可以从中克隆子模块存储库的URL.这可以是准备传递给git-clone(1)的绝对URL,或者(如果它以
./
或开头../
)相对于superproject的原始存储库的位置.
所以你可以在本地创建子模块repo,但无论如何你必须创建它.
如果我理解正确,这就是我经常用于Eclipse项目和工作区的工作。让我们从以下结构开始:
$ find .
.
./projekt.txt
./sub1
./sub1/sub1.txt
./sub2
./sub2/sub2.txt
Run Code Online (Sandbox Code Playgroud)
首先初始化子模块和主模块:
$ 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/
Run Code Online (Sandbox Code Playgroud)
要将这些文件夹添加为子模块而不是常规文件夹,只需执行以下命令,并使用类似的相对路径./sub
而不是sub
$ git submodule add ./sub1
$ git submodule add ./sub2
Run Code Online (Sandbox Code Playgroud)
现在看起来像
$ 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
Run Code Online (Sandbox Code Playgroud)
最后在父文件夹上执行git add *
和git commit -m "init parent"
,然后就可以了!
如果现在更改其中一个子模块中的文件,则必须先提交子模块,然后再提交父存储库,以便在有人克隆您的父存储库时获得子模块的最新版本。
简单!说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
Run Code Online (Sandbox Code Playgroud)
后来(一旦你快乐)
rm -rf submodule_dir_delete_me
Run Code Online (Sandbox Code Playgroud)