git 裸库
没有工作区域的git仓库,仅用来存放和中转开发者代码的区域,用于服务端
mkdir git-bare && git-bard创建git-bard文件夹git init --bare初始化裸库
submoudle 和 subtree的区别
submodule会有一个引用目录,直接定位到对应的仓库subtree实实在在的文件目录
场景
- project 开发项目
- child 子模块项目
在 project里面添加child
git remote add substre-origin <child-url>git subtree add --prefix=subtree subtree-origin master [--squash]git remote show查看远程仓库信息
child存在修改, project更新child
git subtree pull --prefix=subtree subtree-origin master [--squash]
project修改child,推送修改subtree
git push推送project的修改,subtree并没有推送上去git subtree push --prefix=subtree subtree-origin master推送subtree的修改
--squash参数
把commit进行合并,生成一个新的commit,不会有多余的提交记录,将无法追溯历史commit
注意:如果再项目开始的时候使用了 --squash,后续操作必须全部用上,否则将出现难以修复的问题;如果没用 --squash,后续所有操作不用该参数
三方合并
分支合并绝对能找到同一个parent,而subtree追溯parent-commit,最终会追溯不到同一个parent-commit
- commit-4 合并会往前找到共同的parent-commit-3
- 再把commit-3.12和commit-3.22合并起来,得到commit-4
- commit-4有两个parent,一个指向 3.12,一个指向3.22