码迷,mamicode.com
首页 > 其他好文 > 详细

使用git submodule管理一个需要多个分立开发或者第三方repo的项目

时间:2015-05-29 06:07:33      阅读:227      评论:0      收藏:0      [点我收藏+]

标签:

  在项目开发中,特别是web前端开发中,有非常多的开源第三方library,我们希望引用他们,同时也希望能够方便地保持这些第三方

开源repo的更新。另外一方面如果我们自己在开发一个网站的项目,这个项目一般分为前端和后端两个相对独立的子项目,特别是前端的repo可能在不同的项目中共享,那么这时,你就可能希望将项目分开为前端和后端两个repo,如何管理这种情况呢?一个比较好的方案就是使用git的submodule功能。

  假设我们的父repo在prepo目录,sumodule newtestrepo希望放在prepo/submods/newtestrepo这个目录,首先我们cd submods目录,

  1. 在submods目录下执行:git submodule add https://github.com/cnweibo/newtestrepo.git  这个命令将在prepo目录下创建.gitmodules文件以及在prepo/submods/目录下创建newtestrepo目录用于保存newtestrepo内容。.gitmodules文件包含以下内容:

[submodule "submods/newtestrepo"]                                                               
        path = submods/newtestrepo                                                              
        url = https://github.com/cnweibo/newtestrepo.git  

 注意:在1.8版本git之前,上述命令必须在preop的root目录下执行!

      2.执行git status,则发现有两个变更需要commit

(newcnweibo_branch)*$ git status                                                                
On branch newcnweibo_branch                                                                     
Your branch is up-to-date with origin/newcnweibo_branch.                                      
                                                                                                
Changes to be committed:                                                                        
  (use "git reset HEAD <file>..." to unstage)                                                   
                                                                                                
        new file:   ../.gitmodules                                                              
        new file:   newtestrepo 

3.执行git commit将增加submodule newtestrepo这个commit做一下提交

(newcnweibo_branch)*$  git commit -m "intro newtestrepo submodule"                              
[newcnweibo_branch 2bb87a3] intro newtestrepo submodule                                         
 2 files changed, 4 insertions(+)                                                               
 create mode 100644 .gitmodules                                                                 
 create mode 160000 submods/newtestrepo  

4. git push 将上述修改放到preop的中央库中去以便其他teammember使用

5. 如何在prepo这个项目中修改submodule呢?git checkout master 进入newtestrepo的master branch, 修改文件,commit,随后git push,注意这里的push是将submodule push到中央库中。注意:submodule/newtestrepo目录下不再有.git目录,而只有一个.git文件,这一点很是奇妙!

6. 注意,这时如果我们到prepo的目录中,git status发现我们又有了两个没有commit的commit。

随后我们需要将prepo也做push以便将上述两个commits递交.

之所以在submodule中修改并且push后还要在prepo中push是因为我们的父repo其实是引用了子module的一个snapshot,子module修改后,父repo并没有修改对版本的引用,因此需要commit来反映这个变化。

 

使用git submodule管理一个需要多个分立开发或者第三方repo的项目

标签:

原文地址:http://www.cnblogs.com/kidsitcn/p/4537430.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!