दिलचस्प पोस्ट
कैसे प्रक्रिया को पृष्ठभूमि के रूप में चलाने के लिए और मरने कभी नहीं? socket.io और सत्र? Php का उपयोग करते हुए json पोस्ट भेजें स्विफ्ट: कॉल में अतिरिक्त तर्क 'त्रुटि' डॉकरफाइल के साथ निजी जीआईटी रेपो क्लोन करें MySQL में लैग फ़ंक्शन को सिमुलेट करें कस्टम फॉर्म में Django समय / दिनांक विजेट का उपयोग करना जावा में यूआरएल से जेएसएन को पढ़ने का सबसे आसान तरीका दो अलग जावा डेस्कटॉप अनुप्रयोगों के बीच संचार स्ट्रिंग को जोड़ने के लिए LINQ का उपयोग करना ट्विटर एप्लिकेशन के लिए एंड्रॉइड इन्टेंट Google Play और OpenSSL चेतावनी संदेश पता लगाने के लिए कि डिवाइस टचस्क्रीन है, मीडिया क्वेरी क्या ऐरे के साथ अनूठा_पीटआर के लिए कोई फायदा है? लम्बाई की सूची में आदिम लम्बे की एक सरणी परिवर्तित करें

गीट पुश त्रुटि: ऑब्जेक्ट को रिपॉज़िटरी डेटाबेस में जोड़ने के लिए अपर्याप्त अनुमति

जब मैं एक साझा किए गए git रिमोट को पुश करने की कोशिश करता हूं, तो मुझे निम्न त्रुटि मिलती है: insufficient permission for adding an object to repository database

फिर मैंने यहां एक फिक्स के बारे में पढ़ा: फिक्स यह अगले धक्का के लिए काम किया, क्योंकि सभी फाइलें सही समूह की थीं, लेकिन अगली बार जब किसी ने बदलाव को धक्का दिया तो ऑब्जेक्ट फ़ोल्डर में एक नया आइटम बनाया जिसमें उसका डिफॉल्ट समूह था समूह के रूप में केवल एक चीज जो मैं सोच सकता हूँ वह उन वस्तुओं के लिए सभी डेवलपर के डिफ़ॉल्ट समूह को बदलना है जो वे जांचते हैं, लेकिन यह हैक की तरह लगता है। कोई विचार? धन्यवाद।

वेब के समाधान से एकत्रित समाधान "गीट पुश त्रुटि: ऑब्जेक्ट को रिपॉज़िटरी डेटाबेस में जोड़ने के लिए अपर्याप्त अनुमति"

मरम्मत अनुमतियां

आपके द्वारा अंतर्निहित कारणों को पहचानने और तय करने के बाद (नीचे देखें), आप अनुमतियों की मरम्मत करना चाहते हैं:

 cd /path/to/repo.git chgrp -R groupname . chmod -R g+rwX . find . -type d -exec chmod g+s '{}' + 

यदि आप अंतर्निहित कारण को ठीक नहीं करते हैं, तो त्रुटि वापस आती रहती है और आपको ऊपर दिए गए आदेशों को बार-बार फिर से चालू रखना होगा।

अंतर्निहित कारण

त्रुटि निम्न में से किसी एक के कारण हो सकती है:

  • रिपॉजिटरी को एक साझा भंडार बनने के लिए कॉन्फ़िगर नहीं किया गया है (देखें git help config में core.sharedRepository ) यदि का उत्पादन:

     git config core.sharedRepository 

    group या true नहीं true या 1 या कुछ मुखौटा नहीं, चलने का प्रयास करें:

     git config core.sharedRepository group 

    और उसके बाद पुनरावर्ती chmod और chgrp को फिर से चलाएं (ऊपर " chgrp मरम्मत" देखें)।

  • ऑपरेटिंग सिस्टम सेटगैड बिट को निर्देशिकाओं पर व्याख्या नहीं करता है क्योंकि "सभी नई फ़ाइलें और उप-डायरेक्टरीज समूह के स्वामी के पास होनी चाहिए"।

    जब core.sharedRepository true या group , तो core.sharedRepository ऑपरेटिंग सिस्टम की सुविधा पर निर्भर करता है (जैसे, हर लिनक्स वितरण) यह सुनिश्चित करने के लिए कि नवनिर्मित सबडिरेक्टरीज का सही समूह (समूह है कि सभी रिपॉजिटरी के उपयोगकर्ता हैं) के स्वामित्व में हैं यह सुविधा जीएनयू कोरुल्टी दस्तावेजों में दर्ज़ है :

    … [यदि] एक निर्देशिका सेट-समूह-आईडी बिट सेट किया गया है, तो नव निर्मित सबफ़ाइल डायरेक्टरी के रूप में एक ही समूह को प्राप्त करते हैं, और नवनिर्मित उपनिर्देशिका मूल निर्देशिका के सेट-समूह-आईडी बिट को प्राप्त करते हैं। … [इस तंत्र की मदद से] उपयोगकर्ता फ़ाइलों को अधिक आसानी से साझा करते हैं, नई फ़ाइलों को साझा करने के लिए chmod या chown का उपयोग करने की आवश्यकता को कम करके

    हालांकि, सभी ऑपरेटिंग सिस्टम में यह सुविधा नहीं है (नेटबीएसडी एक उदाहरण है)। उन ऑपरेटिंग सिस्टम के लिए, आपको यह सुनिश्चित करना चाहिए कि आपके सभी Git उपयोगकर्ताओं के पास एक ही डिफ़ॉल्ट समूह है वैकल्पिक रूप से, आप git config core.sharedRepository world रिपोजिटरी दुनिया चलाकर रिपॉजिटरी विश्व-लिखने योग्य बना सकते हैं (लेकिन सावधान रहें-यह कम सुरक्षित है)।

  • फ़ाइल सिस्टम सेटगिड बिट (उदाहरण के लिए, FAT) का समर्थन नहीं करता है। ext2, ext3, ext4 सभी सेटगिड बिट का समर्थन करते हैं जहाँ तक मुझे पता है, फाइल सिस्टम जो कि सेटगिड बिट का समर्थन नहीं करते हैं, वे समूह स्वामित्व की अवधारणा को भी समर्थन नहीं करते हैं, ताकि सभी फाइलों और निर्देशिकाओं को उसी समूह के स्वामित्व में रखा जा सके (जो समूह माउंट विकल्प है)। इस स्थिति में, सुनिश्चित करें कि सभी गिट उपयोगकर्ता समूह में हैं जो फ़ाइल सिस्टम में सभी फाइलों का मालिक है।
  • सभी गिट उपयोगकर्ताओं को एक ही समूह में नहीं हैं जो रिपॉज़िटरी निर्देशिकाओं का मालिक है। सुनिश्चित करें कि निर्देशिका पर समूह स्वामी सही है और सभी उपयोगकर्ता उस समूह में हैं

उबुंटू (या किसी भी लिनक्स) के लिए

प्रोजेक्ट रूट से,

 cd .git/objects ls -al sudo chown -R yourname:yourgroup * 

आप बता सकते हैं कि आपके नाम और अपने समूह को उस एलएस-अल कमांड से अधिकतर आउटपुट पर अनुमतियों को देखकर क्या होना चाहिए

नोट: सुडो रेखा के अंत में स्टार को याद रखें

sudo chmod -R ug+w .;

असल में, .git/objects फ़ाइल में लिखने की अनुमति नहीं होती है उपरोक्त लाइन निर्देशिका में सभी फाइलों और फ़ोल्डरों को अनुमति देता है।

मैं सिर्फ अपना समाधान जोड़ना चाहता था मेरे पास ओएस एक्स पर एक रेपो था जो कुछ निर्देशिकाओं और होम पर रूट का स्वामित्व था (जो कि मेरी यूज़र डायरेक्टरी है) जिस पर ऊपर उल्लिखित समान त्रुटि हुई थी।

समाधान सरल शुक्रिया था। टर्मिनल से:

 sudo chown -R Home projectdirectory 

यह डिबग करने का एक अच्छा तरीका अगली बार ऐसा होता है, दूरस्थ दूरस्थ रेपो में एसएसएच, ऑब्जेक्ट फ़ोल्डर में सीडी और एक ls -al

यदि आप अलग-अलग उपयोगकर्ता के साथ 2-3 फाइल देखते हैं: इस से समूह स्वामित्व समस्या है

मेरे साथ यह हुआ है कि कुछ विरासत स्क्रिप्ट हमारे जीआईटी रेपो का उपयोग करते हैं और आमतौर पर इसका मतलब है कि एक अलग (यूनिक्स) उपयोगकर्ता ने धक्का दिया / संशोधित फाइलें पिछले और आपके उपयोगकर्ता को उन फ़ाइलों को अधिलेखित करने की अनुमति नहीं है आपको साझा जीआईटी समूह बनाना चाहिए, जिसमें सभी जीआईटी-सक्षम उपयोगकर्ता आते हैं और फिर objects फ़ोल्डर को पुन: chgrp करते objects और यह सामग्री है ताकि समूह के स्वामित्व में साझा git समूह हो।

आपको फ़ोल्डर पर एक चिपचिपा बिट भी जोड़ना चाहिए ताकि फ़ोल्डर में बनाई गई सभी फाइलों में हमेशा git का समूह होगा।

chmod g + s निर्देशिका- नाम

अद्यतन: मुझे कोर के बारे में नहीं पता था। शेयर्ड रिपोजिटरी पता करने के लिए अच्छा है, हालांकि यह शायद सिर्फ उपरोक्त करता है

मेरे लिए हल … बस यह:

 sudo chmod 777 -R .git/objects 

यह आसानी से तब हो सकता है यदि आप एक अलग उपयोगकर्ता के साथ git init चलाते हैं, जिसकी बदले में बदलाव किए जाने के दौरान उपयोग करने की योजना है।

यदि आप आँख बंद करके [1] पर दिए गए निर्देशों का पालन करते हैं तो ऐसा होगा कि जैसा आपने संभवतः git-user को रूट के रूप में बनाया था और फिर तुरंत जीआईटी इनट पर ले जाया गया, बिना उपयोगकर्ता को बिना बदलाव किए।

[1] http://git-scm.com/book/en/Git-on-the-Server-Setting-Up-the-Server

आप कुछ सामान जोड़ने के बाद … उन्हें कमाने और सब खत्म हो जाने के बाद! बैंग !! सभी समस्याओं को शुरू करें … जैसा कि आपको ध्यान देना चाहिए कि रास्ते में कुछ भिन्नताएं हैं, दोनों नए और विद्यमान परियोजनाओं को परिभाषित किया गया था। यदि कोई अन्य व्यक्ति उसी फाइल को जोड़ने / प्रतिबद्ध / पुश करने की कोशिश करता है, या सामग्री (जीआईटी दोनों एक ही ऑब्जेक्ट के रूप में रखती है), तो हमें निम्न त्रुटि का सामना करना होगा:

 $ git push Counting objects: 31, done. Delta compression using up to 2 threads. Compressing objects: 100% (17/17), done. Writing objects: 100% (21/21), 2.07 KiB | 0 bytes/s, done. Total 21 (delta 12), reused 0 (delta 0) remote: error: insufficient permission for adding an object to repository database ./objects remote: fatal: failed to write object 

इस समस्या को हल करने के लिए आपको कुछ परिचालन प्रणाली की अनुमति प्रणाली को ध्यान में रखना होगा क्योंकि आप इस मामले में इसके द्वारा प्रतिबंधित हैं। आप समस्या को बेहतर समझते हैं, आगे बढ़ो और अपने git ऑब्जेक्ट के फ़ोल्डर (.git / objects) को चेक करें आप शायद ऐसा कुछ देखेंगे:

 <your user_name>@<the machine name> objects]$ ls -la total 200 drwxr-xr-x 25 <your user_name> <group_name> 2048 Feb 10 09:28 . drwxr-xr-x 3 <his user_name> <group_name> 1024 Feb 3 15:06 .. drwxr-xr-x 2 <his user_name> <group_name> 1024 Jan 31 13:39 02 drwxr-xr-x 2 <his user_name> <group_name> 1024 Feb 3 13:24 08 

* ध्यान दें कि उन फाइलों की अनुमतियां केवल आपके उपयोगकर्ताओं के लिए दी गई थी, कोई इसे कभी भी बदल नहीं सकता … *

 Level ugo Permission rwx rx --- Binary 111 101 000 Octal 7 5 0 

समस्या को सुलझाना

अगर आपके पास सुपर उपयोगकर्ता अनुमति है, तो आप आगे बढ़ सकते हैं और चरण 2 का उपयोग कर अपने आप सभी अनुमतियों को बदल सकते हैं, किसी भी अन्य मामले में आपको सभी उपयोगकर्ताओं से अपने उपयोगकर्ताओं के साथ बनाए गए ऑब्जेक्ट्स से पूछने की जरूरत होगी, यह जानने के लिए कि वे कौन हैं :

 $ ls -la | awk '{print $3}' | sort -u <your user_name> <his user_name> 

अब आप और सभी फाइल के मालिक उपयोगकर्ताओं को उन फाइलों को अनुमति देना होगा, जिससे:

 $ chmod -R 774 . 

उसके बाद आपको एक नई प्रॉपर्टी जोड़नी होगी जो कि –shared = समूह को नया रिपॉजिटरी के लिए किया जाता है, प्रलेखन के अनुसार, यह रिपॉजिटरी समूह-लिखने योग्य बनाता है, इसे क्रियान्वित करते हैं:

 $ git config core.sharedRepository group 

https://coderwall.com/p/8b3ksg

मेरे मामले के लिए सुझावों में से कोई भी काम नहीं किया। मैं विंडोज पर हूँ और यह मेरे लिए काम किया है:

  • रिमोट रेपो को दूसरे फ़ोल्डर में कॉपी करें
  • फ़ोल्डर साझा करें और उचित अनुमति दें।
  • सुनिश्चित करें कि आप अपने स्थानीय मशीन से फ़ोल्डर का उपयोग कर सकते हैं।
  • इस रेपो को अपने स्थानीय रेपो में एक और रिमोट रेपो के रूप में जोड़ें ( git remote add foo //SERVERNAME/path/to/copied/git )
  • फू को दबाएं git push foo master क्या यह काम किया? महान! अब नोट-रेपोज़ को हटा दें और इसे पहले से जो भी हो, उसका नाम बदलें। सुनिश्चित करें कि अनुमतियां और साझा संपत्ति समान रहती है

मैं इस एक ही मुद्दा को मारा यहां के आसपास पढ़ना मुझे एहसास हुआ कि यह फ़ाइल अनुमतियों का संदेश था जो संदेश का संदर्भ दे रहा था। तय, मेरे लिए, इसमें था:

/etc/inetd.d/git-gpv

यह git-daemon शुरू कर रहा था क्योंकि उपयोगकर्ता ' कोई नहीं ' इसलिए लेखन अनुमति की कमी थी।

 # Who When What # GPV 20Nov13 Created this by hand while reading: http://linuxclues.blogspot.co.uk/2013/06>/git-daemon-ssh-create-repository-debian.html # GPV 20Nov13 Changed owner (to user_git) otherise nobody lack permission to update the repository #git stream tcp nowait nobody /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo git stream tcp nowait user_git /usr/bin/git git daemon --inetd --verbose --enable=receive-pack --export-all /gitrepo 

(मुझे संदेह होता है कि उनके अन्य फाइलों को उनके जीआईटी-जीपीवी कहते हैं। सामान्यतः यह सीधे /etc/inetd.conf में होगा)

लिनक्स, मैकोज़:

 cd .git/ sudo chown -R name:group * 

जहां name आपका उपयोगकर्ता नाम है और group वह समूह है जो आपका उपयोगकर्ता नाम है।

आपको उस निर्देशिका पर पर्याप्त लिखने की अनुमति की आवश्यकता है जिसे आप आगे बढ़ रहे हैं।

मेरे मामले में: विंडोज 2008 सर्वर

जीआईटी रेपो निर्देशिका या पेरेंट डायरेक्टरी पर राइट क्लिक करें

गुण> शेयरिंग टैब> उन्नत शेयरिंग> अनुमतियां> सुनिश्चित करें कि उपयोगकर्ता के पास उचित एक्सेस अधिकार हैं

मुझे यह त्रुटि मिल रही है जब एक IDE (इस मामले में, PHPStorm) के माध्यम से पुश करने की कोशिश कर रहा है। जब मैंने टर्मिनल (ओएसएक्स) का इस्तेमाल किया तो उसने काम किया! इसलिए, यह स्पष्ट रूप से एक अनुमति समस्या है हालांकि मुझे यह नहीं पता कि स्थायी रूप से इसे कैसे तय करना है, इसका उपयोग करना

 $ sudo git push origin master 

चाल करेंगे

आप गलती नेस्टेड जीआईटी रिपॉजिटरी हो सकते हैं! यह इस त्रुटि का सबसे सामान्य स्रोत है