Windows下配置Git(设置别名,生成ssh等)

Git是一个开源的分布式版本控制系统,功能强大,本文手把手教大家从零开始安装Git(基于windows环境)以及分享Git日常使用的小技巧和知识

一、安装Git

1、首先肯定需要下载安装包,可以去Git开源社区网站下载,链接如下:https://git-scm.com/

进入网站,里面有本Pro Git book,指导你如何使用Git,讲得比较全,强烈推荐初学者学习

Windows下配置Git(设置别名,生成ssh等)_第1张图片

2、安装基本一路next,安装完毕后鼠标右击会有Git Bash Here选项,点击进行git的命令行操作

Windows下配置Git(设置别名,生成ssh等)_第2张图片
Windows下配置Git(设置别名,生成ssh等)_第3张图片

3、初始化git仓库后,便可以在仓库根目录下使用git命令,如果不在Git仓库下则无法执行Git有关命令。关于git的基本命令这里不细说了,大家有不熟悉的可以参考上面的Git Pro Book,以下概念对git配置比较重要

Git 自带一个 git config 的工具来帮助设置控制 Git 外观和行为的配置变量。 这些变量存储在三个不同的位置:

/etc/gitconfig 文件: 包含系统上每一个用户及他们仓库的通用配置。 如果使用带有 --system 选项的 git config 时,它会从此文件读写配置变量。

~/.gitconfig 或 ~/.config/git/config 文件:只针对当前用户。 可以传递 --global 选项让 Git 读写此文件。

当前使用仓库的 Git 目录中的 config 文件(就是 .git/config):针对该仓库。

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

在 Windows 系统中,Git 会查找 $HOME 目录下(一般情况下是 C:\Users\$USER)的 .gitconfig 文件。 Git 同样也会寻找 /etc/gitconfig 文件,但只限于 MSys 的根目录下,即安装 Git 时所选的目标位置。

二、配置Git(别名)

现在主流的一些集成开发工具如IDEA都已经集成Git,可以在IDEA里进行图形化界面操作,十分方便,但命令行始终还是最强大的,如果你习惯于使用命令行操作的话,面对有些比较长的Git命令,如果能给它设置别名必然能提高我们的开发效率,不用每次都输入重复的长命令。

关于windows下配置Git别名有以下几种方式

1、利用Git自带的别名功能

Windows下配置Git(设置别名,生成ssh等)_第4张图片

具体方式:git config --global alias.别名 命令

因为设置级别为global,即用户级别,windows下git会将别名写入你C盘用户的.gitconfig中,如果不加global条件,则默认写入你仓库的config中,只针对当前仓库有效。当然也可以手动在配置文件中按照格式要求写入别名。

Windows下配置Git(设置别名,生成ssh等)_第5张图片
Windows下配置Git(设置别名,生成ssh等)_第6张图片

2、上述配置确实简化了命令,但还是要输入前面的git,因为git bash 默认所有的命令都要以git开头,但如果我连git都懒得打呢,比如输入gs直接达到git status的效果,有三种方法

(1)、直接修改git bash的别名设置,因为git bash自身也是有别名的,如果修改了它的别名就能进一步简化命令

修改Git安装目录下的etc/bash.bashrc文件,在里面加入别名设置即可

Windows下配置Git(设置别名,生成ssh等)_第7张图片
Windows下配置Git(设置别名,生成ssh等)_第8张图片

(2)、上述配置能进一步简化命令,但是有一点麻烦是你需要找到你的工作区然后右击Git Bash Here才能输入git命令,但现在大家都是用IDEA等开发工具,在提交时再切到工作区执行git命令似乎有些麻烦,有没有办法直接在IDEA的Terminal终端中直接执行Git命令呢?

可以在windows中安装bash,直接在终端启动bash,输入Git命令

关于如何安装windows bash可以参考这篇文章,这里不再赘述 https://www.jianshu.com/p/a90591d5db0c

如果输入bash时提示 bash: ./xx: Permission denied,输入 sudo chmod 777 ./xx 获得可读可写可执行权限即可

Windows下配置Git(设置别名,生成ssh等)_第9张图片

打开IDEA终端直接输入bash,便可进行Git操作,bash的别名设置直接修改配置文件即可,也可以用命令alias name=value 进行设置,不过不是永久保存的

配置文件位置:{你C盘用户目录}\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\{你的bash用户名}\.bashrc

具体可能每个人不一样,我自己的位置是在C:\Users\超\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\gcc\.bashrc

Windows下配置Git(设置别名,生成ssh等)_第10张图片

按格式加入别名即可

(3)、可以用zsh的git plugin,当然前提是要安装bash,这个插件里内置了很多git别名可以直接在IDEA终端中使用,我觉得上面的bash基本满足我的日常使用了,所以没有下这个插件,感兴趣的小伙伴可以自行搜索下载

三、配置Git(ssh)

客户端与Git远程仓库如github通信主要有两种方式,https和ssh,因为ssh传输比较安全,速度稍快于https,所以日常基本都用ssh方式拉取和推送代码

用ssh方式首先要在本地生成一对密钥(公钥和私钥),公钥复制到github等远程服务器,私钥存于自己电脑上保存,通过ssh方式拉取和推送代码远程仓库都会通过密钥进行权限验证。

1、首先,你需要确认自己是否已经拥有密钥。 默认情况下,用户的 SSH 密钥存储在其 ~/.ssh 目录下。 进入该目录并列出其中内容,你便可以快速确认自己是否已拥有密钥:

$ cd ~/.ssh

$ ls

authorized_keys2  id_dsa      known_hosts

config            id_dsa.pub

2、我们需要寻找一对以 id_dsa 或 id_rsa 命名的文件,其中一个带有 .pub 扩展名。 .pub 文件是你的公钥,另一个则是私钥。 如果找不到这样的文件(或者根本没有 .ssh 目录),你可以通过运行 ssh-keygen程序来创建它们。在 Linux/Mac 系统中,ssh-keygen 随 SSH 软件包提供;在 Windows 上,该程序包含于 MSysGit 软件包中。

$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/schacon/.ssh/id_rsa):

Created directory '/home/schacon/.ssh'.

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/schacon/.ssh/id_rsa.

Your public key has been saved in /home/schacon/.ssh/id_rsa.pub.

The key fingerprint is:

d0:82:24:8e:d7:f1:bb:9b:33:53:96:93:49:da:9b:e3 [email protected]

还可以用以下命令细分 ssh-keygen -t rsa -c '邮箱等'

Windows下配置Git(设置别名,生成ssh等)_第11张图片

密钥类型可以用 -t 选项指定。如果没有指定则默认生成用于SSH-2的RSA密钥。这里使用的是rsa。 同时在密钥中有一个注释字段,用-C来指定所指定的注释,可以方便用户标识这个密钥,指出密钥的 用途或其他有用的信息。所以在这里输入自己的邮箱或者其他都行。 输入完毕后程序同时要求输入一 个密语字符串(passphrase),空表示没有密语。接着会让输入2次口令(password),空表示没有口 令。3次回车 即可完成当前步骤,此时[windows:c盘>用户>自己的用户名>.ssh, Linux:用户>.ssh]目录下已经生成好了。

3、接着把公钥放到远程服务器即可,拷贝id_rsa.pub中内容添加到远程仓库即可

Windows下配置Git(设置别名,生成ssh等)_第12张图片
Windows下配置Git(设置别名,生成ssh等)_第13张图片

以github为例,在此添加公钥,添加完成后,输入ssh -T [email protected]即可测试认证

如果提示 You've successfully authenticated,说明ssh认证成功

4、最后有关bash向远程仓库提交和拉取代码的问题,因为bash和windows本地用户不是一个,所以需要在bash中再单独生成ssh密钥,位置默认在:{你C盘用户目录}\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\{你的bash用户名}\.ssh文件夹下,复制公钥到远程仓库即可

另外还需要在bash中单独设置git的用户名和邮箱,否则git无法识别你的身份

使用命令

git config --global user.name 'xxx'

git config --global user.email '[email protected]'

指定用户级别的用户名和邮箱即可

四、Git知识技巧

1、我自己的git别名分享

alias cl='clear'

alias ei='exit'

alias lo='logout'

alias g='git'

alias gi='git init'

alias gs='git status'

alias grl='git reflog'

alias gl="git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit --date=relative"

alias glds="git log --graph --pretty='%Cred%h%Creset -%C(auto)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short"

alias gllas="git log -1 HEAD --pretty='%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%ad) %C(bold blue)<%an>%Creset' --date=short"

alias gllat="git for-each-ref --sort=-committerdate --format='%(committerdate:short) %(refname:short) [%(committername)]'"

alias gb='git branch'

alias gbv='git branch -v'

alias gba='git branch -a'

alias gbd='git branch -d'

alias gc='git commit'

alias gcm='git commit -m'

alias gcam='git commit --amend -m'

alias gcl='git clone'

alias ga='git add'

alias gaa='git add --all'

alias ga.='git add .'

alias gpl='git pull'

alias gp='git push'

alias gpf='git push -f'

alias grb='git rebase'

alias gco='git checkout'

alias gcob='git checkout -b'

alias gf='git fetch'

alias gm='git merge'

alias gra='git remote add'

alias grm='git rm'

alias grmc='git rm --cached'

alias grv='git remote -v'

alias gcf='git config'

alias gcfl='git config --list'

alias gcp='git cherry-pick'

alias grhh1='git reset --hard HEAD^'

alias grhh2='git reset --hard HEAD@{2}'

alias ssht='ssh -T [email protected]'

alias sshk='ssh-keygen -t rsa'

#以下为方便回忆用,实际不使用的别名

alias ggsup='git branch --set-upstream-to=origin/$(git_current_branch)'

alias gpsup='git push --set-upstream origin $(git_current_branch)'

alias gstash='git stash'

alias gtam="git tag -a tagname -m 'commit message'"

alias gcfgun='git config --global user.name'

alias gcfusun='git config --unset user.name'

alias gpodm='git push origin --delete master'


2、git fetch 与 git pull 的区别:

git fetch 拉取远程分支,新建远程分支的本地仓库(commit id),不合并

git pull = git fetch + git merge 拉取远程分支,更新本地仓库,直接合并到工作区

3、git cherry-pick commitId 挑拣分支提交合并

你可能感兴趣的:(Windows下配置Git(设置别名,生成ssh等))