2012-04-29 17 views
9

ऐसा प्रतीत होता है Git ~/.gitconfigगिट कॉन्फिगर को अनदेखा करते हुए गिट?

$ git config --global core.filemode false 

$ git config -l 
core.filemode=false 
core.filemode=true 

अनदेखी कर रहा है तो अब वहाँ core.filemode के लिए 2 प्रविष्टियों रहे हैं और Git अभी भी अनदेखी नहीं कर रहा है filemode बदलता है

$ touch modetest 

$ git add . 

$ git commit -m test1 
[master (root-commit) 320cfe4] test1 
0 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 modetest 

$ chmod +x modetest 

$ git diff 
diff --git a/modetest b/modetest 
old mode 100644 
new mode 100755 

पर torek’s answer आधार पर, मैं अपने .bash_profile

को यह लाइन जोड़ा
[ -d .git ] && git config core.filemode false 

उत्तर

2

शायद थोड़ा overkill है, लेकिन Cygwin में यह मेरे लिए पर्याप्त मुद्दा अधिक में खुदाई करने के लिए परेशान। जब स्रोत कोड से गिट बनाया जाता है, तो यह फ़ाइल सिस्टम को जांचता है कि यह निष्पादन योग्य बिट्स को समझता है या नहीं।

मैं आगे बढ़ गया और मेरे सिग्विन सिस्टम पर स्रोत से गिट बनाया और इसे स्थानीय निर्देशिका में स्थापित किया, फिर मेरे पथ में बाइनरी जोड़ा। बुनियादी कदम हैं:

cd ~/ 
mkdir git 
cd git 
mkdir inst 
git clone -c core.autocrlf=false https://github.com/git/git.git 
cd git 
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/ 
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/ install 

फिर .bashrc के लिए कुछ इस तरह जोड़ें:

export PATH=/home/[username]/git/inst/bin:$PATH 
बेशक

, जब तक आप सभी का निर्माण निर्भरता Cygwin में स्थापित किया है कि निर्माण कार्य नहीं करेगा। थोड़ा सा पोकिंग के साथ मैं बिना किसी परेशानी के इसे करने में सक्षम था। अब उस सिस्टम पर गिट इनिट और गिट क्लोन फाइलमोड को गलत पर डिफ़ॉल्ट करता है। यह चाल निर्माण के लिए NO_TRUSTABLE_FILEMODE परिभाषित कर रही है।

15

जब कोई नया रेपो बनाना या पुन: प्रारंभ करना, git init फ़ाइल सिस्टम की जांच के परिणाम के आधार पर core.filemode के लिए हमेशा एक नया मान सेट करता है। तुम बस करने के लिए मैन्युअल होगा:

git config core.filemode false 

या:

git config --unset core.filemode 

यह आपके ~/.gitconfig में एक सम्मान करते हैं। यदि आप git init फिर से चलाते हैं तो प्रति-रेपो सेटिंग आपके सिस्टम पर true पर वापस जाएगी।

+3

पूरी तरह से सुनिश्चित नहीं है कि गिट वास्तव में इसे कैसे लागू करता है। मुझे स्रोत कोड में खोदना होगा। आह, यह है: यह गिट बिल्ड-टाइम कॉन्फ़िगरेशन आइटम 'NO_TRUSTABLE_FILEMODE' पर निर्भर करता है। यदि यह परिभाषित नहीं किया गया है, तो यह रनटाइम पर chmod-ing '.git/config' द्वारा परीक्षण करता है जो अंततः' .git/config.lock' 'के साथ बदल जाता है जो इसके अस्थायी chmod को मिटा देता है। अस्थायी संस्करण में यू + एक्स बिट सेट है; अगर यह chmod के बाद सेट रहता है, तो गिट का मानना ​​है कि एक्स बिट मायने रखता है। – torek

+0

यह सही समझ में आता है, लेकिन फिर भी निराशाजनक है, मुझे एक कंप्यूटर से एक परियोजना को दूसरी बार 5 गुना प्रतिलिपि बनाना था जब तक मुझे एहसास नहीं हुआ कि क्या हो रहा है)) धन्यवाद! –

+1

धन्यवाद, मुझे पता है कि 'git config --global core.fileMode false' बेकार है। गिट फ़ाइल मोड समस्या मैं इसे हर दिन मिला था।जब भी मैं एक नई परियोजना बनाता हूं तो मुझे उस सामान को कॉन्फ़िगर करना पड़ता था। –

0

(संपादित) तो फिर से शुरू करने, खिड़कियों पर हम क्या करने की जरूरत:

git config --global --unset core.filemode 
git config --unset core.filemode 
git config core.filemode false 

और तुम Git में एक खाली कॉन्फ़िग फ़ाइल नई Git फ़ोल्डर के लिए निर्देशिका स्थापित बना सकते हैं (init):

C:\bin\Git\share\git-core\templates>echo > config 
C:\bin\Git\share\git-core\templates>notepad config 

और अंदर डाल:

[core] 
filemode = false 
+0

गिट इनिट – Tanguy

+0

को ठीक करने के लिए टेम्पलेट के साथ अपडेट किया गया है, यहां तक ​​कि आपके संपादन के साथ, 'git init' अभी भी' filemode = true' –

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