一个版本控制工具,可以记录代码的历史版本。
版本控制工具主要分为:
- 集中式 (SVN)
- 服务器上每次存储的都是版本之间的差异,需要的硬盘空间相对小一点,但是回滚的速度会很慢
- 代码存放在单一的服务器上 便于项目的管理
- 若服务器宕机 则之后写的代码得不到保障;若服务器炸了 则项目历史记录会丢失
- 分布式 (git)
- 服务器上每次存的是项目的完整快照(索引),需要的硬盘空间会相对大一点(因为会压缩,所以大不了太多),回滚速度很快
- 所有版本信息全部同步到本地的每一个用户。
- 分支切换快、容量小、完全分布式、强力支持非线性开发模式、设计简单
安装
在任意位置右键,有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
设置行号
区域
- 工作区 working directory
写代码的地方
- 暂存区 stage/index
在代码的编写过程中,会进行许多中间步骤之后,才会更新到仓库中,暂存区中就存放这些中间步骤
- 版本库 repository
存放各版本
- 远程仓库 remote
对象
- 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
项目中的不同文件会被存储在不同的键值对中,并不代表项目的一个快照
- 树对象
- 提交对象
项目搭建
初始化
方式一:
在项目目录中右键,Git Bash Here
,键入 git init
,会在目录中自动创建一个.git
文件
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那么麻烦
使用
git status
查看项目状态git add .
将目录中的所有文件添加到暂存区git commit -m "描述信息吧"
将暂存区中的东西提交到库中
忽略文件
在项目中的.gitignore
文件中,添加不被放进git中的文件或文件夹
#
为注释*
代表多个字符,?
代表一个字符。*.txt
表示所有的 txt 文件!
取反,不被忽略- 如果名称的最前面是一个路径分隔符
/
,表示要忽略的文件在此目录下,而子目录中的文件不忽略 - 如果名称的最后面是一个路径分隔符
/
,表示要忽略的是此目录下该名称的子目录,而非文件 。。。。。这两点不太懂
在vscode上与github关联
- vscode的这个图标表示分支,
,在安装了git之后,点击这个图标,就可以选择初始化项目或者发布到github
- 我在初始化前,把当前总目录调整到最近的项目,避免出错。
- 点击初始化存储库,项目中可以提交到git的文件与文件夹就在该栏中显示了,再点击上面的一个 √,应该相当于把更改暂存早暂存区吧
- 再点击
···
中的推送,跳出提醒消息,选择添加远程,从GitHub添加,…….,对应按提醒操作, - 两者关联之后,再推送,好像可以之间搜索到自己github的库,但是我没有搜到,直接输入了一个新的名字,就自动创建了一个新的私有库,然后本地项目就被提交到远程库中了
- 点击 推送到,选择已有的一个仓库,之后又要求输入一个远程库的名字(搞不懂为啥),我输入的名字和选择的那个库名字一样,再推送,就可以了推到已有库中,但是得注意一下推送时的分支名字,有的默认叫main 有的叫 master,名字不同的话代码就不在一起了。
- 更改项目文件,再点击 √,点击推送,就可以更新了。
用指令来托管到github
git remote add origin [url] # 建立联系
git push -u origin master # 推送上去
在idea上与github关联
- 打开IDEA—>File—>settings—>version control—>git, 选择安装好的Git路径(…./bin/git.exe),点击后面的 Test,会自动测试安装的git的版本
- 再在version control下的 github中,添加账号,以token的形式添加
- 网页中登录自己 github 账号,选择 user —> settings —> developer settings —> personal access tokens —> 点击 generate new token,打钩的地方全选,会需要输入密码,生成后,复制token
- 在idea的login出,选择token登录,粘贴进去,就OK
- 在一段时间没有在idea用git后,可能会出现push失败的情况,需要重新登录。
- 之后就可以直接在 idea 中 push 代码进 github,应该该项目本来就被 git 管理,且是从之前的电脑中复制过来的(之前就已经和github建立过连接的),所以这次一下就好了