###############    初识git    ##############

"""
git初识:
1,git是什么?git是一个帮助用户版本控制的软件,
2,git和github,没有关系
3,早期都是使用svn,现在基本都是使用git来做,
4,git每一个版本不是完全复制的,而且只是记录改动的部分,这样可以节省空间, git还是应该应该使用一个故事场景来学习,这样更加的印象深刻,否则全是理论就容易忘记
你写了代码,怎么使用git把代码管理起来?
1,要下载一个Windows版本,进入git官网下载
2,然后进入项目的根目录,右键,点击git bash here,还有git gui,不使用桌面版,都是用命令,
3,执行命令:git init,这样就是让git帮你管理起来这个文件夹了,会在项目的根目录创建一个.git文件夹,
以后当前的版本都会保存到这个git文件里面去,
4,执行命令:git status,会出现红色的文件夹,这意味着,这些文件夹还没有被git管理起来, 5,执行命令:git add manage.py ,会发现这个manage.py文件被管理了,
现在你再去git status,其他文件夹还是红色的还没有管理,manage.py文件已经不是红色了,
执行命令:git add . ,这就是管理所有的文件,就会全变绿了,
但是现在没有真正的被提交,还需要下一步, 6,执行命令:git commit -m '创建第一个版本',这就是提交了,后面是版本的提交注释,这是复制了一份到git文件夹里面了,
执行命令:git config --global user.email "1910583523@qq.com"
执行命令:git config --global user.name "andy",第一次提交,这是告诉git,是谁提交的,方便追溯,
执行命令:git status,这个时候就没有东西了,就是都提交了,都把文件管理起来了,
注意:提交版本的描述信息,尽量写的详细,否则别人回滚的时候,不确定是不是要回滚, 7,修改文件,执行命令,git status,就会发现这个文件变红了,这是因为文件变动了,
执行命令:git add . ,
执行命令:git commit -m '创建第二个版本',必须要执行这两个命令,然后就会发现这个文件都管理了,git status 就没有文件了, 8,执行命令:git log,就会把所有的提交日志显示出来,会有commit id,还有提交人和邮箱,时间,提交注释, 9,假设现在上线了,然后发现第二次提交的内容没有审核通过,就需要回滚,
执行命令:git reset --hard 需要回滚的版本号,这样就回滚了, 10,假设现在发现第二次提交的内容审核通过了,就可以把第二次的提交了,
执行命令:git reflog,这是查看所有的版本,
执行命令:git reset --hard 需要回滚的版本号,这样就再次回滚到了第二个版本了, 11,如果是修改了之后还没有git add,git status,这个时候文件是红色的了,但是我现在想要取消这个修改,
执行命令, git checkout +文件名 ,这就是取消修改了, 上面的这种管理还是在本地管理的,
"""

###############    git版本控制----stash,branch,    ##############

"""
场景:
你的项目上线了,现在开发第二个版本,这个时候线上第一个版本出问题了,现在必须马上修改,如何操作?
这个时候第二个版本已经开发了很多了,现在git status已经有很多的红色文件了,怎么办?
第二个版本的功能肯定不能推上去,而第一个版本有bug要修改,怎么办? 操作:
1,执行命令:git stash,这是找到所有红色的文件,也就是被修改的文件,把它们拿走,临时存到一个地方了,
这样git status,就没有红色文件了,并且你开发的内容也不见了,被存到了另一个地方了, 2,然后修改bug,然后提交,这个bug就解决了,然后你git add . git commit ...
我需要继续开发,怎么开发? 3,执行命令:git stash pop,这样就回来了,并且我们开发的内容回来,而且我们修改的bug也已经修改了,就可以继续开发了, 会出现的问题:
你在没有删除日韩的之后,stash了,这个时候保存的是有日韩的,然后删除了之后,pop的时候出现了合并,
合并的时候自动帮我们检测了,来做这个事情,这就是一个自动合并的功能,这种是能合并的,但是有些情况是合并不了的, 冲突:
假设你修改bug的时候,如果你不是删除日韩,然后新增了一个在线,这个时候提交修改的内容,
然后回来git stash pop,这个时候就会报错了,冲突了,
CONFLICT (content): Merge conflict in api/tests.py 所以pop的时候有两种情况,一种是可以自动合并的,一种是有冲突的, 什么时候自动合并?什么时候有冲突了呢?
两个用户修改了同一个文件的同一块区域,git会报告内容冲突。
我们常见的都是这种,后面的解决办法也主要针对这种冲突。 这种冲突了怎么办?
就要手动解决冲突,没有好的解决方法,但是如果有两千个冲突怎么办?
冲突要会看,==========,这是一个分割线,上面是之前的,下面是你后面写的,
然后手动解决了冲突,就可以提交代码了,commit, 记住:如果你正在写代码,然后线上有bug,你要去修改,你就需要git stash(这个只会保存红色的文件),
然后修改之后回来的时候git stash pop,这个时候可能会有冲突,
有了冲突不要着急,如果有两千个,也不要着急,有一个软件,可以把两千个都找到, 总结:git stash的用法:
1,git stash,这是放入一个缓存中,
2,git stash pop,这是把第一个暂存的拿出来,
3,git stash list,所有的暂存的记录,默认是拿回来第一个,
4,git stash apply 编号,将指定编号的记录重新拿到工作区(可能会有冲突,)
5,git stash drop 编号,删除指定编号的记录,
常用的就是前两个, ############################################################# 上面是方式一,解决方法,
这种不太好,公司里面常用另一个方法,就是branch的东西,
下面讲解方式二, 场景:
现在开发一个功能,然后开发到一半的时候,需要马上上一个功能,这个时候怎么办? 我们使用分支的方式,
1,执行命令:git branch dev,这是创建了一个分支,而且是copy了一份代码,
这个时候这个分支和master分支是一样的,以后在代码开发的功能在dev分支做,
执行命令:git branch,这是查看分支,
执行命令:git checkout dev,这是切换分支, 2,这样你就有两套代码了,然后你就可以在dev开发新的功能,在dev提交的代码是不会影响到master,
然后你切换到master,你会发现代码是没有变化的,也就是dev的代码没有影响到master 3,现在dev的功能开发到了一半,然后需要马上上线一个功能:日韩,可以在master分支中增加一个日韩,
然后直接提交了,但是一般我们不直接在master分支提交代码,因为风险太大了,
所以规定就是不能在master分支修改 4,最好的方案是创建一个分支,
执行命令:git checkout -b rh,然后这个分支是和master分支一样的,在这个分支修改bug,新增紧急的功能,新增之后,比较代码
这个时候有三套代码了,1个是master,1个是dev有新开发的功能,1个是rh,这有我们新增的功能, 5,现在要合并代码了,
rh分支和mater分支,先回到master,
执行命令:git merge rh,这一步就是把代码合并到master了,
然后在master分支就有rh的提交日志log了,
然后删除这个分支,
执行命令:git branch -d rh,这样就把rh分支删除了,
所以面试问你如果有线上bug怎么办?就是创建一个分支,然后修改,提交,合并,删除新建的分支, 6,然后现在我开始开发了,切换到dev分支,git checkout dev,
然后可以继续开发了, 但是这个分支是没有修改的bug的,这个要记住,你可以现在合并,也可以后面合并,现在你只是写你的功能就行了,
但是一般是后面合并,因为是协同开发,你改了bug,其他人可能不知道, 7,然后现在继续开发,新的功能开发完了, 然后在dev分支提交,
现在需要上线新功能,就要把dev和master分支合并了,
切换到master分支,
执行命令:git merge dev,这个时候报错了,因为有的代码dev分支没有,而dev分支有的master分支没有,怎么办? 8,这个时候没有冲突,但是弹出需要一个合并记录,然后输入你的这次合并的注释,然后保存退出,就可以了,合并成功了,
这个时候看master的log是所有的都有的, 9,但是如果是修改的内容是同一行,会冲突,冲突了就要手动修改了, 公司里面修改bug,必须要创建bug分支,处理之后合并master分支,master永远保持正确的代码,然后删除bug分支,
stash就是个人使用的, """

###############    git版本控制之github代码管理    ##############

"""

git版本控制之github代码管理,

1,github一个代码托管的网站,最有名的就是github,这是全球最大的,中国用码云,
做代码托管,你放的代码所有人都能看到,但是你要别人不能看要交钱,github被微软收购了,
也可以自己创建一个代码托管的网站:gitlab,这是公司自己搭建的,命令都一样用,公司会给你一个账号
github就像是一个云,和git结合的很好, 2,现在你需要注册一个git账号,登陆之后如果你有项目都显示在左边, 3,一开始是不能提交代码的,你需要新建一个代码仓库,这个仓库名字最好和本地的项目名称一致,
创建的时候主要是仓库名称和描述,
步骤:
在本地的git上,
git remote add origin https://github.com/liqian08161992/luffy.git 这是给后面的地址起一个别名,叫做origin,以后就往这个地址推送代码了,
这就是建立了关联关系了,这个关联关系在.git文件夹下的config文件里面呢,
git push -u origin master,这是推送代码到线上 4,但是我们开发都在dev分支,所以也要把dev分支推送到dev,
切换到dev分支,
执行代码:git push origin dev 5,有了代码托管之后,你在公司开发的代码,不用拿电脑,回到家就可以写代码了,怎么办?
现在到了家之后,首先第一步需要把代码下载下来,怎么下载?
新建一个文件夹,然后在文件夹内部,右键打开git bash here
执行命令:git clone https://github.com/liqian08161992/luffy.git
然后把代码克隆下来,这是默认只复制master分支,没有dev分支,
在本地再新建一个dev分支,git branch dev,
切换到dev分支,
执行命令:git pull origin dev,这就是把dev代码拉下来了, 6,在家里开始写代码,开发一个功能,比如会员功能,
然后git add .
git commit -m '会员功能开发了三分之一',这是提交了本地,
git push origin dev,这是把代码推送到了服务器,这一步一定要有, 7,第二天到公司之后,打开目录,然后拉下来代码
执行命令:git pull origin dev然后代码就拉下来了,
然后修改了之后,再次提交,并且push到github
现在就多了push和pull,这是推送到远程仓库了, ################################################################# git忘记提交代码引发的问题: 1,在公司开发的代码,比如开发了一个1.py,还有add,commit,但是没有push,
2,到了家里之后,pull的时候就没有代码拉下来的,
怎么办?
你可以接着开发,写第二个文件,2.py,然后add,commit,push,
3,第二天到了公司,公司有一个1.py,现在怎么做???
现在要先把代码拉下来,可能会冲突,也可能会合并,
然后继续开发,3.py,然后add,commit,push, 4,这个时候到了家里,
执行命令:git fetch origin dev,这个也是拉代码,但是没有1.py,3.py,因为这个时候还没有到本地,是从远程到了本地的工作区,
执行命令:git merge origin/dev,现在要从工作区拿回来,origin/dev这是固定搭配, 总结:
git remote add origin github地址
git clone github地址
git push origin dev
-------这一句相当于两句
-------git fetch origin dev
-------git merge origin/dev,这种会出现分叉,你可以把这一句命令改成git rebase origin/dev就不会分叉了,
git push origin master
-------这一句相当于两句
-------git fetch origin master
-------git merge origin/master 5,从git GUI页面可以查看所有的提交记录,这是一个树形的,
如果你忘记提交,可能会有分叉, 面试题,git rebase的作用?
在家忘记提交,在公司,你如果使用 git push origin dev
或者git fetch origin dev和git merge origin/dev,会产生分叉的记录,
为了保持提交记录的整洁,你可以把这一句命令改成ggit fetch origin dev和git rebase origin/dev就不会分叉了
这是干净的记录, """

###############    git多人协同开发    ##############

"""
git多人协同开发:
多人协同开发:
1,首先是允许他人操作程序, 方式一:合作者模式
在github上,你可以克隆公开的所有的代码,但是你是不能提交的,如果你想要提交,就要在github里面,
进入项目,在项目下有一个settings里面,有一个Collaborators,合作者,然后添加github账号,
然后对方会有收到一个邮件,然后点击就进入了,这是邮箱确认,然后拉下来代码,就可以进行提交代码,协同开发了, 方式二,创建组织模式
在github上面有一个加号,点击new organizations,这就是创建一个组,然后这个组,可以开发很多的项目,
填写组织名称,邮箱,免费,邀请组员加入组织,
然后组织里面有设置,有权限的设置,默认是读read,可以写write, 这就是进入公司之后,需要老板把你拉进来,然后协同开发,
问题:需要几个分支?
不同的人开发不同的功能,比如打车,配送,然后两个人开发,
假设A提交到了代码dev分支,然后B回去拉代码下来,会启动不起来,因为别人的代码没有开发完,你拉下来你跑不起来的, 所以如果有两个人开发,就需要四个分支了,master分支,dev分支,然后两个人各一个分支,
然后两个人从dev拉下来代码到各自的分支,然后把各自的代码开发完了,
两个人先合并,或者两个人都合并到dev,所以各自有各自的分支, 到了公司拉下来dev分支代码之后,创建自己的分支,你就管你自己的分支就可以了,
代码提交到自己的分支,这个时候github上面就有各自的分支了, 场景:各自提交到各自的分支
1,touch 打车.py
2,git add .
3,git commit -m '打车开发一半'
4,git push origin liqian ##这一步推送之后,github就有自己的分支了,
也可以没有个人分支,就在自己的本地保存,但是有了个人的分支,每天提交,组长就会检查他的代码进度了, 场景:两个人都开发完了,合并到dev,
1,A现在切换到dev分支,
git checkout dev
git merge A 这是把我的分支合并到dev分支,
git push origin dev,这是推送到远程,
2,B现在切换到dev分支,
git checkout dev
git merge B 这是把B分支合并到dev分支,
git push origin dev,这是推送到远程,这个时候会报错的,
因为现在的dev 分支已经有比你现在的dev分支更加新的代码了,提示想要把代码拉下来,
error :git pull before pushing again,
所以一旦你看到了这个错误,你就要意识到,你需要先拉下来,然后才可以push,
git pull origin dev,
这个时候可能会有冲突的,可能会产生很多的冲突,只要相同地方的代码就会有冲突,
如果产生了1000个冲突,怎么办?这个地方就是合并冲突,就只能一个一个解决了,这个时候只需要合并,没有冲突
然后你拉下来之后就可以push代码了,
git push origin dev,
协同开发就会出现这样的问题! 问题:这个流程有问题,因为每一个人都想要第一个提交,因为第一个提交没有冲突,
但是如果很多呢,一般来讲公司会做出规定,因为会给你规定你就修改这几个文件,这样冲突会比较少,
但是再怎么规定,也是会产生冲突的,怎么办?
如果产生了冲突,会导致公司内部不和谐,所以公司在合并的时候,
1,所有的人都要在,
2,合并间隔的时间不能太长,如果两周合并一次,冲突就很多,三两天合并一次还可以,冲突少,解决方便,
其实这个时间没有什么硬性规定,一般是一两天,一个小功能开发完了,没有什么bug了,就可以合并了,
如果一个人的代码有bug,不能合并,就其他人先合并, 这就是两个非常重要的规则, 如果一个新人写的代码,你的老板就会先看一遍,你今天提交了代码,然后第二天发现代码不见了,你就要心慌了,
因为你的代码太烂了,被老板删了,或者重写了,很多人都有过这个经历,这就是老板review代码,
这是组长要做的,或者带新人的老人来做,老板一般没有时间做, 面试题:怎么review?
可以创建一个review的分支,然后把新人的代码不要提交到dev,先提交到review分支,然后都过一遍,
很多时候不报错,但是也会有问题,就要人工审核, """

###############    git版本控制之fork,和其他    ##############

"""
git版本控制之fork, 程序员开发了功能之后,想要干什么?可能想要接私活,过了两年你可能想要接私活,你可以去做培训,参加一些研讨,
你可以看看github上面的源码,提高一下自己,找几个朋友做一个开源的项目,可以是技术类的,可以开发一个python中的模块,
然后给别人来用,你就是一个开源项目的创始人了,你的简历里面就是可以写你是一个开源项目的创始人,写上地址,你就厉害了, 发起一个项目,每周末去咖啡厅写代码,好多公司都在用,持续维护一定会特别棒,你拿到优秀的代码去读,
你就可以发现bug,一定可以发现bug,如果你能发现django的bug你就厉害了,django的源码就在GitHub上,
假设你发现了django的源码的bug,你怎么通知他们,你把django代码拉下来之后,你是不能提交改动的,
比如你点击fork,你就把这个代码copy到自己的仓库了,fork的地方就+1了,fork的次数越多,你的代码越受到欢迎,
你fork了之后,你就可以修改了,不会影响到原主人的代码, 这个时候发现了django代码的bug,你怎么通知他们?
new pull request,创建一个create new request,你就可以提交了,这就给对方发送过去了,
然后对方需要同意,但是对方需要检查是不是恶意的,只要对方同意了,就会有我修改的代码了, 面试题:如果你要在github上给别人的代码添加功能,
先fork,
然后pull request,同意了就添加了我修改的代码了, ################################################## 其他:
1,不用反复输入用户名和密码: 第一种方式:https的方式:通过地址里面添加用户名和密码来解决这个问题:
git remote add origin https://用户名:密码@github.com/liqian08161992/luffy.git
但是这种不太好,这种把用户名和密码暴露了, 第二种方式:使用ssh的方式,
使用git,进入项目根目录,然后输入:ssh-keygen.exe
一直回车,就会保存了,地址: (/c/Users/thinkpad/.ssh/id_rsa):
进入这个目录,/c/Users/thinkpad/.ssh
你会看到两个文件,id_rsa id_rsa.pub ,一个私钥,一个公钥,
然后你复制公钥,放到上面,你就可以不用加用户名密码了, 2,如果你不需要git管理项目中的一些文件了,怎么办?
你在项目根据目录下面,新建一个文件,vim .gitignore,这个文件需要push上去,
打开这个文件,然后加入
*.sql
*.pyc (这是py文件的编译文件,)
然后保存退出,你以后修改了这种文件,git status的时候就不会检测到这个文件了,git不管了, 3,django在github上面有不同的版本,
我们怎么创建版本?
在本地执行命令,git tag -a v1.0 -m "初次创建第一个模板"
在执行命令,git push origin --tags,这样你在github上面就有一个版本了, """

###############    git工作流程    ##############

"""
工作git使用流程: 项目经理:
项目之初,项目经理搭建项目的框架,
建完框架之后,项目经理把项目框架代码放到服务器, 普通员工:
在自己的电脑上生成ssh公钥,然后把公钥交给项目经理,然后项目经理给你添加到服务器上,
项目经理给你每一个组员一个克隆地址,然后你把代码克隆到本地,
你可以在本地创建一个分支,然后每天在这个分支开发,
每一个员工把自己的完成的代码,发布到远程的dev分支上,
一般项目中都会有两个分支,一个master分支,一个dev分支,
master分支保存要发布的代码,
dev分支保存开发过程中的代码,所有的组员开发完自己的代码都要发到这个dev上
你不能每次开发一点都发布到dev上去,因为别人要下载这个项目,如果你没开发完,你就发上去了,别人下载了,可能会跑不起来的,
项目经理给你任务,预计几天完成,到时间了, 会问你有没有完,完了就可以推代码了, """

最新文章

  1. 使用vlc进行二次开发做自己的播放器
  2. 【Kylin实战】邮件报表生成
  3. 6个函数的output看JS的块级作用域
  4. push splice filter用法
  5. 【61测试】【dp】【二分】【前缀和】【树剖】
  6. Purchase购物车实例分析
  7. Eigen库实现简单的旋转、平移操作
  8. UVa 10361 Automatic Poetry
  9. Python读写文件需要注意的地方 2015-03-31 23:19 69人阅读 评论(0) 收藏
  10. Android Fragment详解(四):管理Fragment
  11. 使用Dropbox+Justwriting+Markdown建立个人博客
  12. 329 experience
  13. mysql查询相关问题
  14. 【sql小坑】在group by里用select字段的别名?
  15. avalon 双向绑定在新版chrome中不能同步中文输入
  16. 学习电脑编码utf-8,ansi编码的基础知识等
  17. 2018/04/04 PHP 中的 数组排序问题
  18. 分享chrome清空缓存开发小技巧
  19. 基于jQuery的软键盘
  20. redis在windows上安装+RedisDesktopManager

热门文章

  1. 面向对象变成(OOP)-创建类和使用类
  2. Q6:ZigZag Conversion
  3. Q8:String to Integer (atoi)
  4. HTML5 之 简单汇总
  5. opencv显示图像
  6. Linux(CENTOS7) Nginx安装
  7. 微信官方小程序示例demo 微信开发者工具打开不显示云开发按钮
  8. Java 二维数组,排序、切换顺序,查表法二进制十进制,这班查找、排序(冒泡、选择)、遍历,获取最大小值(4)
  9. LINUX的ssh免密码配置
  10. Spring Cloud Alibaba 教程 | Nacos(六)