Git

Git介绍

Git是一个开源的分布式版本控制系统(VCS:Version Control System),Github就是一个基于Git的代码托管平台

有什么用

  • 公司内多人协同开发,或者用SVN(Subversion),CVS(Concorrent Version System),好一点的公司会用gitlab自己搭建服务器
  • 统计工作量(commit了几次)

使用分类

  • Git Bash:Linux风格命令行
  • Git CMD:Windows风格命令行
  • Git GUI:图形界面的Git

版本控制分类

本地版本控制

顾名思义,每修改一次就另存为一个新文件,适合个人

集中式版本控制

所有版本数据都保存在单一服务器上,有安全风险,服务器一崩所有数据都会丢。代表:SVN,CVS,VSS

分布式版本控制

所有版本数据全部同步到本地的每个用户,只要有一个用户的设备没问题就可以恢复所有数据,但增加了本地存储空间的占用。有的公司不使用git就是为了防止员工拿着代码跑路。代表:Git(用来代替商业的BitKeeper),早期是为了辅助Linux,仅仅花了两周时间就成功开发

Linux常用命令

命令格式:command [-options] [parameter]

  • cd ..(change directory)返回上级目录
  • touch index.njk新建文件,rm删除(还挺方便的嘞
  • clear清屏,cmd是cls
  • ls(list)查看当前目录下的内容
  • pwd(print work directory)查看当前工作目录
  • mkdir "title"新建目录,rm -r "title"删除,-r表示递归地删除目录下的内容,删除文件夹时必须加此参数。-f表示强制删除
  • mv "文件" "目录"移动文件
  • history查看历史命令,exit退出

Git基本理论(核心)

工作区域

Git在本地有三个工作区域:

  • 工作目录(Working Directory),有个隐藏文件夹.git,包含了Index和Repository(版本信息),初始化仓库时自动创建
  • 暂存区(Index/Stage)
  • 资源库(Repository/Git Directory)

Git原理

如果再加上远程的git仓库(Remote Directory),就是四个工作区域

文件状态

  • Untracked:此文件在文件夹中,但并未加入git库,不参与版本控制,通过git add状态变为Staged

  • Tracked:指Git跟踪的文件,在版本控制历史中有记录,可以分为以下两种状态:

    • Staged:下一步就是提交
    • Modified:文件内容已更改,但未被提交
  • Committed:表示文件已经被提交到仓库中,成为历史记录的一部分

实践

本地仓库搭建(建议不含中文)

  • 新建项目目录,运行git init
  • 克隆远程仓库 git clone [URL](URL是指地址栏内容+.git
    • 只会clone默认分支,其他分支保持隐藏状态
    • git branch -a(all)查看所有分支
    • git checkout "branch-name"切换

文件添加至暂存区

git add .表示添加所有文件,git add filename添加指定文件

查看文件状态

  • git status查看所有文件状态,git status filename查看指定文件状态

提交到本地仓库

  • git commit -m "message"提交暂存区中的内容到本地仓库(.git目录下),-m表示提交说明。每个commit都有一个唯一的哈希值,由提交的内容和元数据计算而来

有时不想把一些文件纳入版本控制中,如临时文件、日志文件、包含的敏感信息(API密钥)、第三方依赖库,下面介绍gitignore

.gitignore

在此文件中列出需要忽略的文件和目录,Git会在进行版本控制操作时自动忽略这些指定的内容。格式很简单,每行列出一个要忽略的文件或目录的模式,这些模式可以是文件名、目录名或通配符:(去学正则表达式

1
2
3
4
*.txt            # 忽略所有 .txt 文件
!lib.txt # 但 lib.txt 除外
node_modules/ # 忽略 node_modules 目录及其内容
config.json # 忽略特定文件 config.json

补充.github/.gitee文件夹

是用来存放Github/Gitee特定配置文件和资源的文件夹,如一些与仓库操作、社区互动以及自动化流程相关的文件和设置,不会直接影响到代码,而是用于管理项目和协作

Push到远程仓库

  • git remote add origin "url"关联远程仓库
    • git remote是用来操作远程仓库的命令,add是其一个选项,表示添加一个新的远程仓库进行关联
    • origin理解为远程仓库的名字(在Git中,每个远程仓库都可以被赋予一个名称。同时因为clone时默认的名字就是origin,是一种约定俗成的名称),可以自己指定其他名称,并使用相应的名称在git push等命令中指定要操作的远程仓库
    • 那么就说明本地仓库可以关联多个远程仓库
      • 使用git remote add添加新仓库
      • git remote -v查看当前已关联的远程仓库
      • 如果想更改的话,运行git remote set-url origin "new url"表示:新的url地址用于替换名为origin的仓库

注意:以上的配置信息都保存在.git目录下的config文件中,也可以直接去编辑文件

其他命令

  • git pull是以下两个操作的组合:
    • git fetch获取远程仓库的更新,但不会自动合并到当前分支
    • git merge将获取的更新合并

示例:git pull gitee b拉取远程仓库gitee的b分支,合并到当前分支

自动化

将以下命令放在批处理文件(.bat)文件中,每次更新只需双击运行即可

1
2
3
4
5
6
7
8
hexo -clean
hexo -g
cd public
git init
git add .
git commit -m <message>
git remote add gitee https://gitee.com/lanan23/gitstudy.git
git push gitee master:<dst>

在cmd窗口中,运行hexo clean会报错:hexo : 无法加载文件 C:\Users\Admin\AppData\Roaming\npm\hexo.ps1,因为在此系统上禁止运行脚本。,权限问题,以管理员身份运行就可以。方法:输入cmd后,按下Ctrl + Shift + Enter即可,然后直接输入D:进入D盘,再cd D:\Personal\Blog\Hexo\Cx330就可以在cmd中运行辣