git clone、git fetch 与git pull的区别
1. 前提
理解Git是一个分布式版本管理系统;
了解objects、.git/refs/和.git/logs/目录的作用。
objects存放的是文件的具体变化细节;
.git/refs/存放本地和远程分支、标签对应的提交哈希值(可以看做版本号);
.git/logs/存放的是.git/refs/的变更记录;
2. git clone
git clone repo_url [dir] # 顾名思义,就是将远程仓库克隆到本地。
3. 重点分析git fetch 与git pull的区别
(1)操作效果:git pull = git fetch + git merge
由于Git是一个分布式版本管理系统,那么本地仓库与远程仓库应该保持一致;但是由于仓库多个分支多人协作开发,这时候就会导致多个本地仓库不一致,如何让多个本地仓库及远程仓库保持最终一致呢?
这就离不开git push和git fetch与git pull命令了。
假如三人同时开发一个项目,小明、小亮、小红。
小明自己的模块开发完毕,git push 到远程仓库master分支即可;
小亮开发完成之后,也需要git push,但是这时候远程仓库已经发生变化,因此,需要先将远程仓库与本地仓库保持一致,这就是git fetch的作用,将远程仓库最新的commit版本同步到本地仓库,同时在.git/refs/remotes/目录下记录远程仓库最新的提交哈希值;接下来,小亮需要将自己开发的内容与小明的合并在一起,也就是git merge命令,merge之后再add、commit、push到远程仓库即可。
小红需要提交自己的内容时,操作应该和小亮一样。
小红在执行完git fetch命令后,并没有直观的观察到什么变化,感觉完全可以将git fetch与git merget合在一起,于是就有了git pull。git pull直接将代码拉取到本地工作区,小红可以直观地看到文件内容的变化,很开心。
(2)本质区别
相同点:都将远程仓库新的提交同步到本地仓库;
不同点:git fetch 更新的是.git/refs/remotes/下即关联的远程仓库对应分支的最新提交哈希值(版本号);
而git pull 更新的是.git/refs/heads/下即本地仓库对应分支的最新提交哈希值(版本号),并多了git merge操作。
参考博客:https://blog.csdn.net/a19881029/article/details/42245955