उपयोगकर्ता नाम सही करते समय / आदि / गिट रिपॉजिटरी में ट्रैकिंग और रूट के रूप में


13

हम /etc/अपने सर्वर पर परिवर्तनों को ट्रैक करने के लिए git का उपयोग करते हैं।

व्यवस्थापक / etc / में फ़ाइलें बदलते समय रूट के रूप में कार्य करते हैं, और इस प्रकार उनके कमिट में लेखक होते हैं

root <root@machinename>

यह बहुत संतोषजनक नहीं है क्योंकि आप यह नहीं देख सकते कि वास्तव में किस व्यवस्थापक ने परिवर्तन किया है।

Git लॉग में वास्तविक व्यवस्थापक नाम प्राप्त करने के लिए हम क्या कर सकते हैं? मुझे नहीं लगता है कि रिपॉजिटरी का एक स्थानीय क्लोन रखना संभव है क्योंकि हम अक्सर कुछ काम करने तक अंतरिम रूप से बदलते हैं, और एक बदलाव-कमिट-पुश-सी-एरर-रिपीट चक्र यहां मदद नहीं करेगा।


वास्तविक जड़ के रूप में, या मूल करने के लिए sudo'd?
डेकाडो

वर्तमान में वास्तविक मूल (ssh रूट @ या "सु", नो
सूडो

का प्रयोग करें etckeeper, यह इस तरह के संस्करण / आदि में अजीब gotchas का ख्याल रखता है। प्रति-उपयोगकर्ता खातों का उपयोग करना भी शुरू करें और sudo
कालेब

जवाबों:


12

Git लेखक और committer नाम वातावरण चर के साथ प्रभावित हो सकता है GIT_COMMITTER_NAME, GIT_COMMITTER_EMAIL, GIT_AUTHOR_NAMEऔर GIT_AUTHOR_EMAIL

अब ट्रिक उन चरों को SSH से जोड़ते हुए रिमोट सर्वर में जमा करना है:

  1. अपनी ~/.bashrcफ़ाइल में चर को परिभाषित और निर्यात करें :

    export GIT_AUTHOR_NAME="Christian Weiske"
    
  2. समायोजन करके SSH कनेक्शन के साथ स्वचालित रूप से उन्हें भेजें ~/.ssh/config:

    SendEnv LANG LC_* GIT_*
    

    LANGऔर LC_*neccesary नहीं हैं, लेकिन डेबियन उनके डिफ़ॉल्ट ssh_config में है, इसलिए मैंने सोचा कि मुझे उन्हें भी प्रस्तुत करना चाहिए,

  3. दूरस्थ सर्वर पर, पर्यावरण चर को स्वीकार करने के लिए sshd विन्यास को समायोजित करें :/etc/ssh/sshd_configGIT_*

    AcceptEnv LANG LC_* GIT_*
    

Voila - एक git commitजड़ के रूप में /etc/होता है:

commit 8a4654f13241f05361283a88ce041a0fc24b8ac6
Author: Christian Weiske <christian.weiske@netresearch.de>

यदि भविष्य में कुछ समय के लिए सर्वरफ़ॉल्ट दोष हो जाता है: http://cweiske.de/tagebuch/carry-git-settings.htm


5

सबसे पहले, और आपके प्रश्न से संबंधित नहीं है, मैं आपसे आग्रह करूंगा कि आप लॉगिन का उपयोग करने के लिए तुरंत रोकें और उपयोगकर्ता लॉगिन और इसके बजाय का उपयोग करें । अपने लॉगइन को केवल सांत्वना देने के लिए प्रतिबंधित करें , या नहीं भी।rootsusudoroot

उस ने कहा, git commitएक --authorविकल्प है जो आपको वहां मदद कर सकता है:

# git commit --author='Author Name <author@email.address.com>' -a

आप सेट GIT_AUTHOR_NAMEऔर GIT_AUTHOR_EMAILचर के लिए प्रति उपयोगकर्ता पर्यावरण चर का सावधानीपूर्वक उपयोग कर सकते हैं । लॉग में, यह अलग-अलग लेखक और एक ही कमिटर ( root@host) दिखाई देगा , लेकिन यह आपको अधिक ऑडिटिंग देगा। बेशक इसका मतलब है कि आप चर को बनाए रखने के लिए अपने प्रवेश पर भरोसा करते हैं। जैसा कि प्रत्येक एक विशिष्ट शेल का उपयोग कर रहा है, वे sudoअपने विशिष्ट gitचर के साथ एक फ़ाइल को रूट और स्रोत कर सकते हैं , हर एक को कमिट पर अलग-अलग पहचानते हैं। बहुत व्यावहारिक नहीं है, लेकिन आप स्क्रिप्ट के साथ भी इसे स्वचालित कर सकते हैं।

संपादित करें: निश्चित रूप से @ScottPack द्वारा नियुक्त किया गया एक बेहतर तरीका है, कठपुतली या बावर्ची जैसी कॉन्फ़िगरेशन प्रबंधन प्रणाली का उपयोग करना और केंद्रीय सर्वर पर परिवर्तनों को ट्रैक करने के लिए गिट का उपयोग करना और वास्तविक सर्वरों पर नहीं, ताकि प्रत्येक व्यवस्थापक के पास एक कार्यशील प्रति हो सके। विन्यास का।


--authorनिश्चित रूप से संभव है, लेकिन लोग अपने सामान्य वर्कफ़्लो में इसका उपयोग नहीं करते हैं क्योंकि यह लिखना बहुत अधिक है। Sudo का उपयोग करने के अपने दूसरे विचार पर: मैं उन लोगों में से एक हूं जो sudo को हानिकारक मानते हैं और केवल ssh कीज़ के साथ ssh रूट एक्सेस का उपयोग करते हैं। और हां, हमें अपने प्रवेश पर भरोसा है।
cweiske

5
@cweiske आप सूडो को हानिकारक क्यों मानते हैं?
coredump

1
@cweiske क्या आपने एक रैपर स्क्रिप्ट पर विचार किया है जो महत्वपूर्ण जानकारी के लिए कमिटर से पूछताछ करता है (वे कौन हैं, वे क्या बदल गए, परिवर्तन क्यों किया गया, यदि लागू हो तो टिकट नंबर)? नियोजन को लागू करने के लिए रैपरों के साथ DNS परिवर्तनों के लिए मेरे अंतिम स्थान पर समान सिस्टम (CVS- आधारित) था - आश्चर्यजनक रूप से अच्छी तरह से काम करता है।
voretaq7

4
@cweiske मैं आपके आकलन से एक सा सहमत नहीं हूं। आप ssh कुंजी पासवर्ड कैश करने के लिए एक ssh एजेंट का उपयोग कर सकते हैं और माइंडलेस रूप से रूट मशीन में लॉग इन कर सकते हैं, या रूट पासफ़्रेज़ की तुलना में अपनी मशीन पर केवल एक साधारण पासफ़्रेज़ या उसी पासवर्ड का उपयोग कर सकते हैं, जबकि sudoआप उपयोगकर्ता को पासवर्ड टाइप करने के लिए बाध्य करते हैं (यहां तक ​​कि यदि वह अपने उपयोगकर्ता के रूप में लॉग इन करने के लिए ssh कुंजी का उपयोग करता है) और आप नियंत्रित कर सकते हैं कि उपयोगकर्ता क्या कर सकता है और मुख्य रूप से आपके पास ऑडिट ट्रेल है कि किसने क्या किया है। लेकिन हर कोई अपनी राय का हकदार है।
coredump

2
आप sudoप्रत्येक कमांड के लिए पासवर्ड दर्ज करने के लिए उपयोगकर्ता को बाध्य करने के लिए भी कॉन्फ़िगर कर सकते हैं ( timestamp_timeout = 0)। शायद विकास और मचान बक्से के लिए उपयुक्त नहीं है, लेकिन निश्चित रूप से उत्पादन के लिए उपयुक्त है। IMHO, SF सर्वसम्मति के आधार पर, आपको अपने विचारों पर पुनर्विचार करना चाहिए sudo। एसएफ के बारे में महान चीजों में से एक साथियों का एक समुदाय है जो वास्तव में अपने श * टी :-) जानते हैं।
बेलमिन फर्नांडीज

3

पोटीन के साथ आप इसे "कनेक्शन -> डेटा -> पर्यावरण चर" के तहत सेट कर सकते हैं।

वे भी suजड़ से ' ' के बाद मौजूद हैं ।


3

यदि आप ssh कुंजियों का उपयोग करके अपने सर्वर पर उपयोगकर्ता खातों का प्रावधान करते हैं, तो आप वास्तव में सेटअप समय में प्राधिकृत कुंजी के लिए वातावरण चर संलग्न कर सकते हैं - उदाहरण के लिए ~ bob / .ssh / अधिकृत_keys में।

environment="GIT_AUTHOR_NAME=Bob Smith",environment="GIT_AUTHOR_EMAIL=bob.smith@megacorp.com" ssh-rsa AAAA.... bob.smith@megacorp.com

इस तरह से जब उपयोगकर्ता SSH को स्वचालित रूप से इन envs सेटअप करता है - स्थानीय क्लाइंट से उन्हें अग्रेषित करने के लिए उनके लिए कोई आवश्यकता नहीं है। बोनस अंक यदि आपके पास पहले से ही यह जानकारी है और एक कॉन्फ़िगर प्रबंधन प्रणाली से अधिकृत_कीप को कॉन्फ़िगर कर रहा है।

नोट: उपरोक्त PermitUserEnvironment yessshd_config की आवश्यकता है


1

यदि आप उपयोग कर रहे हैं sudoऔर आपके गैर-रूट उपयोगकर्ता के पास उनकी घरेलू निर्देशिका है:

git -c include.path=<file>में कॉन्फ़िगरेशन शामिल करेगा <file>

अपने गैर-रूट उपयोक्ता विन्यास फाइल में स्वतः खींचने के लिए, मैं bashउपनाम का उपयोग करता हूं :

alias gsudo='sudo git -c "include.path='"${XDG_CONFIG_DIR:-$HOME/.config}/git/config\" -c \"include.path=$HOME/.gitconfig\""

फिर मैं दोनों के gsudoबजाय उपयोग करता हूं git:

  • रूट के रूप में चलाएं
  • सभी गैर-रूट उपयोगकर्ता गिट विन्यास तक पहुँच प्राप्त करें

जांचें कि कॉन्फ़िगरेशन वास्तव में आयात किया जा रहा है:

gsudo config --list --show-origin --includes | less

0

Coredump के उत्तर के अलावा आप .git/configफ़ाइल में इन विकल्पों को रिपॉजिटरी की अपनी कार्यशील प्रतिलिपि (हाथ से, या git configकमांड का उपयोग करके) में भी सेट कर सकते हैं ।

man git-configकमांड के बारे में अधिक जानकारी के लिए देखें और शांत चीजें जो आप इसके साथ कर सकते हैं।


यह केवल तभी काम करता है जब कोई व्यवस्थापक उस मशीन पर उस रेपो में कमिट करता है, लेकिन यह कई एडमीन्स के साथ विफल हो जाता है।
cweiske

यह सच है - यह एक ऐसी स्थिति के लिए अधिक उपयुक्त है जहां आपके पास एक केंद्रीय भंडार है और लोग उस रेपो को क्लोन / पुश / पुश करते हैं।
voretaq7
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.