git submoudle vs git subtree

git管理子项目

对于一些比较大的工程,为了便于复用,常常需要抽取子项目。通常项目中的共用UI、共用底层逻辑、共用第三方库抽出来做git管理子项目。这时候git提供了两种管理子项目的方式,submodule和subtree。

有人对submodule和subtree的区别做出一个总结: submodule is link; subtree is copy

submodule

container 与 module 各自都是独立的 git repo

submodule需做一次commit

父层repo需将子层的commitID也要推送上去

submodule的坑

  1. submodule更新完后并push,但主repo没push新meta档到服务器上,另一开发者git pull之后submodule会停留在未修改前的版本。

  2. 假设一切正常,主repo有最新submodule的变动文件,开发者git submodule update并不会将submodule切到任何branc 大专栏  git submoudle vs git subtreeh,所以默认下的submodule的repo会停留在一个detached HEAD(游离状态)。

修改submodule的坑

  1. 常见的做法切到 submodule 的目录,然后做修改,然后 commit 和 push。

  2. 如果你不慎忘记切换到分支,又做了提交,可以用 cherry-pick 命令挽救。

    1. 用 git checkout branch 将 HEAD 从游离状态切换到branch ,这时候,git会报 Warning 说有一个提交没有在 branch上,记住这个提交的 change-id(假如 change-id 为 aaaa)
    2. 用 git cherry-pick aaaa将刚刚提交的文件并到branch中。
    3. 用 git push 将更新提交到远程数据库中。

subtree

只有一个 git repo

只需要做一个 commit

参考数据-唐巧的博客

Git参考范例 - 高见龙

猜你喜欢

转载自www.cnblogs.com/liuzhongrong/p/11986007.html
今日推荐