栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 系统运维 > 运维 > Linux

[Util]git使用简介

Linux 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

[Util]git使用简介

文章目录
    • 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使用 回滚操作

通过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

通过.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
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/829952.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号