git submodules
来源:互联网 发布:javascript闭包是什么 编辑:程序博客网 时间:2024/05/23 13:47
git权威指南: 项目的版本库在某些情况下需要引用其他版本库中的文件,例如公司积累了一套常用的函数库,被多个项目调用,显然这个函数库的代码不能直接放到某个项目的代码当中,而是要独立为一个代码库。那么其他项目要调用公共函数库该如何处理,分别拷贝会造成冗余,显然不是一个好的方法
下面准备两个项目和两个公共类库,project1,project2, lib1, lib2
初始化略过~
为主项目添加submodules
> cd project1/> git submodule add ../lib1.git libs/lib1> git submodule add ../lib2.git libs/lib2> lslibs, project-info.html //当前项目(project1)中的文件> git statusnew file: .gitmodulesnew file: libs/lib1new file: libs/lib2
当我们为project1添加公共类库的时候,会发现多出一个.gitmodules文件,查看其内容可知,.gitmodules记录了submodules中的每一个引用信息,了解当前项目的位置以及仓库的所在
修改submodule
> cd lib1> git statusNot currently on any branchnothing 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 masterSwitched 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 结束
- git submodules
- Git Submodules vs Git Subtrees
- Submodules
- clone ceph的submodules
- git
- git
- Git
- Git
- Git
- Git
- git
- git
- Git
- GIT
- git
- GIT
- Git
- git
- Android实现模拟登陆正方系统查成绩
- Session
- 16-02-19 Your content must have a ListView whose id attribute is 'android.R.id.list'
- [maya学习笔记(6)] 成组与解组 坐标轴 捕捉命令
- 瀑布流 上拉加载更多
- git submodules
- HTML DOM appendChild()方法
- 【lighting】Color and Vision
- iOS-证书配置
- 两个Fragment之间传递数据之一
- 字符串的全排列和组合算法
- android-APP长期运行于后台,重启后如何避免异常
- ActiveMQ平台搭建 python推送接收
- 使用apt-get下载oracle-java-8代码