git
git是一个用于帮助用户实现版本控制的软件
下载安装:https://git-scm.com/downloads,下载后点点点
第一阶段 管起你的项目
开始管理你的项目
进入到你要管理的项目程序目录下,右键选择Git Bash Here命令行
- git init 让git帮你管起当前目录
执行后,它帮你创建了一个.git文件,默认是隐藏的,需要查看要到文件夹选项下勾选显示隐藏文件
- git status 查看当前目录下所有目录文件的状态
显示红色的,说明git还没对此目录文件管理到,需要命令操作
- git add xx.py 管起某个文件
再次status查看时,xx.py是绿的,代表管到了
- git add . 管起当前目录下所有目录文件
- git commit -m ‘创建第一个版本’ 进行创建版本 -m为描述信息
不过执行命令的时候,报错了,主要你没告诉你是谁,所以你还要这么做
- git config --global user.email "xxx@qq.com" 设置邮箱
- git config --global user.name “laoliu” 设置名字
再次进行commit时,就没报错了,并有create字眼,就说明提交成功
这个时候查看status,显示信息不再有目录文件了,但是本地这些文件都是有的,说明提交后,本地文件相对git是透明的
如果我对某个文件进行修改,查看status,修改文件变红了,说git检测到文件的变化
然后你再进行git add . git commit -m ‘增加xx功能’,目录文件又透明了
- git log 查看提交记录
从查看的内容,可以看到有两次提交记录,表示提交了两个版本
如果我想回退到上个版本,怎么做了?
- git reset --hard 版本号(log里commit后面跟的那串随机字符) 回退到指定版本
回退后查看log,发现刚才回退的版本记录不存在了,如果想看之前回退版本号,就要用下面命令了
- git reflog 查看提交和回退版本记录
如果我又想回到刚才那个回退版本,怎么做了?
使用git reset --hard 版本号(而此时的版本号是reflog下提交版本时的版本号,不是回退时的版本号,它要比回退时的版本长度更短)
第二阶段 开发到一半,线上与bug
比如有这么一个场景,就是你接到一个新增功能的任务,开发到一半,线上的突然有问题了,你需要修复这个问题,提交代码时,你需要做到只提交修复bug的代码,新开发一半的代码不能提交
方式一
- git stash 把带红的(修改的)临时存在某个地方
你修改完bug提交后,你要继续开发新任务另一半,可以用下面的命令,并且恢复回来的 会保留你刚才修复好bug的内容
- git stash pop 把之前存的再拿回来
- git stash list 可以查看你存在某地方的记录
当除了上述这方法解决上述过程中代码的冲突,还可以用分支的方式来解决,分支你就理解有两套代码,一套用于你修复线上问题,一套则是用新开发任务,现在目前只有一套,你需要先创建一套
方式二
- git branch dev 创建一个分支
- git branch 查看所有分支
假如dev,这套代码用于新功能开发的,当前分支默认master,怎么切换到dev分支呢?
- git checkout dev 切换到指定分支
在dev你功能开发到一半,你需要修改线上的一个bug,你可以dev分支先提交你开发一半的代码,然后切换到master分支里去修复bug
当然在实际开发,一般是不让你修改master分支代码(主要是让master里的代码和线上的时时刻刻保持一致),所以修复bug,你再创建一个分支,在这个分支里,你尽情的改
那问题来,现在有三套代码,每套代码都不一样,那合并代码时应该怎么合并呢?合并前你需要先切换到master
- git merge bug分支 把修复完bug的分支合并到当前分支master下
合并后你不需要再提交了,因为在bug分支里,你已经提交过,当然合并后,之前bug分支就没有存在的必要了,就要进行删除了
- git branch -d bug分支 删除bug分支
这个时候,你再次切换dev里继续开发你自己的新增功能,开发完后,你需要再次合并了,切回到master里,执行git merge dev,因为修复bug的功能master里有,而dev里没有,新开发功能在mester里没有,它跳出让输入记录操作的信息,你输入完后,:wq保存一下就可以了
如果合并过程中,代码冲突,你慢慢找,手动修改一下
第三阶段 两地开发代码管理
如果你要跨设备开发,每次复制到u盘或者通过百度云上传下载都还是比较麻烦的,而GitHub则可以完美支持这个方面,它的功能主要就是提供一个代码托管的地方
开始你的托管前,你必须要到GitHub上进行注册,登录后,你需要先在GitHub上先创建接收你项目的目录,点击New repository
填好项目名和描述,点击创建就可以了,看到下面这几条命令
-
git remote add origin https://github.com/caijingkuangmo/chou-ti.git 对你的提交网址进行重命名
- git push -u origin master 把master里的代码提交到origin网址里
执行完后,刷新提交网址,就能看到我们提交的代码了
好,那我们现在换台设备开发了,怎么操作了
- git clone https://github.com/caijingkuangmo/chou-ti.git 把指定url里代码全部下载下来
此时你处在跟目录外,所以你需要cd到根目录下,再执行相应的命令,默认是只是把master分支的下载下来了,如果你想把dev分支的代码下载下来,你还需要这么做
创建分支dev,切换到dev分支,然后执行git pull origin dev 把dev分支代码拉下来(clone下载的代码是保存了之前对提交url命名的)
pull拉代码的动作本质上是分两步:
- git fetch origin dev 先把dev代码拉下来放在版本库里
- git merge origin/dev 把版本库里的代码合并到本地dev
当然上述过程,提交记录可能会出现分叉的情况,如果想保持记录的整洁,可以把第二条命令换成下面这条命令
- git rebase origin/dev
第四阶段 多人协同开发
创建完项目后,别人如果想开发,你必须给他这个项目的管理(读写)权限吧?那怎么邀请别人加入项目呢?
有两种方式,一种是合作者模式
另外一种方式就是创建组织,组织内的成员共同管理项目
创建后,你在首页就能看到你创建的组织
创建完后,你就要邀请成员了
做好邀请成员工作后,你需要思考协同开发,需要创建几个分支呢?
master分支 保持和线上一致
dev分支 新功能开发完成合并分支
review分支 用于开发完后合并代码,待检视代码,检视通过后,合并到dev分支,检视工作一般组长或带你的人来
每个人个人分支 保证代码开发到一半提交,不至于影响其他人,等功能开发完成,合并到review分支
另外需要注意的是:提交代码前,为保证最新代码,先拉一下
为了防止合并产生冲突,都争先第一个提交代码就跑,必须确立一个原则,就是 合并代码时,尽量参与开发的人都在场,并且最好维持1-2天就合并一次
第五阶段 阅读优秀项目代码,并尝试修复bug成为贡献者
fork项目代码到自己仓库里,修改bug
pull request发送修改bug信息给项目组织者,一旦得到组织者确认,开源项目就会合并你的代码,这样你就成为了这个开源项目贡献者
其他
不用反复输入用户名密码登录
https --> git remote add origin https://用户名:密码@github.com/caijingkuangmo/chou-ti.git 这种方式不安全
ssh--> git@github.com/caijingkuangmo/chou-ti.git
ssh-keygen.exe 生成公钥和私钥,会提示本地生成地址
cat 获取公钥内容,复制到
本地ssh -T git@github.com验证是否成功
git config设置用户名和邮箱
git remote add origin git@github.com/caijingkuangmo/chou-ti.git(git remote--查看, git remote remove 名字--删除)
git clone git@github.com/caijingkuangmo/chou-ti.git
不用管理的文件
比如:sql文件和.idea文件
vim .gitignore
加入内容 *.sql\n *.pyc
把gitignore文件提交 push
更多匹配规则
以斜杠“/”开头表示目录; 以星号“*”通配多个字符; 以问号“?”通配单个字符 以方括号“[]”包含单个字符的匹配列表; 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
当然排除这些文件,你永远想不全的,GitHub已经帮我们做了这么一件,就是在创建仓库时,有这么一个选项,搜索点选就可以了
版本管理
你看人家的项目,在releases下,都有版本
git tag -a v1.0 -m '版本介绍' 本地创建Tag git show v1.0 查看 git tags -n 查看本地Tag git tag -l 'v1.4.2.*' 查看本地Tag,模糊匹配 git tag -d v1.0 删除Tag git push origin :refs/tags/v0.2 更新远程tag git checkout v.10 切换tag git fetch origin tag V1.2 git push origin --tags git pull origin --tags git clone -b v0.1 gitbub地址
骚师博客