Git是一個(gè)開源的分布式版本控制系統(tǒng),功能強(qiáng)大宙项,本文手把手教大家從零開始安裝Git(基于windows環(huán)境)以及分享Git日常使用的小技巧和知識(shí)
一、安裝Git
1畅形、首先肯定需要下載安裝包养距,可以去Git開源社區(qū)網(wǎng)站下載,鏈接如下:https://git-scm.com/
進(jìn)入網(wǎng)站日熬,里面有本Pro Git book铃在,指導(dǎo)你如何使用Git,講得比較全碍遍,強(qiáng)烈推薦初學(xué)者學(xué)習(xí)
2定铜、安裝基本一路next,安裝完畢后鼠標(biāo)右擊會(huì)有Git Bash Here選項(xiàng)怕敬,點(diǎn)擊進(jìn)行g(shù)it的命令行操作
3揣炕、初始化git倉庫后,便可以在倉庫根目錄下使用git命令东跪,如果不在Git倉庫下則無法執(zhí)行Git有關(guān)命令畸陡。關(guān)于git的基本命令這里不細(xì)說了,大家有不熟悉的可以參考上面的Git Pro Book虽填,以下概念對(duì)git配置比較重要
Git 自帶一個(gè)?git config?的工具來幫助設(shè)置控制 Git 外觀和行為的配置變量丁恭。 這些變量存儲(chǔ)在三個(gè)不同的位置:
/etc/gitconfig?文件: 包含系統(tǒng)上每一個(gè)用戶及他們倉庫的通用配置。 如果使用帶有?--system?選項(xiàng)的?git config?時(shí)斋日,它會(huì)從此文件讀寫配置變量牲览。
~/.gitconfig?或?~/.config/git/config?文件:只針對(duì)當(dāng)前用戶。 可以傳遞?--global?選項(xiàng)讓 Git 讀寫此文件恶守。
當(dāng)前使用倉庫的 Git 目錄中的?config?文件(就是?.git/config):針對(duì)該倉庫第献。
每一個(gè)級(jí)別覆蓋上一級(jí)別的配置贡必,所以?.git/config?的配置變量會(huì)覆蓋?/etc/gitconfig?中的配置變量。
在 Windows 系統(tǒng)中庸毫,Git 會(huì)查找?$HOME?目錄下(一般情況下是?C:\Users\$USER)的?.gitconfig?文件仔拟。 Git 同樣也會(huì)尋找?/etc/gitconfig?文件,但只限于 MSys 的根目錄下飒赃,即安裝 Git 時(shí)所選的目標(biāo)位置利花。
二、配置Git(別名)
現(xiàn)在主流的一些集成開發(fā)工具如IDEA都已經(jīng)集成Git载佳,可以在IDEA里進(jìn)行圖形化界面操作炒事,十分方便,但命令行始終還是最強(qiáng)大的刚盈,如果你習(xí)慣于使用命令行操作的話羡洛,面對(duì)有些比較長的Git命令,如果能給它設(shè)置別名必然能提高我們的開發(fā)效率藕漱,不用每次都輸入重復(fù)的長命令欲侮。
關(guān)于windows下配置Git別名有以下幾種方式
1、利用Git自帶的別名功能
具體方式:git config --global alias.別名 命令
因?yàn)樵O(shè)置級(jí)別為global肋联,即用戶級(jí)別威蕉,windows下git會(huì)將別名寫入你C盤用戶的.gitconfig中,如果不加global條件橄仍,則默認(rèn)寫入你倉庫的config中韧涨,只針對(duì)當(dāng)前倉庫有效。當(dāng)然也可以手動(dòng)在配置文件中按照格式要求寫入別名侮繁。
2虑粥、上述配置確實(shí)簡化了命令,但還是要輸入前面的git宪哩,因?yàn)間it bash 默認(rèn)所有的命令都要以git開頭娩贷,但如果我連git都懶得打呢,比如輸入gs直接達(dá)到git status的效果锁孟,有三種方法
(1)彬祖、直接修改git bash的別名設(shè)置,因?yàn)間it bash自身也是有別名的品抽,如果修改了它的別名就能進(jìn)一步簡化命令
修改Git安裝目錄下的etc/bash.bashrc文件储笑,在里面加入別名設(shè)置即可
(2)、上述配置能進(jìn)一步簡化命令圆恤,但是有一點(diǎn)麻煩是你需要找到你的工作區(qū)然后右擊Git Bash Here才能輸入git命令突倍,但現(xiàn)在大家都是用IDEA等開發(fā)工具,在提交時(shí)再切到工作區(qū)執(zhí)行g(shù)it命令似乎有些麻煩,有沒有辦法直接在IDEA的Terminal終端中直接執(zhí)行Git命令呢赘方?
可以在windows中安裝bash烧颖,直接在終端啟動(dòng)bash弱左,輸入Git命令
關(guān)于如何安裝windows bash可以參考這篇文章窄陡,這里不再贅述?http://www.reibang.com/p/a90591d5db0c
如果輸入bash時(shí)提示 bash: ./xx: Permission denied,輸入 sudo chmod 777 ./xx 獲得可讀可寫可執(zhí)行權(quán)限即可
打開IDEA終端直接輸入bash拆火,便可進(jìn)行Git操作跳夭,bash的別名設(shè)置直接修改配置文件即可,也可以用命令alias name=value 進(jìn)行設(shè)置们镜,不過不是永久保存的
配置文件位置:{你C盤用戶目錄}\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\{你的bash用戶名}\.bashrc
具體可能每個(gè)人不一樣币叹,我自己的位置是在C:\Users\超\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\gcc\.bashrc
按格式加入別名即可
(3)、可以用zsh的git plugin模狭,當(dāng)然前提是要安裝bash颈抚,這個(gè)插件里內(nèi)置了很多git別名可以直接在IDEA終端中使用,我覺得上面的bash基本滿足我的日常使用了嚼鹉,所以沒有下這個(gè)插件贩汉,感興趣的小伙伴可以自行搜索下載
三、配置Git(ssh)
客戶端與Git遠(yuǎn)程倉庫如github通信主要有兩種方式锚赤,https和ssh匹舞,因?yàn)閟sh傳輸比較安全,速度稍快于https线脚,所以日炒突基本都用ssh方式拉取和推送代碼
用ssh方式首先要在本地生成一對(duì)密鑰(公鑰和私鑰),公鑰復(fù)制到github等遠(yuǎn)程服務(wù)器浑侥,私鑰存于自己電腦上保存姊舵,通過ssh方式拉取和推送代碼遠(yuǎn)程倉庫都會(huì)通過密鑰進(jìn)行權(quán)限驗(yàn)證。
1寓落、首先括丁,你需要確認(rèn)自己是否已經(jīng)擁有密鑰。 默認(rèn)情況下零如,用戶的 SSH 密鑰存儲(chǔ)在其?~/.ssh?目錄下躏将。 進(jìn)入該目錄并列出其中內(nèi)容,你便可以快速確認(rèn)自己是否已擁有密鑰:
$ cd ~/.ssh
$ ls
authorized_keys2? id_dsa? ? ? known_hosts
config? ? ? ? ? ? id_dsa.pub
2考蕾、我們需要尋找一對(duì)以?id_dsa?或?id_rsa?命名的文件祸憋,其中一個(gè)帶有?.pub?擴(kuò)展名。?.pub?文件是你的公鑰肖卧,另一個(gè)則是私鑰蚯窥。 如果找不到這樣的文件(或者根本沒有?.ssh?目錄),你可以通過運(yùn)行?ssh-keygen程序來創(chuàng)建它們。在 Linux/Mac 系統(tǒng)中拦赠,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
還可以用以下命令細(xì)分 ssh-keygen -t rsa -c '郵箱等'
密鑰類型可以用 -t 選項(xiàng)指定句携。如果沒有指定則默認(rèn)生成用于SSH-2的RSA密鑰。這里使用的是rsa允乐。 同時(shí)在密鑰中有一個(gè)注釋字段矮嫉,用-C來指定所指定的注釋,可以方便用戶標(biāo)識(shí)這個(gè)密鑰牍疏,指出密鑰的 用途或其他有用的信息蠢笋。所以在這里輸入自己的郵箱或者其他都行。 輸入完畢后程序同時(shí)要求輸入一 個(gè)密語字符串(passphrase)鳞陨,空表示沒有密語昨寞。接著會(huì)讓輸入2次口令(password),空表示沒有口 令厦滤。3次回車 即可完成當(dāng)前步驟援岩,此時(shí)[windows:c盤>用戶>自己的用戶名>.ssh,?Linux:用戶>.ssh]目錄下已經(jīng)生成好了。
3馁害、接著把公鑰放到遠(yuǎn)程服務(wù)器即可窄俏,拷貝id_rsa.pub中內(nèi)容添加到遠(yuǎn)程倉庫即可
以github為例,在此添加公鑰碘菜,添加完成后凹蜈,輸入ssh -T git@github.com即可測(cè)試認(rèn)證
如果提示 You've successfully authenticated,說明ssh認(rèn)證成功
4忍啸、最后有關(guān)bash向遠(yuǎn)程倉庫提交和拉取代碼的問題仰坦,因?yàn)閎ash和windows本地用戶不是一個(gè),所以需要在bash中再單獨(dú)生成ssh密鑰计雌,位置默認(rèn)在:{你C盤用戶目錄}\AppData\Local\Packages\CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc\LocalState\rootfs\home\{你的bash用戶名}\.ssh文件夾下悄晃,復(fù)制公鑰到遠(yuǎn)程倉庫即可
另外還需要在bash中單獨(dú)設(shè)置git的用戶名和郵箱,否則git無法識(shí)別你的身份
使用命令
git config --global user.name 'xxx'
git config --global user.email 'xxx@123.com'
指定用戶級(jí)別的用戶名和郵箱即可
四凿滤、Git知識(shí)技巧
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'
#以下為方便回憶用,實(shí)際不使用的別名
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 的區(qū)別:
git fetch 拉取遠(yuǎn)程分支眷蚓,新建遠(yuǎn)程分支的本地倉庫(commit id),不合并
git pull = git fetch + git merge 拉取遠(yuǎn)程分支反番,更新本地倉庫沙热,直接合并到工作區(qū)
3叉钥、git cherry-pick commitId 挑揀分支提交合并