第十节Git 的正确使用姿势与最佳实践| 青训营笔记

129 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第7篇笔记

讲师介绍和背景

image.png image.png image.png image.png image.png

Git是什么

image.png image.png

不同版本控制介绍

image.png image.png image.png push是同步代码,而不是提交,提交是本地完成的,缺点大文件不太好,需要git-lfs

git发展历史

image.png gitlab是定制化的,gerrit主要托管安卓系统 image.png

Git的基本使用方式

image.png image.png 1:没有配置密钥,没有权限
2; fetch只会更新origin分支

git目录介绍

image.png 创建服务器上的仓库,用bare创建出来的 tree .git image.png image.png 工作区就是改代码,git add 放到暂存,git commit是提交 image.png image.png

常见git配置

image.png 用户名需要配置 instead of 进行url替换,ssh和https 别名配置就是简化命令,只要敲git cin 为什么hooks有很多别的文件,给你列举一些例子,可以根据例子写一下 image.png 指向源
不同的源链接不同平台 image.png 同一个origin设置不同的push和fetch url image.png

配置免密配置

image.png image.png ssh-keygen -t ed25519 -C "jinwei8851@163.com" Generating public/private ed25519 key pair. Enter file in which to save the key (/root/.ssh/id_ed25519): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_ed25519. Your public key has been saved in /root/.ssh/id_ed25519.pub. The key fingerprint is: SHA256:8s5wGKQGW8c9uOh6+v9A9PxE4OUrkHA+0d2jcB5hVTc jinwei8851@163.com The key's randomart image is: +--[ED25519 256]--+ | . o...++...E.| | = *o=+ o ..| | . . @ ++oo . | | + * * oo. | | . + = S o | | o . = + | | . + o . | | .. * | | o+....+ | +----[SHA256]-----+
cat /root/.ssh/id_ed25519.pub ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIBjvNIuQc8o/Z1YV2tGsf41QT3xME4+HWOb5zibcd4Mp jinwei8851@163.com`

git ADD

image.png git add 暂存区有文件
object 多了个文件内容,存储后市加密的
git cat-file -p 再加id可以看到

git commit

image.png 需要设置参数,然后可以看到object多了两个文件,一个是目录树object,还有一个是commit记录 image.png

Objects

image.png image.png image.png

Refs

image.png 存的是commit id git checkout -b test 创建新分支 image.png image.png [root@ecs-155670 demo]# git tag v0.0.1
[root@ecs-155670 demo]# cat .git/refs/tags/v0.0.1
9351b79703bb07468a6be22deb28c39dac0f7021 与master和分支的意思是一样的

附注标签

image.png git tag -a v0.0.2 -m "add feature1" 就会新增一个object image.png 多了34 e image.png 真正指向的object

追溯历史版本

image.png vim reademe.md [root@ecs-155670 demo]# git add .
[root@ecs-155670 demo]# git commit -m "update readme"
[test 7a719b2] update readme
readme 添加#号 变成了七个文件,brob,commit,tree image.png 内容变了,全新的tree,brob id也改变了 image.png image.png

修改历史版本

image.png image.png

新增object

image.png git fsck --lost-found 多余的commit想要删掉,对于仓库没有意义

Git GC

image.png git reflog expire -expire=now --all
usage: git reflog expire [--verbose] [--dry-run] [--stale-fix] [--expire=

完整的git视图

image.png

13 git clone&pull&fetch

image.png 代码很清楚就用git pull --rebase
不清楚就用git fetch解决冲突

14 git push

image.png image.png

Git 的研发过程

image.png image.png

集中式工作流

image.png image.png image.png

分支流规则

image.png image.png image.png image.png image.png

gitlab flow

1653378247(1).png

代码合并

image.png image.png image.png log里可以看出没有merge节点 image.png

选择合适的工作流

image.png

常见问题

image.png

Q&A

1:两个人修改同一个文件会导致合并很麻烦 请问有什么办法有什么能够避免冲突呢 开发过程模块比较清晰的时候 2:有时候会误把大文件添加并commit,就是后续版本中删除也会继续保存在之前版本的快照里,怎么将其彻底删除呢,好像要用到rebase命令 一个人用,把仓库删了,用filtbrunch,或者rebase 3:用原生命令行的git会好些 4:本地先有代码,怎么push到一个新的仓库呢 设置remote image.png