2013-06-18 35 views
3

我正在使用兩個不同的Git存儲庫(即github和存儲),併爲每個我想要使用不同的電子郵件地址。我知道我可以使用git config,但我不想每次創建新工作區時都要記住這一點。所以,我想創建一個在命令行上設置電子郵件地址的別名。這可以做到嗎?如何在命令行中指定git電子郵件地址?

我想我可以創建一個腳本(而不是別名),將git config,但有沒有更簡單的方法來做到這一點?

+0

我不認爲有一個更簡單的方法..爲什麼它會有用不同的電子郵件地址,爲什麼它是一個要求,你有不同的回購協議有這麼多不同的電子郵件地址? - 不過--Karktik指定的內容,或者如你所說 - 腳本將是一條路。 – sircapsalot

+1

@sircapsalot,Github用於公共項目,Stash用於內部項目。我使用我的個人電子郵件Github和我的公司電子郵件Stash。爲什麼要求我在所有回購協議中只使用一個電子郵件地址? –

+0

對於您創建的每個回購,電子郵件地址是否會有所不同? –

回答

4

您可以使用以下(bash的風格)功能:

workgit() { 
    GIT_COMMITTER_NAME="Work Name" GIT_COMMITTER_EMAIL="[email protected]" GIT_AUTHOR_NAME="Work Name" GIT_AUTHOR_EMAIL="[email protected]" git "[email protected]" 
} 

homegit() { 
    GIT_COMMITTER_NAME="Home Name" GIT_COMMITTER_EMAIL="[email protected]" GIT_AUTHOR_NAME="Home Name" GIT_AUTHOR_EMAIL="[email protected]" git "[email protected]" 
} 

然後,你可以調用workgithomegit代替git強制給定的用戶名/電子郵件。

這不是一個理想的解決方案(因爲有時你只是想成爲提交者而不是作者,比如當你重新綁定或者修改補丁時),但只要你意識到這一點,你可以解決它。

+0

這個問題的方法非常棒。我很喜歡! –

1

如果您運行git config--global它會爲您的用戶在整個系統中保存它。沒有該標誌,它僅保存當前存儲庫的設置。存儲庫設置會覆蓋系統設置。

或者,如果您希望每次克隆時都避免鍵入,您可以簡單地將克隆包裝到腳本中並調用腳本。

#!/bin/sh 

USERNAME="My Name" 
EMAIL="[email protected]" 

git clone $1 $2 
cd $2 
git config user.email $USERNAME 
git config user.name $EMAIL 
cd - 

設置你的用戶名和電子郵件中的腳本並運行這樣的,哪些克隆庫到一個名爲my_folder文件夾。

./clone.sh https://github.com/libgit2/libgit2.git my_folder 
+0

是的,我知道我可以使用'git config'。我說我不想每次創建工作區時都要記住這樣做。 IOW,如果我使用'git config --global user.email',我仍然必須記得在創建工作區時,只要我想覆蓋設置,就要執行'git config user.email'。 –

+0

試試我剛剛添加的腳本。真正做到這一點的唯一方法是腳本(並且包裝'git clone')或給自己一個命令行別名,以便在每次克隆後運行。顯然,您可以增強腳本以指定用戶名/電子郵件對,或根據您需要的更精確的內容。 – kgraney

2

轉到您的回購協議的根源,編輯.git/config文件

在這裏,你可以把這個放在上面

[user] 
    email     = [email protected] 
    name     = Full Name 

從本質上講,你是單獨設置這些憑據回購(而不是的全球)

黑客

此功能添加到您的.bashrc和回購

wgit() { 
    echo "[user]" >> .git/config 
    echo " email = [email protected]" >> .git/config 
    echo " name = Full Name" >> .git/config 
} 
+0

我不得不記得每次我想重寫設置時都這樣做。 –

+0

在repo的git配置中設置此設置將覆蓋全局。只需將其添加到您的工作倉庫中,其餘部分將使用全局配置設置 – Kartik

+0

我有多個(大約幾十個)工作空間。我爲我正在處理的每個任務創建一個新的。 –

1

你可以使用一個小的shell腳本來初始化存儲庫運行wgit。就像這樣:

#!/bin/sh 
git init 
if [ "$1" = 'g' ]; 
then 
    git config user.email <Github email> 
fi 

if [ "$1" = 's' ]; 
then 
    git config user.email <Stash email> 
fi 
email=$(git config user.email) 
echo "Created repository with $email" 

我知道我有點晚,但它花了一些時間來寫吧...

1
$ git config --global user.email='my-personal-email-address' 

$ cat stash 
#!/bin/bash 

git config user.email='my-company-email-address' 
git "[email protected]" 

周華健的解決方案是我的目的,最好的一個,但我如果有其他人喜歡,請留下這個。