美文网首页
Git快速入门

Git快速入门

作者: 啊呀哟嘿 | 来源:发表于2020-02-06 15:47 被阅读0次

    虽然日常工作中经常使用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 "username@xxx.com"
      
      生成的钥匙对默认会存放在~/.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 johndoe@example.com
      

    基本操作

    • 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 <remote-branch>:删除远端分支。
    • git reset --hard:回退到上一次commit时的状态。
    • git reset --soft:回退到commit前的状态,保留暂存区文件的改动。
    • git checkout <file>:让某一个文件回退到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快速入门

          本文链接:https://www.haomeiwen.com/subject/zttuxhtx.html