- git简介
- 基本配置
- 保存密码
- 常用命令
- git使用
- 回滚操作
- gitlab创建仓库流程
- 本地创建上传流程
- .gitignore
- 示例文件
- 特殊处理
- .gitattributes
Git 是目前流行的非常好用的版本控制工具,它采用了分布式版本库的方式,不必依赖服务器端软件支持;使源代码的发布和交流极其方便。 git简介
在linux下安装非常方便:
sudo apt update sudo apt install git
通过version获取版本信息:
git --version
基本配置git安装后需要配置用户名与邮件:
git config --global user.name "Your Name" git config --global user.email "youremail@yourdomain.com"
查看配置信息:
git config --list
保存密码要保存git用户名与密码:
-
在home目录下创建.git-credentials,输入形如https://{username}:{password}@github.com的配置信息;若有多个则每行一个。
$ vim ~/.git-credentials http://myname:mypass@192.168.1.100/8090 http://myname:mypass%40123@192.168.1.101/8090 # 密码为 mypass@123
若用户名或密码中含有像**@这样的特殊符号**,则要通过URL编码方式(即使用%40替换@符号)。
删除此文件,则删除了所有已保存的密码。
-
设定保存密码:git config --global credential.helper store
-
查看:cat ~/.gitconfig,存在如下内容即代表成功:
[credential] helper = store
| 命令 | 功能 |
|---|---|
| git init | 在本地的当前目录里初始化git仓库 |
| git status | 查看当前仓库的状态 |
| git add -A | 增加目录中所有的文件到缓存区 |
| git add file | 增加相应文件到缓存区 |
| git commit -m “信息” | 将缓存区中更改提交到本地仓库 |
| git rm file | 删除文件 |
| git log | 查看当前版本之前的提交记录 |
| git reflog | 查看HEAD的变更记录,包括回退 |
| git branch -b branch_name | 建立一个新的分支 |
| git diff | 查看当前文件与缓存区文件的差异 |
| git checkout – file | 取消更改,将缓存区的文件提取覆盖当前文件 |
| git reset --hard 版本号 | 回退到相应版本号,同样也可以回退到未来的版本号 |
| git clean -xf | 删除当前目录中所有未追踪的文件 |
| git config --global core.quotepath false | 处理中文文件名 |
通过git status查看状态,然后确定如何撤销
1、撤销git add添加的多余文件:
git reset HEAD # 上一次add的全部撤销 git reset HEAD file # 对某个文件进行撤销
2、撤销commit过的:
git log # 查看提交节点ID(按q退出) commit xxxxxxxxxxxxxxxxxx # 即为节点ID git reset XXXX # 回退到上一个提交节点,代码还是修改后的 git reset --hard XXXX # 回退到上一个提交节点,代码也被还原
3、丢弃本地的所有改动与提交
git fetch origin git reset --hard origin/master
回滚后本地可能会比远程版本旧,但还要提交,可:git push --force
撤销操作也可通revert,git revert 和 reset 最本质的区别:
- revert 使用一个新的commit 来回滚希望回滚到的commit;reset 是直接把HEAD 指向回退的commit;
- revert 只会回滚希望回滚的哪一个commit的操作,不会影响其他的;reset 由于指针回退了,因此这个commit 之后的commit都会消失。
一般情况下:如果已经push了,使用revert,如果没有,就用reset。
gitlab创建仓库流程先在gitlab上创建一个仓库然后clone到本地,添加文件后,上传:
-
git clone https://github.com/XXX
-
在目录中添加代码文件:
git add
# 将文件加入本地暂存区 git add . # 将当前文件夹下所有文件添加至暂存区 git status # 查看状态(修改的文件信息) -
提交:git commit -m "message"
-
上传:git push origion master
先创建目录,并初始化:
-
git init
-
在目录中添加代码文件:git add / git commit
-
添加到远程仓库:
# 添加关联的仓库 git remote add origin https://github.com/username/learngit.git # 首次推送时(-u 关联分支) git push -u origin master # 后续推送 git push origin master
通过.gitignore文件文件,Git就会自动忽略指定的文件或目录:
-
.gitingore 文件中,每一行指定一个忽略规则
-
反斜杠进行转义( 空格,开头的#)
-
! 开头:标识否定,该文件将会再次被包含;如果排除了该文件的父级目录,则使用 ! 也不会再次被包含;
-
/结束:只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;
-
/开始:匹配项目根目录;
-
**匹配多级目录,可在开始,中间,结束位置;
-
?通用匹配单个字符
-
*通用匹配零个或多个字符
-
[]通用匹配单个字符列表
-
如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore文件所在目录;
示例说明:
- bin/:忽略当前路径下的bin文件夹,该文件夹下的所有内容都会被忽略,不忽略bin文件
- /bin:忽略根目录下的bin文件
- foo:忽略/foo,a/foo,a/b/foo等
- ab:忽略a/b,a/x/b,a/x/y/b等
- !/bin/run.sh:不忽略bin目录下的run.sh文件
- *.log:忽略所有.log文件
- config.php:忽略当前路径的config.php文件
run.sh /build* /install .vscode /cmake-build* /.idea* __pycache__特殊处理
.gitignore只能忽略那些原来没有被track的文件,如果某些文件已经被纳入了版本管理中,则修改.gitignore是无效的。
解决方法就是先把本地缓存删除(改变成未track状态),然后再提交:
git rm -r --cached . git add . git commit -m 'update .gitignore'
强制添加忽略的文件:
git add -f ignored.file
检查忽略规则:
$ git check-ignore -v ignored.file .gitignore:3:*.class ignored.file.gitattributes
.gitattributes 是一个文本文件,文件中的一行定义一个路径的若干个属性,主要用于定义每种文件的属性,以方便 git 帮我们统一管理;格式为:
要匹配的文件模式 属性1 属性2 ...
一个属性(以text属性为例)可能有4种状态:
- 设置text
- 不设置-text
- 设置值text=string
- 未声明,通常不出现该属性即可;但是为了覆盖其他文件中的声明,也可以!text
可定义的属性:
-
text:用于控制行尾的规范性;如果一个文本文件是规范的,则Git库汇总该文件(git 服务器上的文件)的行尾总是LF。
-
eol:设置行尾符号:
eol=lf:入库时将行尾规范为LF,检出时行尾不强制转换为 CRLF eol=crlf:入库时将行尾规范为LF,检出时将行尾转换为CRLF
Git LFS(Large File Storage)是 Git 扩展,通过延迟地(lazily)下载大文件的相关版本来减少大文件对仓库中的影响;具体来说,大文件是在 checkout 的过程中下载的,而不是 clone 或 fetch 过程中下载。
示例:
*.json eol=lf *.jpg filter=lfs diff=lfs merge=lfs -text *.lib filter=lfs diff=lfs merge=lfs -text *.so* filter=lfs diff=lfs merge=lfs -text *.a filter=lfs diff=lfs merge=lfs -text *.docx filter=lfs diff=lfs merge=lfs -text *.xlsx filter=lfs diff=lfs merge=lfs -text *.pdf filter=lfs diff=lfs merge=lfs -text *.tar filter=lfs diff=lfs merge=lfs -text *.tar.gz filter=lfs diff=lfs merge=lfs -text


![[Util]git使用简介 [Util]git使用简介](http://www.mshxw.com/aiimages/31/829952.png)
