Git快速入门

虽然日常工作中经常使用git,但是在面对一些特殊情况时仍会捉襟见肘。在这里整理一些常见操作和常见问题。对于更详细的介绍,建议参考官方文档

简介

我们都知道,git是一个版本控制工具,而github、gitlab等则是基于git的代码托管平台。Git中比较常见的概念有仓库、暂存区、工作区、分支等。

安装和配置

  • 安装
    对于Ubuntu和Mac OS来说,可以通过简易的命令行来安装(aptbrew)。对于Windows来说,则需要手动下载安装,并通过Git Bash来交互,或者通过安装posh-git来实现在PowerShell中的集成。
  • 配置
    配置SSH-Key
    通常为了避免每次执行与远端仓库的操作的时候都需要验证,通常需要配置SSH-Key,通过SSH的方式与远端仓库进行通信。作为一种非对称加密方式,SSH-Key成对出现。
    首先需要使用如下命令生成钥匙对:
    ssh-keygen -t rsa -C "[email protected]"
    
    生成的钥匙对默认会存放在~/.ssh/id_rsa~/.ssh/id_rsa.pub两个文件中,需要将~/.ssh/id_rsa.pub(公钥)中的内容复制到Github或者Gitlab相应的位置。
    配置Git参数
    Git 自带一个git config的工具来帮助设置控制 Git 外观和行为的配置变量。
    当安装完 Git 应该做的第一件事就是设置你的用户名称与邮件地址。 这样做很重要,因为每一个 Git 的提交都会使用这些信息,并且它会写入到你的每一次提交中,不可更改:
    $ git config --global user.name "John Doe"
    $ git config --global user.email [email protected]
    

基本操作

  • git clone:将存储库克隆到新的目录中。
  • git init:创建一个空的Git存储库或重新初始化现有的存储库。
  • git add:将当前变化存储至暂存区或者跟踪新的文件。
  • git reset:回到某一提交。
  • git rm:从工作树和索引中删除文件。
  • git log:显示提交日志。
  • git status:查看工作区的状态。
  • git branch:列出,创建或删除分支。
  • git checkout:切换分支。
  • git commit:提交变化。
  • git diff:显示提交和工作树之间的更改。
  • git rebase [COMMIT|BRANCH]在另一个基本提示之上提交,创建、列出标签。
  • git fetch:从另一个存储库下载对象和引用。
  • git pull:从另一个存储库或者本地分支中获取远程引用与关联对象并更新。
  • git remote:设置远端分支。(可以设置多个)
  • git push origin --delete :删除远端分支。
  • git reset --hard:回退到上一次commit时的状态。
  • git reset --soft:回退到commit前的状态,保留暂存区文件的改动。
  • git checkout :让某一个文件回退到commit时的状态。

大文件存储(Git LFS)

在一些工程中,可能会需要对一些大文件进行版本控制,比如二进制文件。如果像代码那样使用git进行管理,会导致工程文件空间过于庞大(git会默认存储所有的版本)。Git LFS应运而生。LFS是Large File Storage大文件存储的缩写,Git LFS是针对大文件存储开发的工具。
Git LFS可以通过apt安装。

sudo apt install git-lfs

在工程中,可以通过如下命令开启git lfs功能:

git lfs install

需要使用Git LFS存储的文件可以通过git lfs track命令,或者通过修改.gitattribute文件设置。比如:

git lfs track "*.iso"

.gitattributes文件同样需要被git跟踪:

git add .gitattributes

被跟踪的大文件可以像git下的其他文件一样跟踪、提交和推送:

git add file.iso
git commit -m "Add disk image"
git push

常见问题

忽略文件/目录

如果想在工程内忽略特定文件或目录(比如build目录),可以通过编辑.gitignore文件实现。注意,已经被跟踪的文件将不会被忽略。

管理多个SSH-Key

当本地有多个SSH-Key的时候,需要配置~/.ssh/config文件来区分不同Host使用的key,比如:

# ~/.ssh/config
#github
    Host github.com
    IdentityFile ~/.ssh/id_rsa_github
    User MyUserName

#gitlab
    Host gitlab.com
    IdentityFile ~/.ssh/id_rsa_gitlab
    User MyUserName

ssh-agent

ssh-agent是linux 系统上的一个程序,这个程序可以控制和保存公钥身份验证所使用的私钥程序。可以帮助我们管理ssh的密码。
启动方式如下:
eval `ssh-agent`
添加新的ssh-key:
ssh-add ~/.ssh/id_rsa
当 ssh-add 把私钥交给 ssh-agent 来管理时,其他程序需要身份验证的时候都可以申请交给 ssh-agent 来完成整个认证过程。(参考)

config优先级

git config命令配置的变量存储在三个不同的位置:

  • /etc/gitconfig文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。
  • ~/.gitconfig~/.config/git/config文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。
  • 当前使用仓库的 Git 目录中的 config 文件(就是.git/config):针对该仓库。

每一个级别覆盖上一级别的配置,所以.git/config的配置变量会覆盖/etc/gitconfig中的配置变量。

更改commit的作者信息

git commit --amend --reset-author

ssh相关:

ssh使用非对称加密。类似于github等平台,我们可以设置让本地与另一台电脑或服务器的ssh连接免密码:在对方电脑~/.ssh/目录下添加authorized_keys文件,里面输入本机的公钥。

你可能感兴趣的:(Git快速入门)