日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

git 子模块在项目中的使用

發布時間:2024/8/23 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 git 子模块在项目中的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在公司的項目中, 經常會遇到一些公共的內容, 多個項目中間通用的, 不可能每次都將整個代碼復制一遍, 遇到這種情況有很多不同的解決方案, 一般來說, 項目是通過 git 來管理的, 巧了, git 也同樣支持子模塊.

創建子模塊

git submodule add git@gitee.com:hujingnb/submodule_son.git submodule_son

指定子項目地址, 后面的參數可以更改子模塊的路徑. 這步操作可給當前項目添加一個子模塊.

克隆新項目

當團隊加入新人時, 需要將原項目 down 下來. 操作如下:

  • git clone xxxx.git?(克隆項目)
  • git submodule init?(子模塊初始化)
  • git submodule update?(更新子模塊)

當然, 最好一條命令就能搞定:

git clone --recursive xxxx.git

子模塊操作

對于子模塊的更新,提交等操作, 進入對應路徑, 正常操作即可.

問題

以上對于子模塊的使用, 網上有各種教程, 在此不再贅述.

而我在使用中遇到的問題是這樣的: 公司的代碼庫分為測試環境與生產環境兩個分支:?dev,?master. 由于git對于子模塊的管理并不是基于分支, 而是基于commit id的. 這對于引用第三方庫是可以理解的, 畢竟需要一個穩定的版本嘛. 但是對于公司這種需要頻繁更新的項目, 就有些混亂了.

舉個例子, 經常會有多個任務并行執行的情況, 如果有些任務后開發, 又需要先行合到生產環境, 可能會提交了較新的commit id上去. 故而并不像分支管理一樣, 直接拉取分支即可. 這又該如何是好呢?

不同分支

對于這個問題, 我想了很久. 要想實現分支的正常管理, 還是應該不同環境對應不同的分支, 但是子模塊只能指定commit id, 不能對應分支. 如此一來, 那就只有一個辦法, 不同分支指定不同的commit id, 這也是我能想到的最清楚,最符合流程的方式了. 也就是說, 子模塊也切為dev,?master兩個分支, 也正常進行合并. 而對于父項目來說, 將子項目切換到不同的分支, 每次提交之后, 將子模塊分支拉取到最新, 然后將commit id提上去, 不就解決了么...

流程如下:

  • 切換子模塊分支:?git submodule foreach git checkout master
  • 將子模塊分支拉取到最新:?git submodule foreach git pull
  • 提交commit id:?git add .; git commit -m ""; git push;
  • 然后將以上操作寫到腳本中, 每次自動化拉取最新代碼即可.

    如此一來, 子模塊的管理就和正常流程一致了, 將不同環境代碼合并到不同分支, 分別拉取對應分支代碼即可.

    此方法是我自己想到的, 是否可行還有待驗證

    子模塊沖突

    既然子模塊是根據commit id進行管理的, 那么當不同的人提交了不同的commit id上來的時候, 就很有可能存在沖突.

    先說一下我是如何制造沖突的:

  • 父項目與子模塊分別拉取分支:?master_tmp
  • 父項目與子模塊切回master分支
  • 子模塊修改文件并提交, 父項目更新commit id
  • 此時父子都回到master_tmp分支, 修改同一行內容,并提交commit id
  • 將父項目master_tmp合并到master分支
  • 此時沖突如下:

    對于沒有接觸過子模塊的我來說, 有如下問題:

  • 這兩個commit id我怎么知道哪個是最新的? 總不能一個一個去找吧
  • submodule_son?連個文件都沒有, 我該怎么解決這個沖突???
  • 如此該如何解決呢? 很明顯, 這個沖突是子項目的沖突, 所以要進入子項目解決. 主要的思想當然還是解決分支之間的沖突.

  • 將子模塊分支切到master:?git checkout master
  • 將子模塊產生沖突的提交新建一個分支:?git branch merge_tmp a8f5f8c
  • 將子項目合并到master:?git merge merge_tmp
  • 解決子項目的沖突
  • 再次回來查看, 沖突解決, 提交即可
  • 子模塊沖突解決完畢后, 再回來查看:

    此時沖突已經解決完成, 提交即可.

    同理, 當你不方便操作master分支的時候, 將master合并到你自己的分支, 然后解決沖突, 是一樣的.

    創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的git 子模块在项目中的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。