git submodules
2016-02-19 20:27
302 查看
git权威指南: 项目的版本库在某些情况下需要引用其他版本库中的文件,例如公司积累了一套常用的函数库,被多个项目调用,显然这个函数库的代码不能直接放到某个项目的代码当中,而是要独立为一个代码库。那么其他项目要调用公共函数库该如何处理,分别拷贝会造成冗余,显然不是一个好的方法
下面准备两个项目和两个公共类库,project1,project2, lib1, lib2
初始化略过~
为主项目添加submodules
当我们为project1添加公共类库的时候,会发现多出一个.gitmodules文件,查看其内容可知,.gitmodules记录了submodules中的每一个引用信息,了解当前项目的位置以及仓库的所在
可以看出当前的submodule并不在任何的分支上
因为
git对于submodule有特殊的处理方式,在一个主项目中引入了submodule其实git做了三件事情
记录引用的仓库
记录主项目中的Submodules的目录位置
记录引用Submodule的commit id
在project1中push之后其实就是更新了引用的commit-id 然后在project1 在clone的时候获取到了submodule的commit-id 然后当执行git submodule update 的时候git 根据 gitlink 获取submodule的commit-id 最后获取submodule的文件,所以clone之后的并不在任何的分支上。
这时候我们修改lib1的文件需要先切换到master分支
这时候回到project1, 查看status状态会发现在lib1中有一个new commits,用git diff观察会发现commit-id改变
注意:如果现在执行了git submodule update操作那么libs/lib1的commit id又会还原到上一个数值,这样的话刚刚的修改是不是就丢失了呢?不会,因为修改已经提交到了master分支,只要再git checkout master就可以了。
之后提交lib1 git push,这只是完成了第一步
下一步要提交project1 然后push到远程分支
ok 结束
下面准备两个项目和两个公共类库,project1,project2, lib1, lib2
初始化略过~
为主项目添加submodules
> cd project1/ > git submodule add ../lib1.git libs/lib1 > git submodule add ../lib2.git libs/lib2 > ls libs, project-info.html //当前项目(project1)中的文件 > git status new file: .gitmodules new file: libs/lib1 new file: libs/lib2
当我们为project1添加公共类库的时候,会发现多出一个.gitmodules文件,查看其内容可知,.gitmodules记录了submodules中的每一个引用信息,了解当前项目的位置以及仓库的所在
修改submodule
> cd lib1 > git status Not currently on any branch nothing to commit(working directory clean)
可以看出当前的submodule并不在任何的分支上
因为
git对于submodule有特殊的处理方式,在一个主项目中引入了submodule其实git做了三件事情
记录引用的仓库
记录主项目中的Submodules的目录位置
记录引用Submodule的commit id
在project1中push之后其实就是更新了引用的commit-id 然后在project1 在clone的时候获取到了submodule的commit-id 然后当执行git submodule update 的时候git 根据 gitlink 获取submodule的commit-id 最后获取submodule的文件,所以clone之后的并不在任何的分支上。
这时候我们修改lib1的文件需要先切换到master分支
/lib1 > git checkout master Switched to branch 'masterl' > echo 'add by developer B' >> lib1-features > git commit -a -m 'update lib1-features by developer B'
这时候回到project1, 查看status状态会发现在lib1中有一个new commits,用git diff观察会发现commit-id改变
注意:如果现在执行了git submodule update操作那么libs/lib1的commit id又会还原到上一个数值,这样的话刚刚的修改是不是就丢失了呢?不会,因为修改已经提交到了master分支,只要再git checkout master就可以了。
之后提交lib1 git push,这只是完成了第一步
下一步要提交project1 然后push到远程分支
ok 结束
相关文章推荐
- 霍夫变换检测直线--原理和Matlab实现
- android-APP长期运行于后台,重启后如何避免异常
- 字符串的全排列和组合算法
- 两个Fragment之间传递数据之一
- 整理摘抄 宏定义笔记
- PHP需要掌握的一些工具
- 16-02-19 Your content must have a ListView whose id attribute is 'android.R.id.list'
- Netty学习(一)
- HTML DOM appendChild()方法
- Android多线程断点续传下载
- codeforces 630R Game
- 瀑布流 上拉加载更多
- iOS的蓝牙连接、数据接收及发送
- Easyui-datagrid显示时间的格式化代码
- [Immutable + AngularJS] Use Immutable .List() for Angular array
- 高并发Web服务的演变——节约系统内存和CPU
- Android实现模拟登陆正方系统查成绩
- POJ 2774 Long Long Message 题解&代码
- ZOJ 2857 Image Transformation
- Python基础知识总结