Git相关配置说明(一)

38 阅读9分钟

安装Git

  • Windows: 官网自行安装
  • Mac: Mac一般自带Git无需安装
  • Linux: 服务器上, yum install -y git

配置Git

Git使用三种级别的配置文件 系统 > 全局 > 本地

  1. 系统: 适用于系统上所有用户和项目, 通常位于 /etc/.gitconfig
    • 文件名为gitconfig, 位于安装Git目录下的etc文件夹内, 系统层面的, 对本系统有效
  2. 全局: 特定于当前用户, 通常位于 ~/.gitconfig || user/.gitconfig
    • 文件名为.gitconfig, 位于用户根目录, C:\User<user_name>\.gitconfig, 用户层面的, 对本用户有效
  3. 本地: 特定于当前Git仓库, 位于 .git/config 只会影响该仓库的操作
    • 文件名为config, 位于项目目录下的.git文件夹内, 仓库层面的, 只对本仓库有效
# 查看配置

git config --list
git config -l  # 查看所有配置(包括仓库,用户,系统配置)

git config --system -l
git config --global -l
git config --local -l

# 新增配置
git config --local --add core.autocrlf false

# 修改配置
# git config --local 需要修改的参数 需要修改的值
git config --local core.autocrlf false

# 删除配置
git config --local --unset core.autocrlf false
设置用户签名

设置用户签名是为了确保每次提交都有明确的作者信息
标识用户, 区分不同的开发人员
每次提交时, Git都会使用这些信息来记录提交者的身份
邮箱不一定是真实邮箱 可以是虚拟邮箱

# 全局设置, 作为所有Git仓库的默认签名
# 去掉 --global 在`该仓库目录`下运行则应用于当前仓库

git config --global user.name "xxx"
git config --global user.email "xxx"
# 查看用户签名

git config user.name
git config user.email
  • 也可以进入 user/.gitconfig 配置文件中查看
  • 如果是当前仓库的特定提交者 则进入 当前项目仓库的.git 文件夹下gitconfig配置
基本配置说明
[user]    # 设置提交代码时的用户签名信息
    name = Your Name
    email = your@email.com
[core]    # 核心配置, 如: 默认的文本编辑器
    editor = vim
    fscache = true  # 用于启用或禁用文件系统缓存
    # 用于指定一个排除文件,其中包含要忽略的文件和目录的规则
    excludesfile = '~/.gitignore'
[alias]   # 设置 Git 命令别名(很少用到感觉,可以玩玩)
    co = checkout
    ci = commit
    br = branch
    st = status
[color]   # 是否使用彩色显示, 还有其它颜色输出配置
    ui = auto
[push]    # 设置推送行为
    default = matching
[pull]    # 设置拉取行为
    ff-only

初始化本地仓库

# 将当前目录初始化为一个本地的Git仓库 或 创建一个repo目录的Git仓库
# 会在本地生成一个.git文件夹用来追踪仓库的所有变更
git init [repo]

# 指定当前目录成为中心仓库(裸仓库) 或 创建一个repo.git目录的裸仓库
# 没有工作空间, 该仓库只保存Git历史提交版本信息, 不允许用户在上面进行各种Git操作(只能push和fetch)
# 在当前目录生成不带.git的文件夹, 即把.git文件夹里的内容直接生成到当前目录
git init --bare [<repo.git>]

一般来说, 一个裸库往往用来被创建用于作为大家一起工作的共享库, 每个人都可以往里面push自己的本地修改; 裸仓库通常命名方式是在库名后加上 .git

  • 裸仓库就是作为远程仓库进行代码共享和协作
  • 裸仓库虽然没有工作目录,但它仍然保存了所有提交的版本信息和代码内容
  • 裸仓库将所有提交的数据存储在Git的内部结构中, objects目录中
  • github上面的clone地址就是一个裸仓库地址
  • 故github上的代码库是一个裸仓库才可以作为共享库!

SSH

ssh是专为远程登录会话和其他网络服务提供安全性的一种协议
Git是分布式的代码管理工具, 有四种协议: 本地协议file/Git协议/HTTP协议/SSH协议

  1. 配置用户签名
git config --global user.name "xxx"
git config --global user.email "xxx@com"
  1. 查看是否设置了ssh
cd ~/.ssh # 有则删除重新设置
  1. 生成公钥和私钥
ssh-keygen -t rsa -C "你的邮箱"
# -t rsa 表示类型是rsa类型(非对称加密)
# -C 邮箱地址可以不用设置
# 直接回车就行, 不用设置密码
  1. 复制公钥配置到Git服务器SSH配置
cat ~/.ssh/id_rsa.pub
  1. 每次pull、push都需要输入密码时
git config --global credential.helper store
# 用于配置Git凭证储存的命令, 会记录下账号与密码

本地仓库建立远程仓库的连接

  1. 添加远程仓库
# origin: 远程仓库的名称【可自定义】
# <repo.git> 远程仓库地址

git remote add origin <repo.git>
  1. 本地分支push到远程仓库分支
# 因为已经连接了远程仓库, 直接push
# -u 第一次推送使用-u选项, 将本地分支与远程master分支作关联
# origin 远程仓库名称 master 远程分支
# 下面是 git push --set-upstream origin master 的缩写版本

git push -u origin master

本地仓库创建新分支提交到远程新分支

  1. 创建本地新分支
git checkout -b xxx

# 从远程某个分支下创建一个新分支, 并会跟踪远程分支
# 不设置 origin/remote_branch_name 则在当前分支下创建
git checkout -b new_branch_name origin/remote_branch_name
  1. 提交到远程新分支
git push -u origin new-branch

本地仓库状态说明

  1. 内容状态: 表示内容的改变

    • 工作区
    • 暂存区
    • 提交区
  2. 文件状态

    • 已跟踪
    • 未跟踪
  • 添加文件: 工作区
  • 文件添加到暂存区使用下面命令(同时文件被跟踪)
git add 文件名 + 后缀  # 添加文件内容到暂存区
git add .  # 添加所有文件
  • 想要删除暂存区的内容则使用如下命令
git rm --cached <file>
  • 然后是提交代码到本地库, 形成自己的历史版本
git commit -m "xxxx"  # 从暂存区中提交所有文件
git commit -m "xxxx" 文件名 + 后缀  # 从暂存区中的提交指定文件
# 扩展
git commit -a -m "xxxx" # 从工作区中提交所有文件
git commit -a -m "xxxx" 文件名 + 后缀  # 从工作区中的提交指定文件

命令详细

常用命令
  1. git config: 参考配置文件说明
  2. git version / git -v: 查看当前Git版本
  3. git init: 创建一个空的代码储存库
  4. git clone <Project Url>: 将现用的储存库进行复制
  5. git clone -o <name> <Project Url>: 设置远程仓库主机名的简短名称, 默认origin
远程仓库类命令
  1. git remote: 显示所有远程仓库简短名称
    • 显示 origin # 表示就一个远程仓库简短名称
  2. git remote -v: 查看所有远程仓库详细信息
    • 显示 origin url # 前一个表示远程仓库名称 后一个是远程仓库地址
    • fecth: 表示该仓库用于从远程仓库获取更新
    • fush: 表示该仓库用于将本地提交推送到远程仓库操作
  3. git remote show origin: 展示远程仓库origin的详细信息(包含本地分支跟踪的远程分支信息)
  4. git remote add origin <远程仓库地址>: 本地仓库与远程仓库建立关联
  5. git remote rm origin: 删除已经添加的远程仓库 [rm: remove]
  6. git remote add <自定义名称> <另一个远程仓库地址>: 表示添加多个远程仓库
    • origin | <自定义名称> 都是远程仓库名称
  7. git remote rename <oldName> <newName>: 重命名远程仓库的简短名称
  8. git remote set-url origin <新的远程仓库地址>: 当多个仓库时, 更新远程仓库地址 url
分支类命令
  1. git branch: 列出本地分支
  2. git branch -a: 列出所有分支(本地和远程)
  3. git branch -r: 列出远程分支
  4. git branch -vv: 列出本地分支与远程分支关联以及最新的提交
  5. git branch <branch_name>: 创建新分支
  6. git branch -d <branch_name>: 删除分支
  7. git branch -D <branch_name>: 强制删除分支
  8. git checkout <branch_name: 切换分支
  9. git checkout -b <branch_name>: 创建并切换分支
  10. git branch --set-upstream dev origin/dev: 手动建立本地dev与origin/dev分支的跟踪
    • 默认clone时, 本地同名分支就与远程同名分支建立了跟踪关系
代码存储类命令
  1. git add <file>: 将单个文件添加到暂存区
  2. git add .: 将所有修改过的文件添加到暂存区
  3. git commit -m "xxx": 将暂存区的代码提交到本地存储库
  4. git status: 查看有多少文件需要得到关注
代码上传合并类命令
拉取代码
  1. git fetch: 取回所有分支(branch)的更新
    • 它会将远程仓库中的更新下载到本地,并更新本地仓库中远程分支的指针位置,但不会合并
  2. git fetch origin branchA: 取回指定远程仓库的指定分支的更新
  3. git merge origin/branchA/git rebase origin/branchA: 在当前分支上合并远程分支
  4. git pull origin master: 将拉取当前分支的默认远程存储库的更改
    • 实际上是git fetchgit merge的组合
    • 因为执行了git fetch, 故会看到其他分支的更新但并没有合并
  5. git pull origin: 当前分支与远程分支已建立跟踪可以省略后面的远程分支名
  6. git pull: 如果当前分支只有一个跟踪关系, 则可以简写
  7. git pull <远程仓库名> <远程分支名>:<本地分支名>: 将远程仓库的分支合并到指定的本地分支
  8. git pull origin master: 将远程仓库的master分支合并到 当前分支
  9. git pull --rebase: 一种方式, 区别在于
    • git pull是git pull --merge的缩写
    • merge 是合并成一个commit提交节点
    • rebase 是将两个分支的所有commit提交节点合并成一条线,线性结构
提交代码
  1. git push
回退代码
  1. git reset