Git

Git介绍

Git是分布式版本控制系统,控制的对象是开发的项目代码

安装

Git (git-scm.com)

Git - Downloads (git-scm.com)

命令学习

Learn Git Branching (gitee.io)

傻瓜式安装就可以了,然后安装完右击桌面查看,有Git Bash Here就说明装成功了

Git的作用

  1. 对文件(代码)进行版本管理

  2. 完成协同开发 项目,帮助程序员整合代码

    • 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) => 进入仓库就可以进行接下来的开发
"""

创建仓库

把本地代码提交到远程仓库

  1. 创建空仓库,如上图

  2. Git 全局设置

    git config --global user.name "用户名"
    git config --global user.email "邮箱"
  3. 如果没有仓库,创建 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"
  4. 如果有仓库了

    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的更多相关文章

  1. 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' 的错误. 解决方法 ...

  2. 【第十一篇】- Git Gitee之Spring Cloud直播商城 b2b2c电子商务技术总结

    Git Gitee 大家都知道国内访问 Github 速度比较慢,很影响我们的使用. 如果你希望体验到 Git 飞一般的速度,可以使用国内的 Git 托管服务--Gitee(gitee.com). G ...

  3. 安装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 / ...

  4. Python集成开发环境Pycharm+Git+Gitee(码云)

    ********************************************************************* 本文主要介绍集成开发环境的配置过程,方便多人协作办公.代码版 ...

  5. error: failed to push some refs to 'git@gitee.com:xxxx'

    出现错误的主要原因是向上仓库的一些文件(README.md,LICENSE等文件)不在本地代码目录中 git pull --rebase origin master 通过这行命令, 可以解决 注释福利 ...

  6. git bash + gitee

    使用Git Bash从Gitee上下载代码到本地以及上传代码到码云Git: https://www.cnblogs.com/babysbreath/p/7274195.html 指定克隆远端分支 ht ...

  7. git中的ssh和https方式的使用(gitee为例)

    在使用git管理代码,或者使用github,国内的码云(gitee)的时候,有两种方式可以使用,分别是https和ssh,以下均使用gitee为例. ssh方式 配置ssh,如果不配置ssh的话,cl ...

  8. git推送已有项目到gitee

    有时候会接收一个项目,这个项目已有git版本控制,但git 远端服务器地址已失效(员工离职,原先是推送到他个人gitee上的). 要按照如下步骤,将该项目推送到gitee. 1.先去gitee上新建一 ...

  9. 第一次Git使用以及码云(Gitee)

    下载安装Git,官网下载地址https://git-scm.com/downloads,我用的是Win10版,下载好后一路默认安装,安装时会给你自动添加环境变量,完成后打开cmd,输入git --ve ...

随机推荐

  1. VT 入门番外篇——初识 VT

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  2. 学习廖雪峰的Git教程1

    我是在Ubuntu上学习的,所以配置之类的进行的很快. 一.创建版本库 mkdir learngit cd learngit git init 用git init变成git可以管理的库 二.git a ...

  3. mysql 客户无感知迁移_亿级账户数据迁移,不用数据库工具还能怎么搞?

    原标题:亿级账户数据迁移,不用数据库工具还能怎么搞? 背景 在阿里巴巴内部"大中台,小前台"的组织和业务体制,使前线业务更加敏捷,赋能业务积极迎接未来挑战和机遇,在阿里大中台能力建 ...

  4. JVM知识(一) 求你了,别再说Java对象都是在堆内存上分配空间的了!

    求你了,别再说Java对象都是在堆内存上分配空间的了! https://baijiahao.baidu.com/s?id=1661296872935371634&wfr=spider& ...

  5. 什么是 Netflix Feign?它的优点是什么?

    Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序. Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其 ...

  6. ZooKeeper 面试题?

    ZooKeeper 是一个开放源码的分布式协调服务,它是集群的管理者,监视着集群 中各个节点的状态根据节点提交的反馈进行下一步合理操作.最终,将简单易用 的接口和性能高效.功能稳定的系统提供给用户. ...

  7. 什么是JDK?什么是JRE?说说它们之间的区别?

     JDK (Java Development Kit)  JDK是整个Java的核心,包括了Java运行环境JRE(Java Runtime Envirnment),一堆Java工具(javac,ja ...

  8. 什么是编织(Weaving)?

    为了创建一个 advice 对象而链接一个 aspect 和其它应用类型或对象,称为编 织(Weaving).在 Spring AOP 中,编织在运行时执行.

  9. Spring 的 jdbcTemplate 操作

    1.Spring框架是一站式框架 (1)针对 JavaEE 三层,每一层都有解决技术 (2)在 dao 层,使用 jdbcTemplate 2.Spring对不同的持久化层的技术都进行了封装 (1)j ...

  10. 错误问题之“Apache Log4j 漏洞,在版本为包含2.14以内!”

    漏洞概述 Apache Log4j是一个用于Java的日志记录库,其支持启动远程日志服务器. Log4j 1.2 中包含一个 SocketServer 类,该类容易受到不可信数据反序列化的影响,当侦听 ...