【安装与介绍】
# 代码管理软件 -git -svn # 用来做代码管理 [文件管理] 1 帮助开发者合并开发的代码,协同开发 2 如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突 3 代码版本管理 -------------------------------------------- # git 与svn比较 svn:集成式管理,服务端挂掉就做不了版本管理,代码合并 git:分布式管理,服务端挂掉,本地还可以继续做版本管理,代码合并
git与svn比较
git的工作流程
2.Git 的下载
这个就需要去 Git 官网下载对应系统的软件了,下载地址为 git-scm.com或者gitforwindows.org,或者阿里镜像
上面的 git-scm 是 Git 的官方,里面有不同系统不同平台的安装包和源代码,而 gitforwindows.org 里只有 windows 系统的安装包
阿里镜像直接Ctrl+F 搜索最新版本前缀即可,如2.40.0
2.2 Git 的安装
我下载的版本是 Git-2.40.0-64-bit.exe,接下来我们就对这个版本进行安装工作。
————————————————
文章内容来自此博主原文链接:https://blog.csdn.net/mukes/article/details/115693833
双击下载后的 Git-2.40.0-64-bit.exe
,开始安装,这个界面主要展示了 GPL 第 2 版协议1的内容,点击 [next] 到第二步
选择安装组件
图中这些英文都比较简单,我已经把大概意思翻译出来了,大家根据自己的需要选择勾选。点击 [next] 到第四步
然后一路next到最后
。
。
这是安装成功后开始菜单里面的图。
【更详细的,我觉得比较好的一篇介绍,来自这个博主“:创建版本库 - 廖雪峰的官方网站 (liaoxuefeng.com)】
。
【git,gitee,gitlab】
1 Git:是一种版本控制软件,是一个命令,是一种工具。 2 3 ----- 4 GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台--》git的远程仓库 5 6 Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台 7 8 GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发
。
git使用流程
。
。
git常用命令
1 # 1 将已有的文件夹 - 初始化为git仓库 2 """ 3 >: cd 目标文件夹内部 4 >: git init 5 """ 6 # 2 在指定目录下 - 初始化git仓库 7 """ 8 >: cd 目标目录 9 >: git init 仓库名 10 """ 11 # 3 在仓库目录终端下 - 设置全局用户 12 """ 13 >: git config --global user.name '用户名' 14 >: git config --global user.email '用户邮箱' 15 16 注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用 17 """ 18 # 4 在仓库目录终端下 - 设置局部用户 19 """ 20 >: git config user.name '用户名' 21 -- 用户名 22 >: git config user.email '用户邮箱' 23 -- 用户邮箱 24 25 注:在当前仓库下的config新建用户信息,只能在当前仓库下使用 26 注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户 27 """ 28 # 5 查看仓库状态 29 """ 30 # 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看 31 >: git status 32 -- 查看仓库状态 33 >: git status -s 34 -- 查看仓库状态的简约显示 35 """ 36 # 6 工作区操作 37 # 通过任何方式完成的文件删与改 38 # 空文件夹不会被git记录 39 撤销工作区操作:改、删(了解) 40 """ 41 >: git checkout . 42 -- 撤销所有工作区变化 43 >: git checkout 文件名 44 -- 撤销某一文件的暂存区提交 45 """ 46 # 7 工作区内容提交到暂存区 47 """ 48 >: git add . 49 -- 添加项目中所有文件 50 >: git add 文件名 51 -- 添加指定文件 52 """ 53 # 8 撤销暂存区提交:add的逆运算(很少使用) 54 """ 55 >: git reset HEAD . 56 -- 撤销所有暂存区的提交 57 >: git reset 文件名 58 -- 撤销某一文件的暂存区提交 59 >: git reset . 60 -- 撤销所有暂存区的提交 61 """ 62 63 # 9 提交暂存区内容到版本库 64 >: git commit -m "版本描述信息" 65 66 67 # 10 其它 68 """ 69 回滚暂存区已经提交到版本库的操作: 70 查看历史版本: 71 >: git log 72 >: git reflog 73 查看时间点之前|之后的日志: 74 >: git log --after 2018-6-1 75 >: git log --before 2018-6-1 76 >: git reflog --after 2018-6-1 77 >: git reflog --before 2018-6-1 78 查看指定开发者日志 79 >: git log --author author_name 80 >: git reflog --author author_name 81 回滚到指定版本: 82 回滚到上一个版本: 83 >: git reset --hard HEAD^ 84 >: git reset --hard HEAD~ 85 回滚到上三个版本: 86 >: git reset --hard HEAD^^^ 87 >: git reset --hard HEAD~3 88 回滚到指定版本号的版本: 89 >: git reset --hard 版本号 (重点) 90 >: eg: git reset --hard 35cb292 91 """ 92 # 11 扩展阅读 93 # git log 和git reflog的区别 94 git log 命令可以显示所有提交过的版本信息 95 如果感觉太繁琐,可以加上参数 --pretty=oneline,只会显示版本号和提交时的备注信息 96 git reflog 可以查看所有分支的所有操作记录(包括已经被删除的 commit 记录和 reset 的操作) 97 98 99 # git reset --hard,--mix,--soft的区别 100 hard (硬)-> 全部删除,会彻底返回到回退前的版本状态,了无痕迹 101 mixed (中)-> 保留工作目录,文件回退到未commit的状态 102 soft (软)-> 保留工作目录、暂存区 ,文件会回退到未 add(未到暂存)的状态 103 总结: 104 soft是撤销commit的提交,但工作区未提交的更改还是保留; 105 mixed是撤销暂存区的提交,工作区的更改同样也保留; 106 而hard是把工作区、暂存区、commit到仓库的三个版本都回滚了
。
。
git忽略问题
1 """ 过滤文件内容 2 文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤 3 /文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤 4 5 例如: 6 a.txt:项目中所有a.txt文件和文件夹都会被过滤 7 /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤 8 /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤 9 *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符) 10 空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件) 11 12 13 注意: 14 # 以'#'开始的行,被视为注释. 15 # 忽略掉所有文件名是 lqz.txt的文件. 16 lqz.txt 17 # 忽略所有生成的 html文件, 18 *.html 19 # lqz.html是例外,不在忽略范围内 20 !lqz.html 21 # 忽略所有.o和 .a文件. 22 *.[oa] 23 24 """ 25 26 ********************************************* 27 我们的项目忽略文件 .gitignore(必须叫这个文件名) 28 .idea 29 *.log 30 *.pyc 31 __pycache__ 32 **/migrations/*.py 33 !**/migrations/__init__.py 34 .venv 35 scripts 36 db.sqlite3
。
。
git多分支
# 为什么要有分支 -可以保证,主分支的版本都是可以查看的版本 -我们都在开发分支开发,开发完成,合并到主分支 -一般公司都会有master主分支,dev开发分支,bug修复分支 # 分支操作: 1.创建分支 git branch 分支名 2.查看分支 git branch 3.切换分支 git checkout 分支名 4.创建并切换到分支 git checkout -b 分支名 5.删除分支 git branch -d 分支名 6.查看远程分支(列出所有分支,包含远程) git branch -a 7.合并分支 git merge 分支名 把dev分支合并到master分支:切换到master分支,执行合并dev分支的命令
。
。
git 远程仓库
1 远程: 2 1 远程要创建仓库:gitee上创建仓库,右上角 + 3 2 填一些信息,保证仓库是空的 4 5 本地: 6 1 安装远端提示的步骤操作 7 2 设置用户和邮箱 # 要设置和gitee的用户与邮箱一样 8 3 咱们是已有仓库 先 cd luffy_api 9 10 4 添加一个远程仓库,远程仓库地址名字叫origin,地址就是网址 11 git remote add origin https://gitee.com/towards-the-cloud/luffytest.git 12 13 5 把本地的版本库推送到远程仓库 14 # 把本地当前所在分支,推送到 origin对应的远程的master上 15 git push origin master 16 17 6 需要输入用户名密码,输入一次,以后就不用输入了 18 (因为本地保存了:windows里面有凭据管理)
。
。
。
【 ssh链接远程仓库】
1 # 输入了用户名密码------》才可以提交代码上去--------》 2 # 使用的是https的协议提交的代码-----它需要输入用户名和密码 3 4 --------------------------------------------- 5 --------------------------------------------- 6 7 # 咱们要使用ssh方案:需要公钥和私钥------》公司里这种方式多 8 私钥在本地保存 9 公钥配置到gitee上 10 以后再提交代码,不需要其他任何认证了,密码不用输了 11 12 13 # 生成公钥私钥操作步骤: 14 15 -1 在cmd命令窗口中执行 ssh-keygen -t ed25519 -C "1922517453@qq.com" 16 一路回车 17 -生成在:c/Users/靳小洁/.ssh 两个文件,一个公钥,一个私钥 18 19 -2 把公钥,配置在gitee上-----设置------SSH公钥 20 复制公钥粘贴到gitee的SSH公钥里面去 21 之前origin对应的地址是 https的, 22 现在要使用ssh提交代码,需要把它删除,再增加成ssh的协议 23 在命令行里面输入命令 24 git remote remove origin # 先删掉原来的hhtp地址名的origi 25 git remote add origin git@gitee.com:towards-the-cloud/luffytest.git 26 git push origin master 27 28 29 ********************************** 30 你进公司使用流程 31 -1 生成公钥私钥 32 -2 gitlab--》注册个账号--》别人帮你注册了:账号,密码,gitlab地址 33 -你领导会把你要开发的项目,你做成开发者 34 -3 拿着账号密码--》登录到gitlab上--》找到ssh配置,把你的公钥配置在gitlab账号上 35 -4 把项目拉取到本地: 36 git clone git@gitee.com:xxx/项目名.git 37 git add remote origin git@gitee.com:xxx/项目名.git 38 -5 正常写功能 39 git add 40 git commit 41 -6 推送到远端 42 git pull origin master# 协同开发,别人提交了代码--》通过这个拉去最新代码 43 git push orign master
。
。
协同开发
1 # 我[仓库管理员]创建了仓库,我对仓库有各种权限 2 3 # 我们要多人开发(张三,李四),张三李四在自己的仓库中,能看到我的项目吗?看不到 4 5 # 我[仓库管理员],把张三李四设置为该仓库的开发者,设置完成后, 6 # 在张三李四的仓库中就能看到这个项目了 7 8 ------------------------------------------------- 9 10 # 仓库管理员,邀请开发者进入 11 -邀请的开发者,对这个仓库就有读写权限,他们就可以开发代码,提交 12 13 14 # 开发者,本地没有代码,需要把代码从远程仓库拉下来 15 16 1 把代码从远程仓库 clone 下来 17 https://gitee.com/towards-the-cloud/luffytest.git 18 19 2 使用pycharm打开,配置好解释器,安装依赖 20 3 开发代码,开发完 21 git add . 22 # 设置用户名和邮箱,设置局部,在.git里面的config里面能看到 23 git config user.name xxx 24 git config user.email 1@qq.com 25 # 如果不设置,就用全局的C:\Users\靳小洁\.gitconfig 26 27 git commit 28 git push origin master # 开发者贡献代码后再推到远程仓库去!! 29 30 31 ------------------------------------------- 32 ------------------------------------------- 33 34 # 你刚去公司,你的步骤 35 1 自己注册,hr给你 gitlab 账号和密码 36 -自己去你的账号里,配置ssh 37 38 2 老大会把一个仓库地址给你 【它已经把你加成开发者了】 https ssh 39 40 3 clone下来代码,建个文件夹 执行命令 git clone 仓库地址 41 42 43 4 使用pycharnm打开,配置环境-------保证代码能运行起来 44 45 5 开发代码,本地提交---》push到远端 46 add 47 commit 48 push
。库管理员邀请开发者进入,可以直接用邮箱添加,也可以通过连接邀请
复制连接发给要邀请的人,别人点击就自动变成开发者了,
当然可以把需要管理员审核的框勾上
。
。
冲突解决
# 出现冲突的原因 1 多人在同一分支开发 2 分之合并出现冲突 ------------------------------------------- # 首先为什么要pull往下拉代码,因为你一开始从远程仓库克隆的代码 # 在加代码的过程中,可能别人也在一直往master主分支里面贡献代码 # 当你想将代码提交到远程仓库的时候,可能master已经被别人升了好几版了 # 这个时候你的master已经不是最新的了,你推不上去的!!! # 所以要你先将远程仓库最新的代码pull下来,自动与自己的代码合并 # 然后你才能再往远程的仓库上推!!!
1 # 多人在同一分支开发冲突 2 -张三: 3 git pull origin master 4 在requirements.txt,最后一行加入 lqz 5 git add . 6 git commit -m'' 7 git push origin master 8 9 ------------------ 10 -我: 11 在requirements.txt,最后一行加入 lqz 12 git add . 13 git commit -m'' 14 git pull origin master # 拉最新代码下来自动与自己代码合并 15 # 冲突了,代码飘红 16 # 解决冲突: 17 # 阅读代码,选择保留或删除别人或自己的代码, 18 # 去掉飘红的冲突的箭头, 再执行add commit 后 19 # 提交到远程仓库 git push origin master 20 # 这样你的版本就推上去了!!! 21 22 # 冲突出现的样子:你如果要删除别人的代码,你需要跟别人说一声 23 <<<<<<< HEAD 我的代码 24 print('刘亦菲') 25 ======= 它的代码 26 print('彭于晏') 27 >>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5 28 29 ----------------------------------------- 30 31 # 避免出现冲突!!!!!! 32 -你如果想少出现冲突,勤拉取代码 git pull origin master 33 保证自己代码是最新的 34 35 36 ========================================= 37 # 冲突出现的原因2,分支合并出冲突 38 -我: 39 1 创建dev分支 40 git branch dev 41 42 2 在dev分支的views.py 中第2行加入代码 print('heihei') 43 44 3 提交到本地仓库 45 46 -------------------------------------- 47 -我: 48 1 在主分支的views.py 中第2行加入代码 print('hahaha') 49 2 提交到版本库 50 51 3 在主分支合并代码 git merge dev 52 53 4 冲突了,看飘红的地方代码,解决飘红的地方,确认保留谁的或是都要 54 5 再提交代码,到此结束 55 56 ---------------------------------------- 57 总结就是: 58 59 如果主改了一个地方,支也改了同一个地方,支往主里面合并的时候 60 这个时候git不知道要保留谁的,就会出冲突提示你,去解决 61 但是如果主没变化,支增删改操作,支往主里面合并的时候,主也对应的改掉了 62 63 同理拉代码与自己代码合并的时候也是一样,你的文件没改, 64 拉下来的文件改了,一合并你的文件也改了,你的文件没删, 65 拉下来的文件删了一些代码,一合并你的对应的代码也删掉了 66 只有你的代码和拉下来的代码都改的同一个地方的时候, 67 git分不清要保留谁的,就会起冲突,提示你来解决
。
。
线上分支合并
#本地dev分支合并到本地master上
# 远程(线上)分支合并
#####本地和线上分支同步################
#### 远程创建分支,拉取到本地####
-远程创建分支,拉取到本地
-点点点创建
-在本地执行:
git pull origin # 拉下来,但是看不到,只有切进去才能看到
git checkout bug
###### 本地创建,推送到远端#####
-本地创建分支
git branch dev01
git checkout dev01 # 切到dev分支
git push origin dev01 # 把本地当前分支,推动到远端dev分支
# 线上分支合并
-本地dev01分支加入代码,本地提交,推送到远端
-在远端:完成分支合并
-把dev01代码合并到master中
-在远端提交pullrequets--》简称pr
-管理员同意即可合并
# 分支合并叫法
-1 pr #github,gitlab 简称
-2 gitlab:mr # merge request 的简称
gitee上,新建一个分支
。
。
【pycharm使用git】
1.1 先配置pycharm使用git
提交所有变化文件的操作
提交一个文件操作
确认操作,也是如果只点击文件,就是确认一个文件,
如果点击文件夹,就是确认文件下所有的变化
双击一下文件,就可以看到,版本变化,加个注释,点击确认
拉去最新代码与自己代码合并
本地仓库代码推远程仓库
点勾,可以直接跳过add 并且再点commit and push
就可以直接推到远程仓库去了
如果git的路径没有添加到环境变量,这里就需要
选择到 bin/git.exe 配置好git安装路径
右下角的分支操作按钮,点击想要切换到的分支,checkout ,就切换过去了
所有本地与远程的分支操作,都在左下角
新增 删除 修改 远程仓库地址的名字
代码的对比,能看到每次版本修改的地方
还可以让历史版本与当前版本作对比
查看用户提交的代码记录
使用pycharm快捷从git上克隆项目代码
.
。
。
。
为开源项目贡献代码
# github,gitee 看到好的开源项目, 发现有bug,为他增加新功能---》你加入了代码---》想合并进开源项目,如何做 # 步骤: 1 先fork开源项目--》复制这个项目到我的远程仓库中 2 clone下来,改代码,一路提交到我的远程仓库中 3 提交pr,等作者同意
先fork开源项目,到我的远程仓库中
clone下来,改代码,一路提交到我的远程仓库中 提交pr,等作者同意
。
。
。
【gitlab使用】
#1 如何搭建(运维) https://zhuanlan.zhihu.com/p/413217715 # 2 使用地址 http://192.168.1.252/ # 3 在公司里,基本都是用gitlab -超级管理员:你没有权限 -root -lqz123456 # 4 之前所有操作,跟操作gitee是一样的
。
远程仓库如果不为空
# 1 远端你仓库不为空 # 2 clone下来 git clone # 3 把我们项目的东西,除了 .git 以外,都复制过去 # 4 正常操作即可
。
。
git面试题
面试题 -1 你在公司使用git流程 -公司使用了git多分支 -master,dev,bug -开发新功能:大家都在dev开发,新功能开发完了,合并到主分支 -如果老版本有bug,开一个bug分支,修复bug---》修复完合并到主分支 -基于主分支这个版本:发布新版本 -一周左右一个版本 -具体一点:修改了代码,git add ,git commit ,git push 推送到远程仓库 -2 git pull 和 git fetch 有什么区别 -git pull = git fetch + merge -3 知道git flow (git 工作流),不建议面试的时候说 -git 的分支方案