Git&Gitee

Git

Git&Gitee

Git介绍

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

安装

👉Git (git-scm.com)

👉Git – Downloads (git-scm.com)

命令学习

👉Learn Git Branching (gitee.io)

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

Git&Gitee

Git的作用

  1. 对文件(代码)进行版本管理
  2. 完成协同开发 项目,帮助程序员整合代码
  3. i)帮助开发者合并开发的代码
  4. ii)如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突

git与svn比较

git 分布式管理:每个客户端都能完成版本管理的功能
svn集中式管理:所有代码都放在服务端,版本管理由服务端完成

Git&Gitee

Git&Gitee
Git:分布式,无网络时也可以提交到本地版本库,待到有网络时再push到服务器.

svn:非分布式,无网络不可以提交

Git,GitHub,GitLab,Gitee

Git:是一种版本控制系统,是一个命令,是一种工具。

GitHub:是一个基于Git实现的在线代码托管仓库,包含一个网站界面,向互联网开放,公有仓库免费,部分私有仓库收费,全球最大的开源代码托管平台

GitLab:是一个基于Git实现的在线代码仓库托管软件,可以通过GitLab自己搭建一个类似于GitHub一样的系统,用在企业内部网络搭建Git私服,用于企业团队内部协作开发

Gitee:(码云) 是 OSCHINA 推出的代码托管平台,支持 Git 和 SVN,提供免费的私有仓库托管,面向互联网开发,分收费和付费,中国最大的开源代码托管平台

Git工作流程

Git&Gitee

本地分为三个区:工作区、暂存区、版本库

Git的工作流程就是三个区的来回切换:

  • 工作区(文件变红色):操作文件就能变红,比如增加内容等操作
  • 工作区提交到暂存区(文件变绿色): git add . 或文件名
  • 暂存区提交到版本库: git commit -m '注释',注释是必须加的
  • 版本库回退到工作区没有更改的时候: git reset --hard 版本号,版本号版本库有
"""
1)有红色信息(工作区有内容),就执行 add
2)全绿信息(内容全部在暂存区),才执行 commit
3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
"""

总结:工作区管理的文件发生变化会变色,变为红色,通过命令 git add . 提交到暂存区变绿,暂存区通过 git commit -m '注释' 提交到版本库

注意:只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本

Git常用命令

这里在 Desktop 建一个文件夹(gittest)给做示范:

Git&Gitee

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

Git&Gitee

在仓库目录终端下 – 设置全局用户

"""
>: 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&Gitee

查看状态

查看文件是处于工作区还是暂存区还是版本库

命令: git status

demo

这里创建一个a.txt文件随便写入点内容

Git&Gitee

工作区变化提交到暂存区

命令:git add .

demo:红色变绿色

$ git add .
$ git status

Git&Gitee

暂存区提交到版本库

命令: git commit -m 注释

Git&Gitee

查看版本库的版本信息

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

Git&Gitee

回退到工作区的某个版本

命令git reset --hard 版本

比如我们存几张妹子图,然后提交到版本库,再回退到刚提交a.txt文件的状态

Git&Gitee

Git&Gitee

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

Git&Gitee

恢复妹子图

Git&Gitee

Git&Gitee

Git&Gitee

其他命令

 其他,不需要太了解,基本不用
- 把工作区变化撤销
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版本管理

Git&Gitee

比如我们现在创建a,b,c,d.txt文件,q.py,test文件夹,来设置过滤文件

 C:\Users\32972\Desktop\gittest   master ± 
$ touch .gitignore

写入如下内容
$ cat .gitignore
/test
*.txt
q.py

Git&Gitee

我们可以发现这几个文件和文件夹被过滤掉了,不会被管理

后端项目的.gitignore

一般这些文件或文件夹需要被过滤掉

.idea
__pycache__
*.pyc
logs/*.log
scripts

分支操作

分支操作就是git 可以创建多条分支,创建完以后,在不通分支上提交版本,不同分支的版本相互不影响

Git&Gitee

分支操作常用命令

命令 说明 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

远程仓库-gitee

仓库的创始者,还是后期开发者

"""
1)你作为项目仓库初始化人员:
    线上要创建空仓库 => 本地初始化好仓库 => 建立remote链接(remote add) => 提交本地仓库到远程(push)

2)你作为项目后期开发人员:(大部分都是公司已经有项目了,你基于这个项目继续开发)
    远程项目仓库已经创建成功 => 复制远程仓库到本地(clone) => 进入仓库就可以进行接下来的开发
"""

创建仓库

Git&Gitee

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

  1. 创建空仓库,如上图
  2. Git 全局设置
git config --global user.name "用户名"
git config --global user.email "邮箱"
  1. 如果没有仓库,创建 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"
  1. 如果有仓库了
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

凭据管理:控制面板\用户帐户\凭据管理器

Git&Gitee

注意:要经常从远程仓库拉取代码,避免冲突

push到远程仓库,需要输入一次用户名和密码

SSH 连接远程仓库

官网:https://gitee.com/help/articles/4181#article-header0

Git&Gitee

上面连接到远程仓库采用的是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)自己确认添加,成为开发者,克隆开发项目,进行开发
"""

协同开发

协同开发中如何称为开发者?如何克隆项目?

一般都是项目的管理员邀请你称为开发者或者观察者···

Git&Gitee
"""
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&Gitee

解决冲突

代码冲突

当我们本地和远程仓库修改了相同位置得相同代码提交得时候就会出现冲突;

我们本地提交代码的时候需要将本地的代码更新到最新,所以需要先 git pull ··· ,然后再 git push···

出现冲突

Git&Gitee

只要我们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

Git&Gitee
提交pull request---》提交pr---》提个合并分支请求

提交pr---》你领导审核---》审核通过同意---》代码合并完成

本地某个分支加入了代码,提交到远端

在远端新建一个pull Request,选择要合并的两条分支---》提交了领导收到请求

看你的代码---》没有问题---》同意---》合并到分支中去,完成线上分支合并

变基https://www.cnblogs.com/liuqingzheng/p/15328319.html

搭建gitlab:https://zhuanlan.zhihu.com/p/413217715

Original: https://www.cnblogs.com/48xz/p/16184183.html
Author: HammerZe
Title: Git&Gitee

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/642920/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • netsh windows7 自带端口映射(转发)使用教程

    Original: https://www.cnblogs.com/zjoch/p/11129949.htmlAuthor: 遥望星空Title: netsh windows7 自…

    技术杂谈 2023年5月30日
    076
  • word输入罗马数字

    一、首先,打开Word文档程序,在程序主界面上方选择”插入”,点击打开。 二、然后,在菜单下选择”符号”,点击打开。 三、然后,在&…

    技术杂谈 2023年5月31日
    088
  • 耗时2天,我自制了一台体感游戏机

    大家好,欢迎来到 Crossin的编程教室~ 几天不见,Crossin 又去做什么游戏去了呢?这次我做的不是游戏,而是游戏机!而且是体感游戏机。 但往前几年,其实还有另一个非常火的…

    技术杂谈 2023年7月25日
    069
  • 字典服务的设计与管理

    编码问题,谁不想避其锋芒; 一、业务背景 在搜索引擎的功能上,曾经遇到过这样一个问题,数据库中某个公司名称中存在特殊编码,尽管数据已经正常同步到索引中,但是系统中关键词始终也无法匹…

    技术杂谈 2023年7月23日
    0102
  • 2022.13 三维运动追踪

    北京冬奥会主题歌演唱环节,几百个孩子手举发光的和平鸽在鸟巢中央奔跑,孩子跑过,脚下的屏幕随即亮起雪花。有人以为雪花是提前做出来的,有人以为地屏有触感,踩到就有反应。其实,这种实时交…

    技术杂谈 2023年5月30日
    077
  • vue-cli项目详细搭建过程

    一、安装 Node.js 10(选择自己需要的版本)运行 node -v查看版本,如果不是 10,请先卸载当前版本去 Node.js 官网下载10.12.0版的安装包,一路点击下一…

    技术杂谈 2023年6月1日
    069
  • Python3获取5000个元素的单字符表

    此前考虑过一个问题,有没有办法获取到python里面所有定义好的单字符的表,比如我们获取5000个不一样的单字符,但是常用的 chr(number)的方法里面包含了太多的非字母条目…

    技术杂谈 2023年7月25日
    064
  • TC插件管理器及在TC中新建文件

    新建文件 Shift+F4可以新建文件,但是会调用内置的编辑器来打开。 在设置中通过修改F4快捷键对应的程序来修改。 PS.F4编辑没找到根据扩展名来调用指定程序打开,可以F3中进…

    技术杂谈 2023年6月1日
    0111
  • AtCoder Beginner Contest 234

    AtCoder Beginner Contest 234 A – Weird Function 思路分析: 直接写就行 代码如下: #include using nam…

    技术杂谈 2023年7月24日
    070
  • window Form中使用Font Awesome z

    图标字体是矢量的,矢量图意味着每个图标都能在所有大小的屏幕上完美呈现,可以随时更改大小和颜色,而且不失真,真心给人一种”高大上”的感觉。由于Font Awe…

    技术杂谈 2023年6月1日
    080
  • delphi ListView 设置固定列宽

    object Form1: TForm1 Left = 0 Top = 0 Caption = 'Form1' ClientHeight = 772 Clien…

    技术杂谈 2023年5月31日
    081
  • Java同步容器之Vector源码分析

    一、简述 Vector的操作单线安全,加入了同步代码块,多线程安全(但不绝对),可以看成线程安全版本的 ArrayList(其实也不绝对,在使用还是会加锁操作)。 相比于 Arra…

    技术杂谈 2023年7月24日
    089
  • juniper 550M訪问自身公网IP回流内部IP

    拓扑图示意: 网关设备juniper 550M, untrust 区: 公网地址段22.22.22.22/29 trust区: 内部员工PC地址:172.16.4.x /24 tr…

    技术杂谈 2023年5月30日
    087
  • [转帖]vagrant打造自己的开发环境~~我也来一发

    404. 抱歉,您访问的资源不存在。 可能是网址有误,或者对应的内容被删除,或者处于私有状态。 代码改变世界,联系邮箱 contact@cnblogs.com 园子的商业化努力-困…

    技术杂谈 2023年5月30日
    085
  • EV录屏

    https://www.ieway.cn/evcapture.html EV录屏,简单易用的录屏软件 What Doesn’t Kill Me Makes Me Str…

    技术杂谈 2023年5月31日
    082
  • centos 7 快速安装 supervisor

    yum install epel-release yum install -y supervisor systemctl enable supervisord # 开机自启动 sy…

    技术杂谈 2023年5月30日
    067
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球