成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

使用Git Submodule可能遇到的坑

移動開發(fā) Android
隨著近幾年的發(fā)展,Git已經(jīng)成為開源界的標(biāo)準(zhǔn)的版本控制工具。開源界的重量級項目,如Linux, Android, Eclipse, Gnome, KDE, Qt, ROR, Debian,無一例外的都是使用git來進行版本控制。在使用的過程中,作者發(fā)現(xiàn)了一些問題,在此分享給大家。

 

[[72462]]

前言

  對于一些比較大的工程,為了便于復(fù)用,常常需要抽取子項目。例如我開發(fā)的猿題庫客戶端現(xiàn)在包括3門考試,客戶端涉及的公共UI、公共底層邏輯、公共的第三方庫、以及公共的答題卡掃描算法就被我分別抽取成了子項目。這些子項目都以git submodule的形式,增加到工程中。

在使用了git submodule一段時間后,我發(fā)現(xiàn)了一些submodule的問題,在此分享給大家。
更新submodule的坑

  submodule項目和它的父項目本質(zhì)上是2個獨立的git倉庫。只是父項目存儲了它依賴的submodule項目的版本號信息而已。如果你的同事更新了submodule,然后更新了父項目中依賴的版本號。你需要在git pull之后,調(diào)用 git submodule update來更新submodule信息。

 

  這兒的坑在于,如果你git pull之后,忘記了調(diào)用 git submodule update,那么你極有可能再次把舊的submodule依賴信息提交上去。對于那些習(xí)慣使用 git commit -a的人來說,這種危險會更大一些。所以建議大家:
1.git pull之后,立即執(zhí)行g(shù)it status, 如果發(fā)現(xiàn)submodule有修改,立即執(zhí)行g(shù)it submodule update
2.盡量不要使用 git commit -a, git add命令存在的意義就是讓你對加入暫存區(qū)的文件做二次確認(rèn),而 git commit -a相當(dāng)于跳過了這個確認(rèn)過程。

 

  更復(fù)雜一些,如果你的submodule又依賴了submodule,那么很可能你需要在git pull 和 git submodule update之后,再分別到每個submodule中再執(zhí)行一次git submodule update,這里可以使用 git submodule foreach命令來實現(xiàn): git submodule foreach git submodule update

 

修改submodule的坑

  有些時候你需要對submodule做一些修改,很常見的做法就是切到submodule的目錄,然后做修改,然后commit和push。

 

  這里的坑在于,默認(rèn)git submodule update并不會將submodule切到任何branch,所以,默認(rèn)下submodule的HEAD是處于游離狀態(tài)的(‘detached HEAD’ state)。所以在修改前,記得一定要用git checkout master將當(dāng)前的submodule分支切換到master,然后才能做修改和提交。

 

  如果你不慎忘記切換到master分支,又做了提交,可以用cherry-pick命令挽救。具體做法如下:
1.用 git checkout master 將HEAD從游離狀態(tài)切換到 master 分支, 這時候,git會報Warning說有一個提交沒有在branch上,記住這個提交的change-id(假如change-id為 aaaa)
2.用 git cherry-pick aaaa 來將剛剛的提交作用在master分支上
3.用 git push 將更新提交到遠(yuǎn)程版本庫中

 

  以下是相關(guān)命令的操作示范和命令行輸出結(jié)果:
1. ui_common git:(df697f9) git checkout master
2.Warning: you are leaving 1 commit behind, not connected to
3.any of your branches:
4.
5.  df697f9 forget to check out master
6.
7.If you want to keep them by creating a new branch, this may be a good time
8.to do so with:
9.
10. git branch new_branch_name df697f911e5a0f09d883f8f360977e470c53d81e
11.
12.Switched to branch 'master'
13. ui_common git:(master) git cherry-pick df697f9

 

使用第三方工具

  對于submodule的重度使用者,有幾個工具可作推薦:
1.Repo Google用于管理Android項目的工具。
2.Gitslave
3.Git Subtree

  以上工具,我都沒有實際用過,所以無法提供更多信息。

 

Tips

  由于常常使用submodule的相關(guān)命令,可以在 ~/.gitconfig文件中將其設(shè)置別名,方便操作,我設(shè)置的所有相關(guān)別名如下:
1.[alias]
2.  st = status -s
3.  ci = commit
4.  l = log --oneline --decorate -12 --color
5.  ll = log --oneline --decorate --color
6.  lc = log --graph --color
7.  co = checkout
8.  br = branch
9.  rb = rebase
10.  dci = dcommit
11.  sbi = submodule init
12.  sbu = submodule update
13.  sbp = submodule foreach git pull
14.  sbc = submodule foreach git co master


參考鏈接
1.《why-your-company-shouldnt-use-git-submodules》 (需翻墻)

2.《Git_submodule_tutorial》
 

來源:唐巧的技術(shù)博客

責(zé)任編輯:佚名 來源: cocoachina
相關(guān)推薦

2018-07-16 14:23:30

代碼Android問題

2018-02-07 11:15:07

Vagrant使用問題

2023-04-04 08:38:27

命令Git倉庫

2024-10-06 13:41:25

2017-07-14 09:29:45

AndroidWebview

2016-03-23 11:03:40

2017-08-01 05:44:10

Dockerweave虛擬機

2024-09-09 08:02:27

2021-10-15 06:58:41

psycopg2綠色版 Python

2024-09-09 09:08:28

2021-03-18 14:47:42

Jenkins git submodu代碼

2017-06-23 11:20:00

DockerWeave內(nèi)核

2019-01-07 14:36:36

Go系統(tǒng)開源庫

2021-08-29 18:36:17

MySQL技術(shù)面試題

2017-09-27 15:20:23

PHPerLaravelMysql

2023-02-28 16:26:46

推薦系統(tǒng)模塊

2020-05-12 14:57:06

git commit代碼前端

2015-02-10 11:25:59

AndroidiOS微軟

2020-12-30 09:55:56

鴻蒙HarmonyOS環(huán)境搭建

2016-12-30 11:10:32

Hadoop開發(fā)JVM
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 1级毛片| 国产精品一区二区福利视频 | 日日操夜夜操天天操 | 91精品一区二区 | 欧美区在线 | 欧美一区二区三区在线观看视频 | 久久小视频| 草比av| 日韩黄| 天天夜碰日日摸日日澡 | 国产精品a免费一区久久电影 | 免费精品 | 久久这里有精品 | 精品成人 | 日韩欧美中文在线 | a级毛片免费高清视频 | 国产综合久久久 | 免费国产一区 | 中文字幕日韩欧美 | 亚洲欧洲日韩精品 中文字幕 | 超碰免费在线 | 日本高清中文字幕 | 青草久久免费视频 | 亚洲社区在线 | 美国黄色一级片 | 欧美啪啪 | 亚洲成人午夜电影 | 免费在线成人网 | 成人午夜免费网站 | 久久一区二区三区四区 | 久久69精品久久久久久国产越南 | 精品国产一区二区三区久久 | 九九精品在线 | 国产精品日本一区二区在线播放 | 91看国产 | 精品国产青草久久久久96 | 久久av网 | 伊人免费观看视频 | 天天干狠狠 | 日韩一区二区三区在线观看视频 | 国产激情一区二区三区 |