这是我参与「第三届青训营 -后端场」笔记创作活动的的第7篇笔记
讲师介绍和背景
Git是什么
不同版本控制介绍
push是同步代码,而不是提交,提交是本地完成的,缺点大文件不太好,需要git-lfs
git发展历史
gitlab是定制化的,gerrit主要托管安卓系统
Git的基本使用方式
1:没有配置密钥,没有权限
2; fetch只会更新origin分支
git目录介绍
创建服务器上的仓库,用bare创建出来的
tree .git
工作区就是改代码,git add 放到暂存,git commit是提交
常见git配置
用户名需要配置
instead of 进行url替换,ssh和https
别名配置就是简化命令,只要敲git cin
为什么hooks有很多别的文件,给你列举一些例子,可以根据例子写一下
指向源
不同的源链接不同平台
同一个origin设置不同的push和fetch url
配置免密配置
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
git add 暂存区有文件
object 多了个文件内容,存储后市加密的
git cat-file -p 再加id可以看到
git commit
需要设置参数,然后可以看到object多了两个文件,一个是目录树object,还有一个是commit记录
Objects
Refs
存的是commit id
git checkout -b test 创建新分支
[root@ecs-155670 demo]# git tag v0.0.1
[root@ecs-155670 demo]# cat .git/refs/tags/v0.0.1
9351b79703bb07468a6be22deb28c39dac0f7021
与master和分支的意思是一样的
附注标签
git tag -a v0.0.2 -m "add feature1"
就会新增一个object
多了34 e
真正指向的object
追溯历史版本
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
内容变了,全新的tree,brob id也改变了
修改历史版本
新增object
git fsck --lost-found
多余的commit想要删掉,对于仓库没有意义
Git GC
git reflog expire -expire=now --all
usage: git reflog expire [--verbose] [--dry-run] [--stale-fix] [--expire=
完整的git视图
13 git clone&pull&fetch
代码很清楚就用git pull --rebase
不清楚就用git fetch解决冲突
14 git push
Git 的研发过程
集中式工作流
分支流规则
gitlab flow
代码合并
log里可以看出没有merge节点
选择合适的工作流
常见问题
Q&A
1:两个人修改同一个文件会导致合并很麻烦 请问有什么办法有什么能够避免冲突呢
开发过程模块比较清晰的时候
2:有时候会误把大文件添加并commit,就是后续版本中删除也会继续保存在之前版本的快照里,怎么将其彻底删除呢,好像要用到rebase命令
一个人用,把仓库删了,用filtbrunch,或者rebase
3:用原生命令行的git会好些
4:本地先有代码,怎么push到一个新的仓库呢
设置remote