2012-03-09 11 views
13

का उपयोग कर किसी विशिष्ट लेखक द्वारा गिट प्रतिबद्धता को रोकें मेरी योजना/etc में परिवर्तनों का ट्रैक रखने के लिए गिट का उपयोग करना है, लेकिन जब मैं इसे बदलना चाहता हूं तो व्यक्ति स्वयं को जोड़कर लेखक के रूप में निर्दिष्ट करना चाहता हूं - कमांडलाइन पर अधिकृत विकल्प।प्री-प्रतिबद्ध हुक

तो मैं रूट के रूप में आकस्मिक काम करना बंद करना चाहता हूं।

मैंने इस प्री-प्रतिबद्ध हुक को बनाने की कोशिश की लेकिन यह काम नहीं कर रहा है - गिट var अभी भी रूट लौट रहा है भले ही मैं प्रतिबद्ध लाइन पर लेखक निर्दिष्ट करता हूं।

AUTHOR=`git var GIT_AUTHOR_IDENT | sed -n 's/^\(.*>\).*$/\1/p'` 
if [ "$AUTHOR" == "root <[email protected]>" ]; 
then 
    echo "Please commit under your own user name instead of \"$AUTHOR\":" 
    echo 'git commit --author="Adrian"' 
    echo "or if your name is not already in logs use full ident" 
    echo 'git commit --author="Adrian Cornish <[email protected]>"' 
    exit 1 
fi 
exit 0 
+1

यह वहाँ एक रास्ता इस जानकारी पर प्राप्त करने के लिए होने के लिए प्रतीत नहीं होता है आश्चर्य की बात है। मैं पुष्टि कर सकता हूं कि 'गिट var GIT_AUTHOR_IDENT' मूल लेखक को दिखाता है, न कि '--Author' के माध्यम से प्रदान किया गया ... – Borealid

+0

स्पर्शशील रूप से https://gist.github.com/tripleee/16767aa4137706fd896c – tripleee

उत्तर

10

Git के वर्तमान संस्करण --author जानकारी वातावरण चर, कमांड लाइन तर्क, या stdin के माध्यम से Git हुक करने के लिए उपलब्ध नहीं है। हालांकि, बजाय --author कमांड लाइन के उपयोग की आवश्यकता होती है, तो आप उन GIT_AUTHOR_NAME और GIT_AUTHOR_EMAIL वातावरण चर सेट करने के लिए निर्देश दे सकते हैं:

#!/bin/sh 
AUTHORINFO=$(git var GIT_AUTHOR_IDENT) || exit 1 
NAME=$(printf '%s\n' "${AUTHORINFO}" | sed -n 's/^\(.*\) <.*$/\1/p') 
EMAIL=$(printf '%s\n' "${AUTHORINFO}" | sed -n 's/^.* <\(.*\)> .*$/\1/p') 
[ "${NAME}" != root ] && [ "${EMAIL}" != "[email protected]" ] || { 
    cat <<EOF >&2 
Please commit under your own name and email instead of "${NAME} <${EMAIL}>": 
GIT_AUTHOR_NAME="Your Name" GIT_AUTHOR_EMAIL="[email protected]" git commit 
EOF 
    exit 1 
} 

--author तर्क की तरह, इन वातावरण चर के लिए प्रतिबद्ध के लेखक नियंत्रित करते हैं। चूंकि ये पर्यावरण चर गिट के पर्यावरण में हैं, वे pre-commit हुक के वातावरण में भी हैं। और क्योंकि वे pre-commit हुक के वातावरण में हैं, इसलिए उन्हें git var GIT_AUTHOR_IDENT पर भेज दिया गया है जो उन्हें git commit करता है।

दुर्भाग्यवश, इन चरों को सेट करना --author का उपयोग करने से बहुत कम सुविधाजनक है। मैं सुझाव देता हूं कि गिट डेवलपर्स से संपर्क करें और अनुरोध करें कि वे pre-commit हुक लॉन्च करने से पहले इन पर्यावरण चर (--author के माध्यम से पारित मूल्य का उपयोग करके) सेट करें।

+0

धन्यवाद यह ठीक है जैसा मैं करता हूं चाहता था। मैंने GIT_AUTHOR_NAME और GIT_AUTHOR_EMAIL पर गिट var की कोशिश की और यह हमेशा खाली था - यह बताता है कि क्यों। –

+0

यह सही नहीं है, जीआईटी 2.7.4 (मैबी भी पहले) के साथ काम करता प्रतीत होता है। 'प्री-प्रतिबद्ध 'हुक में' echo $ GIT_AUTHOR_NAME' को डालकर लेखक का नाम प्रिंट करता है (या तो गिट कॉन्फ़िगर में एक सेट या' - Author' के माध्यम से पारित किया गया)। इसके अलावा 'गिट var GIT_AUTHOR_IDENT'' - लेखक 'के साथ काम करता प्रतीत होता है। – lumbric

0

मैंने सिस्टम का उपयोग करके इसे निम्नलिखित में उपयोग किया .bashrc।

यह उन लोगों को पकड़ नहीं पाएगा जो वास्तव में रूट में रहते हैं और उस खोल में रहते हैं, (बुरा!) लेकिन यह मेरे लॉग उपयोगी रहता है जब लोक सिर्फ सूडो का उपयोग करते हैं। मैं भी गिट के साथ एक/etc changelog रखने की कोशिश कर रहा हूं - इसलिए मैं देख सकता हूं कि महीने-दर-महीने क्या किया गया है।

#I want everyone to check in changes to /etc files, but also want their names even when they use sudo. 
export GIT_COMMITTER_EMAIL=${USER}@ourcompany.co.nz 
export GIT_AUTHOR_EMAIL=${USER}@ourcompany.co.nz 

https://serverfault.com/questions/256754/correct-user-names-when-tracking-etc-in-git-repository-and-committing-as-root

संबंधित मुद्दे