一个版本控制工具,可以记录代码的历史版本。

版本控制工具主要分为:

  1. 集中式 (SVN)
    1. 服务器上每次存储的都是版本之间的差异,需要的硬盘空间相对小一点,但是回滚的速度会很慢
    2. 代码存放在单一的服务器上 便于项目的管理
    3. 若服务器宕机 则之后写的代码得不到保障;若服务器炸了 则项目历史记录会丢失
  2. 分布式 (git)
    1. 服务器上每次存的是项目的完整快照(索引),需要的硬盘空间会相对大一点(因为会压缩,所以大不了太多),回滚速度很快
    2. 所有版本信息全部同步到本地的每一个用户。
    3. 分支切换快、容量小、完全分布式、强力支持非线性开发模式、设计简单

安装
在任意位置右键,有Git GUI 和 GitBash
在 Git Bash 中使用 git --version查看安装的版本

开始
使用 git config --global user.name "名字" 设置自己的名字
使用 git config --global user.email "邮箱" 设置自己的邮箱,两个都要配置,不然之后 commit 提交不了
若进行配置时在--global处替换为其他命令,则会有其他效果

  • --system是系统级配置,针对于所有用户的普遍配置
  • --global是用户级的配置,适用于该用户
  • 省略,项目级的配置,仅针对当前项目有效

基础的linux命令

clear 清除屏幕
cd 目录名 改变目录
cd .. 跳到上一级目录
touch 文件名 在当前目录下新建一个文件
mkdir 目录名 新建一个文件夹
echo 'test content' 往控制台输出信息
echo 'test content' > test.txt 向(新)文件中写入信息
ll 将当前目录下的子文件&子目录平铺在控制台
find 目录名 将对应目录下的子孙文件&子孙目录平铺在控制台,./是当前目录
find 目录名 -type f 将对应目录下的文件平铺在控制台
rm 文件名 删除文件
mv 源文件 重命名文件 重命名,若在子目录中,对应的路径也要写完整
cat 文件的url 查看对应文件的内容
vim 文件的url(在英文模式下)
i进插入模式进行文件的编辑
esc键&按:键进行命令的执行
q! 强制退出(不保存)
wq 保存退出
set nu设置行号

区域

  1. 工作区 working directory

写代码的地方

  1. 暂存区 stage/index

在代码的编写过程中,会进行许多中间步骤之后,才会更新到仓库中,暂存区中就存放这些中间步骤

  1. 版本库 repository

存放各版本

  1. 远程仓库 remote

image.png

对象

  1. git 对象

kay: value 组成的键值对,自动为内容生成一个 hash 作为该内容的键。

  • 将基本数据交给git echo 'content' | git hash-object -w --stdin
    • -w 即写入,若省略,则只返回一个哈希值
    • 给content自动生成一个hash值,并在object目录中新建一个目录。
    • 通过键值对来拉趣内容 git cat-file -p 哈希键
  • 将文件交给git git hash-object -w filename
    • 同样命令查看内容

一个文件修改之后,若想保存在git中,需要再执行一次hash-object
项目中的不同文件会被存储在不同的键值对中,并不代表项目的一个快照

  1. 树对象
  1. 提交对象

项目搭建

image.png

初始化

方式一:
在项目目录中右键,Git Bash Here,键入 git init,会在目录中自动创建一个.git文件
image.png
objects目录 存储所有数据内容
refs目录 存储指向数据(分支)的提交对象的指针
HEAD文件 指示目前被检出的分支
index文件 保存暂存区信息

方式二:
克隆一个远程仓库
git clone [url],url 从 github或gitee上复制ssh下来,注意 要设置ssh公钥
设置SSH公钥

  • 进入目录C:\Users\用户名\.ssh,如果没有这个目录,则可以直接在bash里面创建
  • 在该目录中,在 bash 上面键入命令 ssh-keygen -t rsa,一路回车下来
  • 自动在目录中创建两个文件,打开id_rsa.pub文件,复制里面的内容到gitee里面的公钥框,OK
  • 之后克隆时,我好像还是输入了账号密码

PS:我直接复制GitHub的仓库的https,可以直接克隆下来。没有gitee那么麻烦

使用

  1. git status 查看项目状态
  2. git add .将目录中的所有文件添加到暂存区
  3. git commit -m "描述信息吧" 将暂存区中的东西提交到库中

忽略文件
在项目中的.gitignore文件中,添加不被放进git中的文件或文件夹

  • #为注释
  • * 代表多个字符,? 代表一个字符。*.txt 表示所有的 txt 文件
  • ! 取反,不被忽略
  • 如果名称的最前面是一个路径分隔符/,表示要忽略的文件在此目录下,而子目录中的文件不忽略
  • 如果名称的最后面是一个路径分隔符/,表示要忽略的是此目录下该名称的子目录,而非文件 。。。。。这两点不太懂

在vscode上与github关联

  1. vscode的这个图标表示分支,image.png,在安装了git之后,点击这个图标,就可以选择初始化项目或者发布到github

image.png

  1. 我在初始化前,把当前总目录调整到最近的项目,避免出错。
  2. 点击初始化存储库,项目中可以提交到git的文件与文件夹就在该栏中显示了,再点击上面的一个 √,应该相当于把更改暂存早暂存区吧
  3. 再点击···中的推送,跳出提醒消息,选择添加远程,从GitHub添加,…….,对应按提醒操作,
  4. 两者关联之后,再推送,好像可以之间搜索到自己github的库,但是我没有搜到,直接输入了一个新的名字,就自动创建了一个新的私有库,然后本地项目就被提交到远程库中了
    1. 点击 推送到,选择已有的一个仓库,之后又要求输入一个远程库的名字(搞不懂为啥),我输入的名字和选择的那个库名字一样,再推送,就可以了推到已有库中,但是得注意一下推送时的分支名字,有的默认叫main 有的叫 master,名字不同的话代码就不在一起了。
  5. 更改项目文件,再点击 √,点击推送,就可以更新了。

用指令来托管到github

  1. git remote add origin [url] # 建立联系
  2. git push -u origin master # 推送上去

在idea上与github关联

  1. 打开IDEA—>File—>settings—>version control—>git, 选择安装好的Git路径(…./bin/git.exe),点击后面的 Test,会自动测试安装的git的版本
  2. 再在version control下的 github中,添加账号,以token的形式添加
    1. 网页中登录自己 github 账号,选择 user —> settings —> developer settings —> personal access tokens —> 点击 generate new token,打钩的地方全选,会需要输入密码,生成后,复制token
    2. 在idea的login出,选择token登录,粘贴进去,就OK
    3. 在一段时间没有在idea用git后,可能会出现push失败的情况,需要重新登录。
  3. 之后就可以直接在 idea 中 push 代码进 github,应该该项目本来就被 git 管理,且是从之前的电脑中复制过来的(之前就已经和github建立过连接的),所以这次一下就好了