git-submodule-python管理子项目

    xiaoxiao2022-07-02  88

    最近有个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/

     

    最新回复(0)