最近有个java项目拆分成了几个子模块,主工程为java后端代码,子工程有db脚本和h5代码。这些子模块都比较稳定,一般不存在经常增删模块的情况。
然后经常要本地打包外发给客户部署,不通过自动化打包。
经常遇到子模块拉到游离分支,提交代码的时候老提示子模块new commits的一些情况,用起来常常有坑,比较困扰。
所以特意写了个简单的python脚本来管理这种含gitsubmodule的项目,且对mac 、windows、linux均做了兼容支持。
后续会持续更新该脚本gitP。资源下载地址:https://download.csdn.net/download/ymlxku/11193097
主要解决的问题是:
1、拉取工程代码时,子模块指向modules.json指定的branch或tag,避免拉到游离分支。
2、提交代码时取消子模块提交commit的提示。
3、暂时只写了init和pull,最近又懒又忙加上又忙又懒,后续再加上别的功能push神马的。请耐心等待哈。
gitP使用:
一、先准备好modules.json也就是子模块的配置。
src/webroot/h5为相对主工程的文件夹目录路径,url为该字模块的git地址,branch or tag为字模块具体的分支或tag。
modules.json示例:
{ "submodules": { "db": { "url": "http://***.git", "branch": "master" }, "src/webroot/h5": { "url": "http://***.git", "tag": "tag_master" } } }
二、首次拉代码时
mac下~>./gitP init
windows cmd下~>python gitP init
init先暂存及更新主工程,然后init add子模块,此时子模块还是游离分支。
git update-index --assume-unchanged [file-path] 提交代码时取消子模块提交commit的提示
git update-index --no-assume-unchanged [file-path] 恢复子模块提交commit的提示
以上命令类似于SVN中的ignore。
我觉得git的ignore功能容易让人产生误解,.gitignore文件的作用在于定义在里面的文件不存储在远端仓库,意味着仓库里就没有这些文件,而git update-index --assume-unchanged的作用才是忽略本地文件的提交,用于远端仓库维持一份稳定文件而本地常常要被修改的case上,例如application.properties、数据库等配置文件。
三、首次之后更新代码
mac下~>./gitP pull
windows cmd下~>python gitP pull
pull也是先暂存,然后再去更新主工程和modules.json指定的子模块分支或tag。
最后:遇到一些小问题的记录:网上一般都很容易搜到。
1、git免用户名密码:第一次输入用户名密码后git帮忙存储下来了
git config --global credential.helper store
2、兼容windows时,print中文的问题
如果是python2.7的话:先在顶部加上#coding:utf-8,将print "中文"改成print u"中文"即可正确显示中文
py3.6好像直接加#coding:utf-8就解决了。
3、windows,LookupError: unknown encoding: cp65001
编码格式错误,需要将编码修改为:简体中文
~>chcp 936
git模块管理,有个同事是大牛,在此没有经过本人授权的贴一下他的博客地址:
https://www.hahack.com/work/enterprise-class-git-version-control-1/