Git:将repo创建为子模块

umuewwlo  于 2023-05-12  发布在  Git
关注(0)|答案(3)|浏览(113)

我想创建一个新的仓库作为我的项目的子模块。
通常,我创建一个Github仓库,然后使用命令git submodule add url_to_repo.git将其添加为子模块
有没有一种方法可以直接创建一个新的repo作为子模块,而不需要先在其他地方创建repo(既不是本地也不是远程,例如在Github上)?

qzwqbdag

qzwqbdag1#

简单!假设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
nszi6y05

nszi6y052#

我不明白你怎么能:根据定义,子模块是来自另一个存储库的SHA1(即,必须存在另一个存储库以使父存储库提取所述SHA1):你必须在父存储库中保存的.gitmodules file中引用它的地址。
子模块由主存储库中所谓的gitlink树条目组成,该条目引用内部存储库中完全独立的特定提交对象。

submodule.<name>.url

定义可以从中克隆子模块存储库的URL。这可能是一个准备传递给git-clone(1)的绝对URL,或者(如果它以./../开头)一个相对于超级项目原始仓库的位置。
因此,您可以在本地创建子模块repo,但无论如何都必须创建它。

ar7v8xwq

ar7v8xwq3#

如果我理解正确的话,这就是我经常为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",然后就可以了!
如果你现在更改了一个子模块中的文件,你必须先提交子模块,然后再提交父仓库,以便在有人克隆你的父仓库时获得子模块的最新版本。

相关问题