Upgrade to Pro — share decks privately, control downloads, hide ads and more …

git submodule && git subtree

Zhe Yu
April 01, 2014
180

git submodule && git subtree

Zhe Yu

April 01, 2014
Tweet

Transcript

  1. why git subtree? • 管理和更新流程⽐比较⽅方便 • git v1.5.2以后建议使⽤用git subtree (git

    v1.8.0.0 才合并进来) cd git/contrib/subtree && make && sudo install -m 755 git-subtree /usr/lib/git-core • 仓库 clone下来不需要 init 和 update • 不会产⽣生像.gitmodule类似的⽂文件 • 可以以分⽀支形式切换依赖库
  2. 如何使⽤用git subtree? 前期准备: ! 创建本地项⺫⽬目(两个项⺫⽬目,⼀一个库): git --git-dir=proj1.git init --bare git

    --git-dir=proj2.git init —bare git --git-dir=lib1.git init —bare ! ! 填充数据,提交,etc
  3. 如何使⽤用git subtree? ! ! 1. git remote add -f <⼦子仓库名>

    <⼦子仓库地址> ! 其中-f意思是在添加远程仓库之后,⽴立即执⾏行fetch ! 2. git subtree add --prefix=<⼦子⺫⽬目录名> <⼦子仓库名> <分⽀支> —squash ! —squash意思是把subtree的改动合并成⼀一次commit,这样就不⽤用拉取⼦子 项⺫⽬目完整的历史记录。 ! --prefix之后的=等号也可以⽤用空格。 ! ! 添加⼦子⺫⽬目录,建⽴立与git项⺫⽬目的关联
  4. 如何使⽤用git subtree? ! ! 1. git fetch <远程仓库名> <分⽀支> !

    2. git subtree pull --prefix=<⼦子⺫⽬目录名> <远程分⽀支> <分 ⽀支> --squash ! ! ! 从远程仓库更新⼦子⺫⽬目录
  5. git subtree原理 • git read-tree 更新暂存区 • git write-tree 保存暂存区⺫⽬目录树

    • git commit-tree porcelain瓷器 • git branch • git commit • git push • etc plumbing⽔水管
  6. git subtree原理 • git read-tree —prefix=libs/lib1 lib1 • git write-tree

    • echo "subtree merge" | git commit-tree id -p id1 -p id2 • git reset id