Git创建子仓库命令submodule的使用
使用Git submodule步骤:一、先clone 一个父仓库:git clone "ssh://1632@ip:29418/test"cd testgit submodule add <submodule_url>例如:git submodule add ssh://username@ip/[path]/xxx.git根据https://www.cnblogs...
使用Git submodule步骤:
一、先clone 一个父仓库:git clone "ssh://1632@ip:29418/test"
cd test
git submodule add <submodule_url>
例如:git submodule add ssh://username@ip/[path]/xxx.git
根据https://www.cnblogs.com/ibingshan/p/10238469.html中说明,不带username@可以多人使用,会根据系统配置获取用户名。
但我试了不行,但我们一般都没有开通匿名访问或HTTP访问,或者HTTP访问需要输入用户名和密码较麻烦。又不能将username写死,这样没有办法多人各自使用自己账号共用。
那有没有好的办法呢?那就把username使用指令来获取当前系统配置的git用户,这就要求用户取代码前需先配置git 账户。
(1)先使用 git submodule add "ssh://1632@ip:29418/test/test1"
此时会在test 目录下新增一个.gitmodules文件
(2)vi .gitmodules 修改其中1632为 `git config user.name` --之所以不在第一步就替换1632是因为那个时候就会把git config user.name解析为1632,上传前还需要修改,没有意义。其中 ··为TAB上面那个反单引号按键
(3)git add .gitmodules
git commit -m "add submodule"
git push
(2)vi .gitmodules 将url 后的地址改为相对路径,例如:原来是ssh://1632@ip:29418/test/test1,修改为./test1
(3)git add .gitmodules
git commit -m "add submodule"
git push
然后下次取得时候就会自动使用取父仓库的用户名了
感谢:https://stackoverflow.com/questions/7714326/git-submodule-url-not-including-username
二、取一个带有submodule的仓库
git clone "ssh://1632@ip:29418/test"
此时看到有test1目录,但里面是空的
git submodule 可以看到submodule信息前有个减号'-'
git submodule init 第一次不带参数克隆需要初始化
git submodule update 这样就会把submodule的内容clone下来
git submodule foreach git checkout master 注意:update 后的 submodule 会被 checkout 到 head 的 commit id 上,并不会自动checkout 到 master 分支,所以这行是在所有的 submodule 中 checkout master
方式二
git clone ssh://ip/[path]/topRepository.git --recursive 这种方式会在克隆父仓库的同时克隆submodule
cd topRepository 进入父仓库
git submodule 可以看到submodule信息前没有减号'-'
git submodule foreach git checkout master 注意:update 后的 submodule 会被 checkout 到 head 的 commit id 上,并不会自动checkout 到 master 分支,所以这行是在所有的 submodule 中 checkout master
如果 submodule 中还带有 submodule,那么可以是用 --recursive 参数
git submodule 使用的是commitID,不是branch,所以每次需要先将submodule代码checkout到master,再修改提交
另外除了提交submodule内的代码,还需要更新父仓库变化,父仓库也会显示子仓库有改动,父仓库add ,push后并不是将这个目录提交上git,只是更新了关联的submodule 的commitID。这一点比较麻烦
三、删除一个子module
rm .gitmodule 或删除.gitmodule中一个或几个module的信息
git rm --cached submodule_name 例:git rm --cached test1
git add .
git commit -m "test"
git push
参考:https://www.cnblogs.com/ibingshan/p/10238469.html
另外还有git subtree与git submodule 的对比,参考;https://blog.csdn.net/liusf1993/article/details/72765131
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)