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

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

一、安装Git

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

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

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

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自带的别名功能

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

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

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

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

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

(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 获得可读可写可执行权限即可

打开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

按格式加入别名即可

(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 schacon@mylaptop.local

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

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

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

以github为例,在此添加公钥,添加完成后,输入ssh -T git@github.com即可测试认证

如果提示 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 'xxx@123.com'

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

四、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 git@github.com'

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 挑拣分支提交合并

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容