有時(shí)候在執(zhí)行repo upload上傳代碼的時(shí)候會(huì)出現(xiàn)
To ssh://username@code.address.com:29442/kernel/msm
! [remote rejected] ltr558 -> refs/for/JB8X25_FC/IHV-LITEON-LTR-558ALS (you are not committer username@email.com)
error: failed to push some refs to 'ssh://username@code.address.com:29442/kernel/msm'
----------------------------------------------------------------------
[FAILED] kernel/ ltr558 (Upload failed)
這是因?yàn)橹癵it commit已提交的Email和現(xiàn)在正要提交的Email沖突,把它改成一致就OK了。
git commit已提交的Author信息可以通過(guò)git log查看
$git log
commit 6554439743d91d424e006734cfe7fca758b21b81
Author: username
Date: Wed Sep 19 16:14:20 2012 +0800
add driver of ltr558 to jb-8x25-fc
Change-Id: Ic81c54f91874be3b4366a2af9729a0251f44f40c
配置全局的用戶名和郵箱
git config --global user.name "Your Name"
git config --global user.email you@example.com
全局的通過(guò)vim ~/.gitconfig來(lái)查看
git config user.name "Your Name"
git config user.email you@example.com
局部的通過(guò)當(dāng)前路徑下的 .git/config文件來(lái)查看
也可以修改提交的用戶名和Email:
git commit --amend --author='Your Name '
[轉(zhuǎn)載]git config的運(yùn)用
本文中所演示的git操作都是在v1.7.5.4版本下進(jìn)行的蔬捷,不同的版本會(huì)有差異企巢,更老的版本有些選項(xiàng)未必支持。
當(dāng)我們安裝好git軟件包丑念,或者著手在一個(gè)新的機(jī)子上使用git的時(shí)候涡戳,我們首先需要進(jìn)行一些基本的配置工作,這個(gè)就要用到git config脯倚。
git config是用于進(jìn)行一些配置設(shè)置渔彰,有三種不同的方式來(lái)指定這些配置適用的范圍:
1) git config
針對(duì)一個(gè)git倉(cāng)庫(kù)
2) git config --global 針對(duì)一個(gè)用戶
3) sudo git config --system 針對(duì)一個(gè)系統(tǒng),因?yàn)槭轻槍?duì)整個(gè)系統(tǒng)的推正,所以必須使用sudo
-
第一種默認(rèn)當(dāng)前目錄是一個(gè)git倉(cāng)庫(kù)恍涂,假設(shè)我們有一個(gè)倉(cāng)庫(kù)叫g(shù)it_test,它所修改配置保存在git_test/.git/config文件植榕,如果當(dāng)前目錄不是一個(gè)有效的git倉(cāng)庫(kù)再沧,在執(zhí)行一些命令時(shí)會(huì)報(bào)錯(cuò),例如:
$git config -e fatal: not in a git directory
我們來(lái)看一個(gè)簡(jiǎn)單的例子尊残,一般我們clone一個(gè)git倉(cāng)庫(kù)炒瘸,默認(rèn)都是一個(gè)工作目錄淤堵,那么對(duì)應(yīng)的配置變量 bare = false。來(lái)看一個(gè)很簡(jiǎn)單的倉(cāng)庫(kù)的config文件顷扩,cat git_test/.git/config
[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
如果我們想修改bare為false拐邪,最簡(jiǎn)單的辦法就是直接用vim打開(kāi)git_test/.git/config文件進(jìn)行修改,另一種辦法就是使用git config來(lái)修改
$git config core.bare true
$cat .git/config
[core]
repositoryformatversion = 0
filemode = true
bare = true
logallrefupdates = true
命令的格式就是 git config
. 隘截。需要注意的是我們沒(méi)有加--system和--global扎阶,那么這個(gè)修改只針對(duì)于當(dāng)前git倉(cāng)庫(kù),其它目錄的倉(cāng)庫(kù)不受影響技俐。
-
第2種是適用于當(dāng)前用戶乘陪,也就是說(shuō)只要是這個(gè)用戶操作任何git倉(cāng)庫(kù),那么這個(gè)配置都會(huì)生效雕擂,這種配置保存在~/.gitconfig當(dāng)中啡邑,那什么樣的配置需要放到用戶的配置文件里呢,git里一個(gè)最為重要的信息就是提交者的個(gè)人信息井赌,包括提交者的名字谤逼,還有郵箱。當(dāng)我們?cè)谟胓it提交代碼前仇穗,這個(gè)是必須要設(shè)置的流部。顯而易見(jiàn),這個(gè)配置需要放在用戶一級(jí)的配置文件里纹坐。
$git config --global user.name "I Love You" $git config --global user.email "i.love.you@gmail.com" $cat ~/.gitconfig [user] name = I Love You email = i.love.you@gmail.com
-
第3種是適用于一個(gè)系統(tǒng)中所有的用戶枝冀,也就是說(shuō)這里的配置對(duì)所有用戶都生效,那什么樣的配置需要放在這里呢耘子,比如我們?cè)趫?zhí)行g(shù)it commit會(huì)彈出一個(gè)默認(rèn)的編輯器果漾,一般是vim,那作為系統(tǒng)的管理員谷誓,可以將vim設(shè)置為所有用戶默認(rèn)使用的編輯器绒障,我們來(lái)看設(shè)置的過(guò)程
$sudo git config --system core.editor vim $cat /etc/gitconfig [core] editor = vim
我們可以看到它修改的是全局的配置文件/etc/gitconfig。
總結(jié):
現(xiàn)在我們就會(huì)有一個(gè)問(wèn)題捍歪,當(dāng)我們?cè)诓煌呐渲梦募谢瑁瑢?duì)同一個(gè)變量進(jìn)行了設(shè)置,最終哪個(gè)會(huì)生效呢糙臼?或者說(shuō)誰(shuí)到底覆蓋誰(shuí)呢庐镐?先來(lái)排除一種情況,就是分屬不同的兩個(gè)git倉(cāng)庫(kù)的config文件中的配置是互不影響的变逃, 這個(gè)很好理解焚鹊。那么要討論是如果一個(gè)配置出即出現(xiàn)在/etc/gitconfig,~/.gitconfig以及git_test/.git /config這三個(gè)位置時(shí),我們又恰巧要操作git倉(cāng)庫(kù)git_test末患,那么生效的優(yōu)先級(jí)順序是(1)git_test/.git/config研叫,(2)~/.gitconfig,(3)/etc/gitconfig璧针,也就是說(shuō)如果同一個(gè)配置同時(shí)出現(xiàn)在三個(gè)文件中時(shí)嚷炉,(1)有效。
那么為什么會(huì)有這樣的情況發(fā)生呢探橱,比如我們前面的有關(guān)編輯器設(shè)置申屹,系統(tǒng)管理員為所有用戶設(shè)置了默認(rèn)的編輯器是vim,但是并不是每個(gè)用戶都習(xí)慣用vim隧膏, 有些人更青睞于功能更炫的emacs(I hate it哗讥,我剛剛接觸linux的時(shí)候上來(lái)就是用的emacs,讓我這個(gè)新手不知所措胞枕,但是后來(lái)使了vim杆煞,覺(jué)得更容易上手,而且用的時(shí)間長(zhǎng)了腐泻,對(duì)vim了解 更深决乎,發(fā)現(xiàn)它功能一樣強(qiáng)大,而且它可以算是類unix系統(tǒng)中默認(rèn)的編輯器)派桩,言歸正傳构诚,如果你想用emacs,你就可以將這個(gè)配置加入到你 的~/.gitconfig中铆惑,這樣它就會(huì)覆蓋系統(tǒng)/etc/gitconfig的配置范嘱,當(dāng)然這只針對(duì)于你,其他用戶如果不設(shè)置還是會(huì)用vim员魏。
$git config --global core.editor emacs
$cat ~/.gitconfig
[core]
editor = emacs
對(duì)于git config只介紹到這丑蛤,其實(shí)除了以上講解的部分,它還有很多功能逆趋。本文中主要是針對(duì)介紹不同范圍內(nèi)設(shè)置的配置的有效范圍,了解它之后晒奕,當(dāng)以后需要對(duì) git進(jìn)行環(huán)境配置時(shí)闻书,你就明白根據(jù)當(dāng)前配置的性質(zhì),明白是該放在git_test/.git/config脑慧,還是在~/.gitconfig魄眉,又或是在 /etc/gitconfig中,作為一個(gè)資深的版本管理者來(lái)說(shuō)闷袒,必須要了解以上的區(qū)別坑律。