SlideShare a Scribd company logo

Submodule && subtree

哲 于
哲 于
1 of 15
Download to read offline
Git Subtree解说
by于哲
2014.3.31
场景
对于⼀一些⽐比较⼤大的⼯工程,为了便于复⽤用,常常需要抽取⼦子
项⺫⽬目
A B
C
⽅方案1:git submodule
!
⽅方案2:git subtree
git submodule
submodule项⺫⽬目和它的⽗父项⺫⽬目本质上是2个独⽴立的git仓库,
只是⽗父项⺫⽬目存储了它依赖的submodule项⺫⽬目的版本号信息⽽而已。
坑:
• git pull之后,需要 git submodule update
• detached HEAD state,需要 git checkout master
• git clone 之后,需要 git submodule init & update
• messy,etc
git subtree
简介:
替代git submodule 命令,合并⼦子仓库到项⺫⽬目中并放在⼦子
⺫⽬目录,管理、更新都更加⽅方便。
要求:
git version > 1.8.0.0
if git version < 1.8.0.0:
go https://github.com/apenwarr/git-subtree
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类似的⽂文件 	

	

 • 可以以分⽀支形式切换依赖库
如何使⽤用git subtree?
前期准备:
!
创建本地项⺫⽬目(两个项⺫⽬目,⼀一个库):
git --git-dir=proj1.git init --bare
git --git-dir=proj2.git init —bare
git --git-dir=lib1.git init —bare
!
!
填充数据,提交,etc
如何使⽤用git subtree?
!
!
1. git remote add -f <⼦子仓库名> <⼦子仓库地址>
!
其中-f意思是在添加远程仓库之后,⽴立即执⾏行fetch
!
2. git subtree add --prefix=<⼦子⺫⽬目录名> <⼦子仓库名> <分⽀支> —squash
!
—squash意思是把subtree的改动合并成⼀一次commit,这样就不⽤用拉取⼦子
项⺫⽬目完整的历史记录。
!
--prefix之后的=等号也可以⽤用空格。
!
!
添加⼦子⺫⽬目录,建⽴立与git项⺫⽬目的关联
如何使⽤用git subtree?
!
!
1. git fetch <远程仓库名> <分⽀支>
!
2. git subtree pull --prefix=<⼦子⺫⽬目录名> <远程分⽀支> <分
⽀支> --squash
!
!
!
从远程仓库更新⼦子⺫⽬目录
如何使⽤用git subtree?
!
!
1. git subtree push --prefix=<⼦子⺫⽬目录名> <远程分⽀支名>
分⽀支
!
!
!
!
!
从⼦子⺫⽬目录push到远程仓库
git subtree原理
libs master
new master
git subtree原理
• git read-tree 更新暂存区
• git write-tree 保存暂存区⺫⽬目录树
• git commit-tree
porcelain瓷器
• git branch
• git commit
• git push
• etc
plumbing⽔水管
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
参考
• http://aoxuis.me/posts/2013/08/07/git-subtree/
• http://blogs.atlassian.com/2013/05/alternatives-to-git-
submodule-git-subtree/
• http://www.worldhello.net/2010/10/31/2041.html
THANK YOU	

@jackyu

Recommended

Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Visual Studio 2015 與 Git 開發實戰
Visual Studio 2015 與 Git 開發實戰Will Huang
 
Git 使用介绍
Git 使用介绍Git 使用介绍
Git 使用介绍medcl
 
寫給大家的 Git 教學
寫給大家的 Git 教學寫給大家的 Git 教學
寫給大家的 Git 教學littlebtc
 
Git and Github basic with SourceTree
Git and Github basic with SourceTreeGit and Github basic with SourceTree
Git and Github basic with SourceTreeChu-Siang Lai
 
工程師必備第一工具 - Git
工程師必備第一工具 - Git工程師必備第一工具 - Git
工程師必備第一工具 - GitAlan Tsai
 
Learn git
Learn gitLearn git
Learn git甘 李
 
Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Git tutorial for windows user (給 Windows user 的 Git 教學)
Git tutorial for windows user (給 Windows user 的 Git 教學)Cloud Tu
 

More Related Content

What's hot

Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹Max Ma
 
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作奕浦 郭
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshellNelson Tai
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub維佋 唐
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹PingLun Liao
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用Will Huang
 
Add mailinglist command to gitolite
Add mailinglist command to gitoliteAdd mailinglist command to gitolite
Add mailinglist command to gitolite琛琳 饶
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學Duncan Chen
 
Git introduction
Git introductionGit introduction
Git introductionmythnc
 
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理彼得潘 Pan
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Wen-Tien Chang
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence TutorialHo Kim
 
幸福快樂的完美結局
幸福快樂的完美結局幸福快樂的完美結局
幸福快樂的完美結局Anna Su
 
Git and git hub
Git and git hubGit and git hub
Git and git hub唯 李
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战icy leaf
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學hydai
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹Adison wu
 

What's hot (20)

Git基礎介紹
Git基礎介紹Git基礎介紹
Git基礎介紹
 
Git 入門與實作
Git 入門與實作Git 入門與實作
Git 入門與實作
 
Git in a nutshell
Git in a nutshellGit in a nutshell
Git in a nutshell
 
版本控制 使用Git & git hub
版本控制   使用Git & git hub版本控制   使用Git & git hub
版本控制 使用Git & git hub
 
Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹Git 程式碼版本控制軟體介紹
Git 程式碼版本控制軟體介紹
 
git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用git merge 與 rebase 的觀念與實務應用
git merge 與 rebase 的觀念與實務應用
 
Add mailinglist command to gitolite
Add mailinglist command to gitoliteAdd mailinglist command to gitolite
Add mailinglist command to gitolite
 
Git與source tree 基礎教學
Git與source tree 基礎教學Git與source tree 基礎教學
Git與source tree 基礎教學
 
Git introduction
Git introductionGit introduction
Git introduction
 
Xcode 的 git 版本管理
Xcode 的 git 版本管理Xcode 的 git 版本管理
Xcode 的 git 版本管理
 
Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀Git 版本控制系統 -- 從微觀到宏觀
Git 版本控制系統 -- 從微觀到宏觀
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
Git Essence Tutorial
Git Essence TutorialGit Essence Tutorial
Git Essence Tutorial
 
幸福快樂的完美結局
幸福快樂的完美結局幸福快樂的完美結局
幸福快樂的完美結局
 
Git and git hub
Git and git hubGit and git hub
Git and git hub
 
Git 入门实战
Git 入门实战Git 入门实战
Git 入门实战
 
Git Tutorial 教學
Git Tutorial 教學Git Tutorial 教學
Git Tutorial 教學
 
連哈秋都懂的Git教學
連哈秋都懂的Git教學連哈秋都懂的Git教學
連哈秋都懂的Git教學
 
Git & Sourcetree 介紹
Git & Sourcetree 介紹Git & Sourcetree 介紹
Git & Sourcetree 介紹
 
Git由超淺入超深
Git由超淺入超深Git由超淺入超深
Git由超淺入超深
 

Similar to Submodule && subtree

Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)flylon
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2Chris Chen
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607Charles Tang
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程gemron
 
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理Pu Lee
 
Github in xcode
Github in xcodeGithub in xcode
Github in xcode郁凱 曾
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包Chen-Ming Yang
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報Bachue Zhou
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuanWei-Yuan Chang
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgitRhythm Sun
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用Philip Zheng
 
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Hsin-lin Cheng
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门Rongxing Liu
 
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)Roy Wang
 

Similar to Submodule && subtree (20)

Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)Git 超簡單學習懶人包(軟體程式版本控管系統)
Git 超簡單學習懶人包(軟體程式版本控管系統)
 
Git &amp; git hub v1.2
Git &amp; git hub v1.2Git &amp; git hub v1.2
Git &amp; git hub v1.2
 
Git原理与实战 201607
Git原理与实战 201607Git原理与实战 201607
Git原理与实战 201607
 
Git+使用教程
Git+使用教程Git+使用教程
Git+使用教程
 
Git基础培训
Git基础培训Git基础培训
Git基础培训
 
Git Tutorial
Git TutorialGit Tutorial
Git Tutorial
 
Git入門介紹
Git入門介紹Git入門介紹
Git入門介紹
 
Git Flow 管理
Git Flow 管理Git Flow 管理
Git Flow 管理
 
Git 教學
Git 教學Git 教學
Git 教學
 
Git 实战
Git 实战Git 实战
Git 实战
 
Github in xcode
Github in xcodeGithub in xcode
Github in xcode
 
20170510 git 懶人包
20170510 git 懶人包20170510 git 懶人包
20170510 git 懶人包
 
COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報COSCUP 2015 開源之道-Git工作坊教學簡報
COSCUP 2015 開源之道-Git工作坊教學簡報
 
Learning to Use Git | WeiYuan
Learning to Use Git | WeiYuanLearning to Use Git | WeiYuan
Learning to Use Git | WeiYuan
 
First meetingwithgit
First meetingwithgitFirst meetingwithgit
First meetingwithgit
 
20150313 ian git
20150313 ian git20150313 ian git
20150313 ian git
 
容器與 Gitlab CI 應用
容器與 Gitlab CI 應用容器與 Gitlab CI 應用
容器與 Gitlab CI 應用
 
Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)Git 簡介(古時候的簡報備份)
Git 簡介(古時候的簡報備份)
 
Github简介及实用入门
Github简介及实用入门Github简介及实用入门
Github简介及实用入门
 
Android 程式設計(4)
Android 程式設計(4)Android 程式設計(4)
Android 程式設計(4)
 

Submodule && subtree