IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> [Util]git使用简介 -> 正文阅读

[系统运维][Util]git使用简介


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 <file>  # 将文件加入本地暂存区
    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文件
  • /*.c:忽略cat.c,不忽略build/cat.c
  • debug/*.obj:忽略debug/io.obj,不忽略debug/common/io.obj和tools/debug/io.obj
  • **/foo:忽略/foo,a/foo,a/b/foo等
  • a/**/b:忽略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
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-24 09:50:00  更:2022-04-24 09:50:26 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 20:10:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码