什么是Git

Git是一种分布式版本控制系统,它允许多人协同开发同一个项目,并管理代码的修改历史。使用Git,可以在本地对代码进行修改和提交,也可以与远程仓库交互,如拉取最新代码、推送修改等。

Git的工作原理

Git工作原理
如上图所示,整个管理系统的主要分为四大部分:

Workspace:本地项目所在目录
Index:暂存区
Repository:初始化下当前所在的分支
Remote:远程仓库

Git的配置

Git的安装非常简单,配置完成后鼠标右键打开Git的Termina设置用户名和密码

1
2
git config --global user.name "xxx"
git config --global user.email xxxxxx@mail.com

Git使用流程

Github仓库创建

网页打开github后在右上角即可创建远程仓库

Github仓库创建

仓库属性主要包括仓库的名称、仓库描述和仓库私有性设置,此外还可以设置添加README文件和License,设置完成后即创建了一个远程仓库。

仓库属性

Git本地工作区创建

在本地电脑创建一个本地工作区文件夹,例如AMBA_AXI_Library,然后右键打开Git Terminal输入

1
git init

本地工作区初始化
输入完成后,在本地会出现一个.git文件,该文件用于跟踪管理版本,千万不要删除该文件目录下的文件,否则可能会导致本地文件丢失。
.git文件

本地文件上传Github

文件上传本地仓库

本地工作区创建文件后,例如ADD.v,然后打开Git Terminal,输入 git add即可需要上传文件。
添加文件

添加文件后可以通过git status查看状态,由下图可以看到Git记录,我们创建了一个新文件ADD.v。
查看状态

使用git commit提交文件,格式如下:

1
git commit -m "注释"

本地提交

代码上传远程仓库

通过https协议,将本地仓库与Github远程仓库进行连接

1
2
3
4
5
git remote add orgin https://github.com/illusioneeer/AMBA_AXI_Library
# 查看远程分支
git remote -v
# 删除远程分支
git remote rm origin

如下图所示,即连接到远程github仓库并建立了origin分支

添加分支

然后输入:

1
2
3
4
5
6
7
8
git push <本地分支> <远程分支>
# 将本地origin分支上传到远程的master分支
# 远程仓库创建时默认自带master分支
git push origin master
# 如果输入指令-u 那么git则会记录push到远程分支的默认值
git push -u origin master
# 输入了-u后,下次直接将会默认将本地master分支上传到远程master分支
git push

上传成功
在github的master分支下即可看到添加的add.v文件
添加ADD.v文件

远程仓库克隆

上传远程仓库后,即可在任意地方复制远程仓库文件。

1
2
git clone 远程仓库地址 [本地文件名称]
git clone https://github.com/illusioneeer/AMBA_AXI_Library

其他常用指令

操作 指令 注释
删除文件 git rm ‘文件名’ 删除后重新提交,远程仓库也会删除更新
文件重命名 git mv ‘原文件名’ ‘新文件名’ 修改文件名后重新提交,远程仓库也会更新改名
文件路径修改 git mv ‘原文件名’ ‘新文件地址/新文件名’ 修改后重新上传,远程仓库也会更新
还原操作失误文件 git checkout-文件名 文件名支持匹配,如果为*则欢迎目录下所有文件
还原追踪文件 git reset HEAD ‘文件名’ 如果不添加HEAD则标识将所有的修改文件退回工作区
查看提交记录 git log 查看所有提交记录
查看某个分支提交记录 git log ‘分支’ 查看该分支提交记录
查看文件提交记录 git log ‘文件名’ 查看该分支提交记录
查看提交ID git log –oneline 查看提交ID和提交注释
指定文件回退版本 git checkout ‘commitID’ ‘文件名’ 将该文件回退到commitID
查看仓库分支 git branch 查看所有branch信息
删除仓库分支 git branch -d ‘分支名称’ 删除该分支

ignore

当我们的项目中有些文件不希望上传到远程仓库时,例如编译文件、仿真结果等,可以使用gitignore,在本地文件目录下创建**.gitignore**文件,文件中的内容将不会上传到远程仓库。

1
2
3
4
5
6
7
8
9
10
## 忽略folder目录,包括src/folder等子目录,此外还包括名字叫folder的文件
folder
## 忽略folder目录,包括src/folder等子目录,但是不包括名字叫folder的文件
folder/
## 仅忽略名字叫folder的文件,但是不会忽略名字叫folder_name的目录
!folder/
## 支持使用通配符,忽略目录如folder_rtl、folder_sim等
folder_*/
## 支持使用双**号表示多级目录
folder/**/sim/