Git--(GitHub)

发布于:2023-02-18 ⋅ 阅读:(673) ⋅ 点赞:(0)

目录

1.版本控制

1.1 版本控制工具具备的功能

2.主流版本控制器

3.版本控制分类

4.Git与SVN区别

Git环境配置

1.基本命令

2.Git配置

2.1 Git相关配置

2.2 设置用户名与邮箱 (签名必要)

Git基本

1.三个工作区域:

2.工作流程

Git项目搭建

1.创建工作目录与常用指令

1.1 git本地常用命令

1.2 远程仓库(中央仓库)

1.3 可能使用的命令

2.本地仓库搭建

3.Git分支

3.1 分支命令

3.2 解决冲突

4.协同开发

4.1 协同开发解决冲突

4.2 新手开发

4.3 分支操作模式

Git文件操作

1.文件四种状态

2.查看文件状态

3.忽略文件

4.使用码云


1.版本控制

版本控制(版本迭代,新的版本),版本管理器

一种开发过程中用于管理对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前版本的软件工程技术

简单来说就是用于管理多人协同开发项目的技术

1.1 版本控制工具具备的功能

  • 协同修改

    • 多人并行不悖的修改服务器端的同一个文件

    • 数据备份

    • 不仅保存目录和文件的当前状态,还能保存每一个提交过的历史状态

  • 版本管理

    • 保存每一个版本的文件信息的时候要做到不保存重复数据,节约存储空间,提高运行效率;这方面SVN采用的是增量式管理的方式,而Git采取了文件系统快照的方式

  • 权限控制

    • 对团队中参与开发的人员进行权限控制

    • 对团队外开发者贡献的代码进行审核-----Git独有

  • 历史记录

    • 查看修改人、修改事件、修改内容、日志信息

    • 将本地文件恢复到某一个历史状态

  • 分制管理

2.主流版本控制器

  • Git

    1. 优势:

      • 大部分操作在本地完成,不需要联网

      • 完整性保证

      • 尽可能添加数据而不是删除或修改数据

      • 分支操作非常快捷流畅

      • 与Linux命令全面兼容

    2. Git在本地的目录结构

  • SVN

  • CVS

  • VSS

  • TFS

  • Visual Studio Online

3.版本控制分类

  1. 本地版本控制系统

    记录文件每次更新,对每个版本做一个快照,或记录补丁文件,适合个人用,如RCS

  2. 集中式版本控制系统

    所有版本数据都保存在服务器上,协同开发者从服务器上同步更新或上传自己的修改,需定期备份

    弊端:所有的版本数据都存在服务器上,用户的本地只有自己以前所同步的版本,如果不联网的话,用户就看不到历史版本,也无法切换版本验证问题,或在不同分支工作。而且所有数据都保存在单一的服务器上,有很大风险这个服务会损坏,这样就会丢失所有数据,如SVN、CVS、VSS

  3. 分布式版本控制系统

    所有版本信息仓库全部同步到本地的每个用户,这样就可以在本地查看所有版本历史,可以离线在本地提交,只需在联网时push到相应的服务器或其他用户,如Git

4.Git与SVN区别

  • SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而工作的时候,用的都是自己的电脑,所以先要从中央服务器得到最新版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统必须联网才能工作,对网络宽带需要较高

  • Git是分布式版本控制系统,没有中央服务器,每个人电脑就是一个完整的版本库,工作的时候不需要联网,因为版本都在自己电脑上,协同的方法是这样的:比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们俩之间只需把各自的修改推送给对方,就可以互相看到对方的修改

目前世界上最先进的分布式版本控制器

Git是免费、开源的,最初辅助Linux内核开发的,替代BitKeeper

Git环境配置

软件下载: Git,下载Git对应操作系统版本,所有东西下载慢找镜像

淘宝镜像:CNPM Binaries Mirror

  • 先卸载

    直接反安装即可,然后清理环境变量,环境变量只是为了全局使用而已,下载对应的版本即可安装,安装:无脑下一步即可,安装完毕即可使用

  • 启动Git

    安装成功后在开始菜单中会有Git项,菜单下有3个程序:任意文件夹下右键也可以看到对应的程序

Git Bash:Unix与Linux风格的命令行,使用最多,推荐最多;清屏clear

Git CMD:Windows风格的命令行;清屏cls

Git GUI:图形界面的Git,不建议初学者使用,尽量先熟悉常用命令

1.基本命令

cd 改变目录

cd.. 回退到上一个目录,直接cd进入默认目录

pwd 显示当前所在目录路径

ls(ll) 列出当前目录中所有文件,只不过ll(两个ll)列出的内容更为详细

ll 查看当前目录中的文件(只显示隐藏文件)

ll -A 查看当前目录中的文件(包含了隐藏文件和非隐藏文件)

touch 新建一个文件,如touch index.js,就会在当前目录下新建一个index.js文件

rm 删除一个文件,如rm index.js,就会把index.js文件删除

 $ git rm -rf /  #清理所有东西,递归清除,并且把所有东西删掉;相当于格式化系统  -r 递归  f 强制

mkdir 新建一个目录,就是新建一个文件夹

rm -r 删除一个文件夹,rm -r src 删除src目录

mv/move 移动文件,mv index.html src,index.html是要移动的文件,src是目标文件夹,必须文件夹在同一目录下

reset 重新初始化终端/清屏

clear 清屏

Ctrl+l 清屏

history 查看命令历史

help 帮助

exit 退出

cat .gitconfig 查看签名

cd ~ 家目录

vim 创建文件

  • git init 版本库初始化

  • git config 设置签名

    1. 项目级别签名

      • git config user.name 用户名

      • git config user.email 邮箱名

    2. 用户级别签名

      • git config --global user.name 用户名

      • git config --global user.email 邮箱名

  • git status 查看状态

  • git add 添加指定文件到暂存区

  • git rm 删除文件

  • git commit 将暂存区中的文件提交到本地库,注意该命令会有一个弹窗编辑器弹出,按下i键 则输入内容,如果备注输入完毕则按下esc键 → :wq

  • git commit -m '描述信息' 将暂存区中的文件提交到本地库,使用了-m后不会弹出编辑器

  • git log :查看历史提交记录,如果提交的记录过多则需要翻页,按 空格 :向下翻页 b:向上翻页 q:表示退出查看

  • git log --pretty=oneline : 格式化在一行内输出提交记录

  • git log --oneline : 格式化简化输出提交记录,显示一部分的hash值

  • 恢复历史

    • 用于显示日志信息 git reflog

    • 显示所有日志信息 git log reflog

    • 实现回退

      • git reset --hard 哈希值 根据hash值进行回退

      • 使用 git reset --hard HEAD~n 根据步数进行回退

#表示注释

2.Git配置

Git有三级配置,System、Global、工程目录,作用域依次减小,优先级依次升高

git config -l / --list 查看当前项目下配置

git config --system --list 查看系统配置

git config --global --list 查看当前用户(全局)配置

2.1 Git相关配置

  • Git\etc\gitconfig:Git安装目录下的gitconfig --system 系统级

  • C:Users\Administrator.gitconfig:只适用于当前登录用户的配置 --global 全局

这里可以直接编辑配置文件,通过命令设置后会响应到这里

2.2 设置用户名与邮箱 (签名必要)

安装‘Git后首先设置用户名和e-mail地址;因为每次Git提交都会使用该信息,它被永远的嵌入到提交中

  • 项目级别签名

     $ git config user.name "名称"
     $ git config user.email 邮箱号
  • 用户级别签名

     $ git config --global user.name "名称"
     $ git config --global user.email 邮箱号

只需做一次这个配置,如果你传递了--global选项,Git将总是会使用该信息处理你在系统中所做的一切操作。

希望在一个特定的项目中使用不同的名称或e-mail地址,可以在该项目中运行该命令而不要--global选项。

总之--global为全局配置,不加为某个项目的特定配置

Git基本

1.三个工作区域:

  • (工作区)工作目录(Working Directory):平时存放项目代码的地方

  • (暂存区)暂存区(Stage/Index):用于临时存放你的改动,实际就是一个文件,保存即将提交到文件列表信息

  • (本地库)资源库(Repository或Git Directory):安全存放数据的位置,有你提交到所有版本的数据,其中HEAD指向最新放入仓库的版本

加上下面这个,可以分为四个工作区域

  • 远程git仓库(Remote Directory):托管代码的服务器,简单认为是你项目组中的一台电脑用于远程数据交换

本地三个区域确切的说是git仓库中HEAD指向的版本

2.工作流程

  1. 在工作目录中添加、修改文件

  2. 将需要进行版本管理的文件放入暂存区域 git add . (添加到仓库,“.”表示全部)

  3. 将暂存区域的文件提交到git仓库 git commite

因此,git管理的文件有三种状态:已修改(modified)、已暂存(staged)、已提交(committed)

Git项目搭建

1.创建工作目录与常用指令

工作目录一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文

1.1 git本地常用命令

 #设置签名分为项目级别签名与用户级别签名
 #1.项目级别签名:在当前目录下设置
 $ git config user.name 用户名
 $ git config user.email 邮箱地址
 #2.用户级别签名:为当前电脑设置
 $ git config --global user.name 用户名
 $ git config --global user.email 邮箱地址
 ​
 #版本库初始化git文件
 $ git init
 #将指定文件从工作区添加到暂存区
 $ git add 文件名   
 #将当前目录中所有的文件添加到暂存区
 $ git add -A .
 #查看文件状态
 $ git status
 #提交暂存区中的内容到本地仓库  -m  提交信息
 $ git commit -m "提交信息"

1.2 远程仓库(中央仓库)

 #gitee(码云)中新建一个仓库,此时产生仓库的地址
 ​
 #git地址别名设置
 $ git remote add 地址别名名称 https的地址
 #查看项目的地址别名
 $ git remote -v
 #当工作区的内容有更改,则需要推送到中央仓库
 $ git add -A .
 $ git commit -m "描述"
 $ git push 地址别名 分支名

1.3 可能使用的命令

  • 日志查看

 #空格:向下翻页 b:向上翻页 q:退出查看
 $ git log
 #格式化在一行内输出提交记录
 $ git --pretty=oneline
 #格式化简化输出提交记录
 $ git --oneline
  • 回退历史

 1.查看历史回退的hash值
 $ git reflog
 ​
 2.实现回退
 #根据哈希值进行回退
 $ git reset --hard 哈希值
 #根据步数进行回退
 $ git reset --hard HEAD~n

2.本地仓库搭建

创建本地仓库的方法有两种:

  • 创建全新的仓库

     #在当前目录新建一个Git代码库
     $ git init      初始化文件
     ​
     #执行后可以看到在项目目录多出了一个隐藏.git目录,关于版本等的所有信息都在这个目录里面
  • 克隆远程仓库

    #克隆一个项目和它的整个代码历史(代码信息)
    $ git clone [url]
    
    #去gitee或者github上克隆一个测试
    

3.Git分支

3.1 分支命令

  • 查看分支:git branch -v

  • 创建分支:git branch 分支名

  • 切换分支:git checkout 分支名

  • 合并分支:git merge 分支名

3.2 解决冲突

  • 冲突:有两个分支,一个分支为master分支,另一个分支为good分支,对同一个文件进行修改,先提交的分支不存在冲突(因为先提交的和本地库的版本是相同的),后提交的会有冲突(因为后提交文件的版本和本地库的版本有偏差)

    1.两个分支分别是master分支和good分支,两个分支初始化的文件是相同的版本号,都针对test.txt文件

    2.在master分支下修改文件,然后→使用命令:git add . 添加暂存区→使用命令:git commit -m '提交本地信息'

    3.使用命令:git checkout 分支名 切换到good分支修改文件,然后→使用命令:git add . 添加暂存区→使用命令:git commit -m '提交本地信息'→使用命令:git merge 合并master(产生冲突)

    4.解决冲突:手动删除文件中属于冲突的标识符 <<<== head 哈希序列 =>

    5.将已经解决冲突的文件→使用命令:git add . 添加至暂存区→git commit -m '提交本地信息'→.使用命令: git checkout 分支名 切换至master分支→使用命令:git merge 合并good分支


4.协同开发

一个开发团队有多个人,协同开发一个项目时需要将所有人得代码进行整合

  • 推送:git push 地址别名 分支名

  • 拉取:git pull 地址别名

操作:

  • 一个账号(甲账号)推送一个项目到服务(已有的远程仓库,由甲账号创建爱你,并将项目设置为开源)

  • 另一个账号(乙账号)要克隆项目(在本地的目录选中使用git终端,在终端种输入克隆命令:git clone 项目https地址,仓库为开源的)

  • 在乙账号中使用:git vim test.txt 或者git touch test.txt 命令创建一个test.txt文件→git add . →git commit -m '描述' → git push 地址别名 分支名 (由于乙账号不在甲账号所创建的仓库成员中,所以需要使用甲账号邀请乙账号为团队成员)

  • 在甲账号中的目录下使用git pull 地址别名 分支名 进行拉取项目

4.1 协同开发解决冲突

  • 产生冲突:两个账号,使用甲账号修改内容,然后提交到远程仓库;使用乙账号修改同样的文件内容,然后提交到远程仓库

  • 解决冲突:修改文件→git add . → git commit -m ‘描述’ → git push 地址别名 分支名 → 如果有冲突 → git pull 地址别名 分支名 → 解决冲突 → git add . → git commit -m ‘描述’ → git push 地址别名 分支名

4.2 新手开发

  • 安装git

  • 设置签名

    • 项目级别签名

      git config user.name 用户名

      git config user.email 邮箱名

    • 用户级别签名

      git config --global user.name 用户名

      git config --global user.email 邮箱名

    • 克隆项目

      • 拿到git项目的地址,按照该地址将项目目录完整的克隆,使用命令: git clone

      • 注意:如果项目目录是克隆的,那么无需再配置地址别名,会自带地址别名等配置,也无需执行git init,因为会自带.git 隐藏目录

      • 地址别名相关命令

        • 查看地址别名:git remote -v

        • 添加地址别名:git remote add 地址别名 地址路径

    • 修改代码

    • 将修改的代码添加到暂存区,使用命令:git add . →提交到本地库,使用命令:git commit -m ‘描述’ →推送到远程仓库,使用命令:git push 地址别名 分支名 →如果有冲突,解决冲突→git pull 地址别名 分支名 → 解决冲突 → git add . → git commit -m ‘描述’ → git push 地址别名 分支名

    • 更新别人修改的代码

      • gei pull 地址别名 分支名

4.3 分支操作模式

在本地除了一个master分支作为主分支之外,然后再创建一个属于自己的工作分支

优势:如果有开发冲突,只需要在本地的工作分支和master分支进行解决即可

  • 创建工作分支,使用:git branch 工作分支名

  • 切换工作分支,使用:git checkout 工作分支名

  • 开发

  • 添加到暂存区,使用:git add .→提交到本地(该操作一定要在工作分支下完成),使用:git commit -m '描述'

  • 切换到master主分支,使用:git checkout master

  • 合并工作分支,使用:git merge 工作分支名

  • 将master分支推送到远程仓库,使用:git push 地址别名 分支名

Git文件操作

1.文件四种状态

  • Untracked:未跟踪,此文件在文件夹中,并没有加入到git仓库,不参与版本控制,通过 git add (添加到暂存区)状态变为 Staged

  • Unmodify:文件已经入库,未修改,即版本库中的文件快照内容与文件夹中完全一致,这种类型的文件有两种去处,如果它被修改,而变为 Modified ,如果使用 git rm 移除版本库,则成为 Untracked 文件

  • Modified:文件已修改,仅仅是修改,并没有进行其他操作,这个文件也有两个去处,通过 git add 可进入暂存 Staged 状态,使用 git checkout 则丢弃修改过,返回到 unmodify 状态,这个 git checkout 即从库中取出文件,覆盖当前修改

  • Staged:暂存状态,执行 git commit 则将修改同步到库中,这时库中文件和本地文件又变为一致,文件为 Unmodify 状态,执行 git reset HEAD filename 取消暂存,文件状态为 Modified

2.查看文件状态

#查看指定文件状态
$ git status [filename]

#查看所有文件状态
$ git status

# git add .			添加所有文件到暂存区
# git commit -m		提交暂存区中的内容到本地仓库  -m  提交信息

  • 工作中,一般会把代码放在工作目录下

 

3.忽略文件

前端项目中 npm_moudles 不用提交

有时候不想把某些文件纳入版本控制中,如数据库文件、临时文件、设计文件

在主目录下建立".gitignore"文件,此文件有如下规则

  1. 忽略文件中的空行或以#号开始的行将会被忽略

  2. 可以使用Linux通配符,例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等

  3. 如果名称最前面有一个感叹号(!),表示例外规则,将不被忽略

  4. 如果名称最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略

  5. 如果名称最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)

#为注释
*.txt		#忽略所有 .txt结尾文件
!lib.txt	#但lib.txt除外
/temp		#仅忽略项目根目录下的TODO文件,不包括其他目录temp
build/		#忽略build/目录下的所有文件
doc/*.txt	#会忽略 doc/notes.txt 但不包括 doc/server/arch.txt使用

4.使用码云

github是有墙的,需要翻墙;一般用gitee,公司有时候会搭建自己的git服务器

  1. 注册登录码云,完善个人信息

  2. 设置本机绑定SSH公钥,实现免密码登录(免密码登录,重要!!码云是远程仓库,平时工作在本地仓库)

    # 进入 C:Users\Administrator\.ssh 目录
    # 生成公钥
    ssh-keygen -t rsa  #-t rsa 加密算法 
  3. 将公钥信息public key 添加到码云账户中即可

  4. 使用码云创建一个自己的仓库

    • 新建仓库

    • 使用git clone 地址


网站公告

今日签到

点亮在社区的每一天
去签到