Git&Gitee
Git
Git介绍
Git是分布式版本控制系统,控制的对象是开发的项目代码
安装
命令学习
Learn Git Branching (gitee.io)
傻瓜式安装就可以了,然后安装完右击桌面查看,有Git Bash Here就说明装成功了

Git的作用
对文件(代码)进行版本管理
完成协同开发 项目,帮助程序员整合代码
i)帮助开发者合并开发的代码
ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突
git与svn比较
git 分布式管理:每个客户端都能完成版本管理的功能
svn集中式管理:所有代码都放在服务端,版本管理由服务端完成


Git:分布式,无网络时也可以提交到本地版本库,待到有网络时再push到服务器.
svn:非分布式,无网络不可以提交
Git,GitHub,GitLab,Gitee
Git:是一种版本控制系统,是一个命令,是一种工具。
GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台
GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发
Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台
Git工作流程

本地分为三个区:工作区、暂存区、版本库
Git的工作流程就是三个区的来回切换:
工作区(文件变红色):操作文件就能变红,比如增加内容等操作
工作区提交到暂存区(文件变绿色):
git add . 或文件名暂存区提交到版本库:
git commit -m '注释',注释是必须加的版本库回退到工作区没有更改的时候:
git reset --hard 版本号,版本号版本库有
"""
1)有红色信息(工作区有内容),就执行 add
2)全绿信息(内容全部在暂存区),才执行 commit
3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
"""
总结:工作区管理的文件发生变化会变色,变为红色,通过命令git add .提交到暂存区变绿,暂存区通过git commit -m '注释'提交到版本库
注意:只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
Git常用命令
这里在
Desktop建一个文件夹(gittest)给做示范:

使用的时候切到该文件夹的路径下

在仓库目录终端下 - 设置全局用户
"""
>: git config --global user.name '用户名'
>: git config --global user.email '用户邮箱'
注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用
"""
在仓库目录终端下 - 设置局部用户
"""
>: git config user.name '用户名'
-- 用户名
>: git config user.email '用户邮箱'
-- 用户邮箱
注:在当前仓库下的config新建用户信息,只能在当前仓库下使用
注:一个仓库有局部用户,优先使用局部用户,没有配置再找全局用户
"""
自行创建用户
初始化仓库
初始化会在当前文件夹下创建出一个
.git的隐藏文件夹,git配置,版本信息在里面。比如使用我们创建的gittest文件夹来初始化。
"""
>: cd 目标目录
>: git init 文件/文件夹
"""
demo
git init
'''
初始化仓库,会在当前文件夹下创建出一个.git的隐藏文件夹,git配置,版本信息在里面
'''

查看状态
查看文件是处于工作区还是暂存区还是版本库
命令:git status
demo
这里创建一个a.txt文件随便写入点内容

工作区变化提交到暂存区
命令:git add .
demo:红色变绿色
$ git add .
$ git status

暂存区提交到版本库
命令:git commit -m 注释

查看版本库的版本信息
git log: 查看版本信息,显示详细信息,变化记录的少git reflog:查看版本信息,显示简略信息,变化都会记录

回退到工作区的某个版本
命令:git reset --hard 版本
比如我们存几张妹子图,然后提交到版本库,再回退到刚提交a.txt文件的状态


再次查看,妹子图就没有了,这只是切换了状态,并没有删除

恢复妹子图



其他命令
# 其他,不需要太了解,基本不用
- 把工作区变化撤销
git checkout .
- 把暂存区拉回到工作区(绿变红)
git reset HEAD
注意 :
.git文件夹做了记录,不能删除,如果删除,版本的记录也就没了
空文件夹不会被版本管理
Git过滤文件
如果我们有一些文件或文件夹不需要被git版本管理可以这样处理:
在仓库路径下(被git管理的文件夹),创建一个 .gitignore 的文件,在文件中写入忽略,文件与文件夹均可以被过滤
文件过滤语法
""" 过滤文件内容
文件或文件夹名:代表所有目录下的同名文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
举例:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
/b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
"""
比如我们创建一个vue项目,本质是从github拉取了一个空项目,只是改成了你自己定义的名字而已,所以也自带了git版本管理

比如我们现在创建a,b,c,d.txt文件,q.py,test文件夹,来设置过滤文件
C:\Users\32972\Desktop\gittest master ±
$ touch .gitignore
# 写入如下内容
$ cat .gitignore
/test
*.txt
q.py

我们可以发现这几个文件和文件夹被过滤掉了,不会被管理
后端项目的.gitignore
一般这些文件或文件夹需要被过滤掉
.idea
__pycache__
*.pyc
logs/*.log
scripts
分支操作
分支操作就是git 可以创建多条分支,创建完以后,在不通分支上提交版本,不同分支的版本相互不影响

分支操作常用命令
| 命令 | 说明 |
|---|---|
| git branch 分支名 | 创建分支 |
| git branch | 查看分支 |
| git checkout 分支名 | 切换分支 |
| git checkout -b 分支名 | 创建并切换到分支 |
| git branch -d 分支名 | 删除分支 |
| git branch -a | 查看所有分支 |
| git branch -r | 查看远程分支 |
| git merge 分支名 | 合并分支 |
注意:
合并分支的时候是在
master主干合并,比如把dev分支合并到master分支,切换到master分支,执行合并dev分支的命令分支合并可能会出冲突,比如master主干改了代码提交了,dev改了代码提交了,他们改的是同一个代码,合并就会出冲突
demo
git checkout -b dev
touch dev.txt
git add .
git commit -m 'dev分支增加了dev.txt'
git checkout master
git merge dev
----------
git checkout dev
git add .
git commit -m 'dev分dev.txt增加了一行'
git checkout master
git merge dev
------
远程仓库-gitee
仓库的创始者,还是后期开发者
"""
1)你作为项目仓库初始化人员:
线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push)
2)你作为项目后期开发人员:(大部分都是公司已经有项目了,你基于这个项目继续开发)
远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发
"""
创建仓库

把本地代码提交到远程仓库
创建空仓库,如上图
Git 全局设置
git config --global user.name "用户名"
git config --global user.email "邮箱"
如果没有仓库,创建 git 仓库
mkdir luffy_api
cd luffy_api
git init
touch README.md
git add README.md
git commit -m "first commit"
git remote add origin https://gitee.com/li-gitte/luffy_api.git
git push -u origin "master"
如果有仓库了
cd existing_git_repo
git remote add origin https://gitee.com/li-gitte/luffy_api.git
git push -u origin "master"
注意:git push -u origin master 中-u的意思是,只要执行一遍这个命令,以后执行git push 就等同于git push origin maste,所有-u表示设置一个默认
remote源操作
# 1 查看远程仓库
git remote
#2 添加远程仓库
git remote add 起一个名字 远程仓库地址
git remote add origin https://gitee.com/li-gitte/luffy_api.git
# 3 删除远程仓库
git remote remove origin
# 4 把本地仓库提交到远程仓库
git push 远程仓库名字 分支名
# 第一次:要输入用户名密码,只要输入一次,以后就记录到操作系统上了
# windows:凭证管理,删除
git push origin master
# 5 从远端仓库更新(拉取)代码
git pull 远程仓库名字 分支名
git pull origin master
# 常用的命令
git add .
git status
git commit -m '注释'
git pull origin master
git push origin master
凭据管理:控制面板\用户帐户\凭据管理器

注意:要经常从远程仓库拉取代码,避免冲突
push到远程仓库,需要输入一次用户名和密码
SSH 连接远程仓库
官网:https://gitee.com/help/articles/4181#article-header0

上面连接到远程仓库采用的是https的连接方式,需要输入用户名和密码,如果想使用SSH连接方式,需要配置公钥和私钥,把公钥配置到远程机器(gitee、GitHub、gitlab··),私钥配置本地,我们就可以安全通信了,ssh采用的是非对称加密的方式
使用SSH协议,配置步骤参考官网就可以了,非常详细
注意,如果连接方式改变,需要删除原理的远程仓库,再次添加换成新的连接方式
git remote remove origin # 删除
git remote add origin git@gitee.com:li-gitte/luffy_api.git # 添加
git push oringin master # 提交
如何成为其他码云项目的开发者
如果公司项目已经存在,同事新入职,基于原项目开发
"""
1)生成自己电脑的公钥,配置到自己的码云个人公钥中
2)把自己的码云用户名提供给别人,别人添加你成为项目开发者
3)自己确认添加,成为开发者,克隆开发项目,进行开发
"""
协同开发
协同开发中如何称为开发者?如何克隆项目?
一般都是项目的管理员邀请你称为开发者或者观察者···

"""
1)作为开发者,第一次同步项目>: git clone 项目地址
2)保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建)
3)本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互
4)交互顺序:必须 先拉(pull)后提(push)
5)必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互
>: git checkout dev>: git add .
>: git commit -m '本次提交的信息提示'
>: git pull origin dev
>: git push origin dev
"""
克隆项目
命令克隆,切到要克隆到的文件夹下
git clone 地址
pycharm克隆

解决冲突
代码冲突
当我们本地和远程仓库修改了相同位置得相同代码提交得时候就会出现冲突;
我们本地提交代码的时候需要将本地的代码更新到最新,所以需要先git pull ···,然后再git push···
出现冲突

只要我们pull下来就会发现冲突,哪个文件冲突了文件名就会变红
会把远端冲突的代码合并进来
<<<<<<< HEAD # 冲突开始
HammerZe is big # 这里是我的代码
=======
HammerZe is tobig # 这里是远端代码
>>>>>>> e2d67d7517d66d244f824a32e20d4dd43f4ffc4d # 冲突结束
解决
# 查看代码,如果是同样的功能,选择保留同事的或自己的,如果是不同功能,两个代码都保留,如果真的要删同事的代码,交流抉择删除冲突代码,最终解决冲突
git add .
git commit -m '解决冲突'
git pull origin master
git push origin master
合并分支冲突
比如如果我们在主干master和开发分支dev增加或修改了相同的代码,这样再合并就会冲突
demo
git branch dev
# 加入会冲突的代码
git add .
git commit -m '主分支加入了一行'
git checkout dev
git status
# 加入会冲突的代码
git add .
git commit -m 'dev分支加入了一行'
git checkout master
git merge dev
# 出现下面冲突
<<<<<<< HEAD
HammerZe is big
=======
HammerZe is very big
>>>>>>> dev
解决办法和上面的一样,如果代码功能相同选择性删除另外分支的代码,如果代码功能不相同都保留或优化
# 手动解决冲突,再提交
git add .
git commit -m '分支合并冲突解决'
注意:正常情况,合并完分支,就把dev删除,继续开发,再重新创建dev分支
线上分支合并
提交PR

# 提交pull request---》提交pr---》提个合并分支请求
# 提交pr---》你领导审核---》审核通过同意---》代码合并完成
# 本地某个分支加入了代码,提交到远端
# 在远端新建一个pull Request,选择要合并的两条分支---》提交了领导收到请求
# 看你的代码---》没有问题---》同意---》合并到分支中去,完成线上分支合并
变基:https://www.cnblogs.com/liuqingzheng/p/15328319.html
搭建gitlab:https://zhuanlan.zhihu.com/p/413217715
Git&Gitee的更多相关文章
- Git错误:error:failed to push some refs to 'git@gitee.com:name/project.git'
大家在通过本地仓库上传文件到远程仓库时,会报出 error:failed to push some refs to 'git@gitee.com:name/project.git' 的错误. 解决方法 ...
- 【第十一篇】- Git Gitee之Spring Cloud直播商城 b2b2c电子商务技术总结
Git Gitee 大家都知道国内访问 Github 速度比较慢,很影响我们的使用. 如果你希望体验到 Git 飞一般的速度,可以使用国内的 Git 托管服务--Gitee(gitee.com). G ...
- 安装JDK+Eclipse+Maven+Git/Gitee(windows系统和linux系统)
1. 安装JDK 官网下载 下载java SE 下载 Java SE 7 1.1 windows配置jdk windows配置jdk 1.2 Ubuntu配置jdk Ubuntu 安装 JDK 7 / ...
- Python集成开发环境Pycharm+Git+Gitee(码云)
********************************************************************* 本文主要介绍集成开发环境的配置过程,方便多人协作办公.代码版 ...
- error: failed to push some refs to 'git@gitee.com:xxxx'
出现错误的主要原因是向上仓库的一些文件(README.md,LICENSE等文件)不在本地代码目录中 git pull --rebase origin master 通过这行命令, 可以解决 注释福利 ...
- git bash + gitee
使用Git Bash从Gitee上下载代码到本地以及上传代码到码云Git: https://www.cnblogs.com/babysbreath/p/7274195.html 指定克隆远端分支 ht ...
- git中的ssh和https方式的使用(gitee为例)
在使用git管理代码,或者使用github,国内的码云(gitee)的时候,有两种方式可以使用,分别是https和ssh,以下均使用gitee为例. ssh方式 配置ssh,如果不配置ssh的话,cl ...
- git推送已有项目到gitee
有时候会接收一个项目,这个项目已有git版本控制,但git 远端服务器地址已失效(员工离职,原先是推送到他个人gitee上的). 要按照如下步骤,将该项目推送到gitee. 1.先去gitee上新建一 ...
- 第一次Git使用以及码云(Gitee)
下载安装Git,官网下载地址https://git-scm.com/downloads,我用的是Win10版,下载好后一路默认安装,安装时会给你自动添加环境变量,完成后打开cmd,输入git --ve ...
随机推荐
- Snort中pcre和正则表达式的使用
Snort中pcre和正则表达式的使用 1. 题目描述 If snort see two packets in a TCP flow with first packet has "login ...
- MVCC多版本并发控制
MVCC多版本并发控制 爱情小傻蛋关注 82019.09.28 23:23:37字数 4,740阅读 91,421 前提概要 什么是MVCC 什么是当前读和快照读? 当前读,快照读和MVCC的关系 M ...
- XML文档约束有哪几种?有什么区别?
XML DTD(功能有限) XML Schema (功能强大) Schema本身是XML的,可以被XML解析器解析(这也是从DTD上发展schema的根本目的),Schema支持命名空间,Schema ...
- Java 语言如何进行异常处理,关键字:throws、throw、 try、catch、finally 分别如何使用?
Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口.在 Java 中,每个异常都是一个对象,它是 Throwable 类或其子类的实例.当一个方法出现异常后便抛出一 ...
- Spring-boot-菜鸟-properties配置
如果测试结果出现中文乱码: 结果": Person{lastName='张胜男', age=11, boss=false, birth=Wed Nov 11 00:00:00 CST 202 ...
- java的泛型hei
泛型是一种未知的数据类型,当我们不知道使用什么数据类型的时候就可以使用泛型 泛型也可以看出是一个变量,用来接受数据类型 E e :Element 元素 T t: Type 类型 /* Collecti ...
- vulnhub 靶机 Kioptrix Level 1渗透笔记
靶机下载地址:https://www.vulnhub.com/entry/kioptrix-level-1-1,22/ kali ip 信息收集 先使用nmap收集目标的ip地址 nmap -sP 1 ...
- ImportError: No module named 'Tkinter' [closed]
跑maskrcnn报错:UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot sh ...
- 微信小程序版博客——开发汇总总结(附源码)
花了点时间陆陆续续,拼拼凑凑将我的小程序版博客搭建完了,这里做个简单的分享和总结. 整体效果 对于博客来说功能页面不是很多,且有些限制于后端服务(基于ghost博客提供的服务),相关样式可以参考截图或 ...
- java中异常这种技术框架是怎么工作的?
异常这种技术框架是怎么工作的?马克-to-win:注意是运行程序时,而不是编译时,当一个非正常情况出现,比如除0,就叫异常情况.马克-to- win:为了能优雅的处理异常情况(在出现异常情况后,程序不 ...