2011-11-30 10 views
6

मैं अपने भंडार में एक स्रोत फ़ाइल (इसे किसी संग्रह को क्लोन करता है) में शामिल करना चाहता हूं लेकिन डिफ़ॉल्ट रूप से इसे अनदेखा कर बदलता है।गिट एक फ़ाइल शामिल करें लेकिन इसके परिवर्तनों को अनट्रैक किया गया है

git update-index --assume-unchanged ... काम नहीं करता है क्योंकि यह केवल स्थानीय सूचकांक करने के लिए लागू होता है। मैं चाहता हूं कि सभी उपयोगकर्ताओं को डिफ़ॉल्ट रूप से अनदेखा प्रश्न में फ़ाइल हो।

.gitignore काम नहीं करता है क्योंकि अगर मैं git add -f .. के माध्यम से फ़ाइल ट्रैक करता हूं, तो इसमें परिवर्तन ट्रैक किए जाते हैं।

मैं प्राप्त करने के लिए क्या हुआ अगर मैं svn add फ़ाइल एड होगा कोशिश कर रहा हूँ तो svn:ignore यह एड।

संपादित करें:

ऐसा लगता है कि यह सिर्फ Git में संभव नहीं है और मैं स्रोत फ़ाइल संगठन और निर्माण कि इस पुरानी सबवर्सन व्यवहार पर भरोसा बदल दिया है।

उदाहरण:

$ git clone [email protected]:gsmith/sandbox.git 
snip... 
$ cd sandbox/ 
$ ls -a 
. .. .git .gitignore gitignored tracked 
$ cat .gitignore 
gitignored 

$ echo foo >> gitignored 
$ git status 
# On branch master 
# Changes not staged for commit: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
# modified: gitignored 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

मैं इस फ़ाइल चाहते हैं पर ध्यान नहीं दिया है।

$ git reset --hard HEAD 
HEAD is now at 34b1f3d initial setup 
$ git rm gitignored 
rm 'gitignored' 
$ git commit -m "test" 
[master cd8199d] test 
1 files changed, 0 insertions(+), 1 deletions(-) 
delete mode 100644 gitignored 
$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 
$ ls -a 
. .. .git .gitignore tracked 

$ echo foo >> gitignored 
$ git status 
# On branch master 
# Your branch is ahead of 'origin/master' by 1 commit. 
# 
nothing to commit (working directory clean) 

अब इसे अनदेखा किया गया है। हालांकि, जो भंडार क्लोन करता है उसे gitignored की सामग्री नहीं मिलेगी।

+0

कोई '.svnignore' नहीं है, केवल svn: संपत्ति को अनदेखा करें – manojlds

+0

@manojlds, धन्यवाद, मैंने सवाल को सही कर दिया है। –

उत्तर

0
  1. फ़ाइल को अपने रेपो विशिष्ट .gitignore पर जोड़ें।
  2. यह पहले से ही पता लगाया है, तो (आपका मामला हो सकता है), बस git rm --cached myfile है।

आशा है कि आप यही चाहते हैं। यदि नहीं, तो आप this पर एक नज़र डाल सकते हैं।

0

अपने शीर्षक अलग तरीके से व्यक्त करने के लिए: यदि आप किसी फ़ाइल को ट्रैक करना चाहते हैं, लेकिन यह करने के लिए परिवर्तन ट्रैक न किए गए है। यह उतना ही विरोधाभास है जितना लगता है। संभवतः आपके पास कुछ फ़ाइल है जो स्थानीय तरीकों से बदल जाती है जो भंडार के अन्य उपयोगकर्ताओं के लिए सार्थक नहीं हैं, बल्कि इसमें सामग्री भी शामिल है जो सभी को चाहिए। जवाब, ज़ाहिर है, ऐसा नहीं है। दो प्राथमिक विकल्प हैं:

  • फ़ाइल को विभाजित करें। एक हिस्सा "स्थानीय" है, जो नज़र रखी जा करने की आवश्यकता नहीं है, और दूसरे भाग के मूल है/एक साझा, बातें हर किसी की जरूरत है, जिसमें और सामान्य रूप से बदलाव नहीं करेगी। आपको उचित/खाली/रनटाइम पर उचित रूप से खाली/टेम्पलेट स्थानीय फ़ाइल बनाना चाहिए।

  • फ़ाइल को टेम्पलेट के रूप में तैनात करें, और फिर उपयोग के लिए, इसकी एक प्रति बनाएं। उचित रूप से बिल्ड/तैनाती/रनटाइम पर आप स्वचालित रूप से प्रतिलिपि करेंगे।

बहरहाल, सवाल नहीं है "मैं कैसे Git बताऊँ इस फाइल मैं सिर्फ ट्रैक करने के लिए यह बताया ट्रैक करने के लिए नहीं?" लेकिन "मैं एक ही सामग्री को ट्रैक करने और ट्रैक करने की कोशिश क्यों कर रहा हूं?"

+2

समस्या यह है कि गिट में 'ट्रैक' का मतलब दो चीजें हैं।1) इस फ़ाइल की प्रतिलिपि को भंडार में रखें 2) जब मैं भंडार में प्रतिबद्ध करता हूं तो इस फ़ाइल में बदलावों के लिए देखें। प्रश्न में 1) को हटाने के दौरान 1) शामिल है। यह एक विरोधाभास नहीं है, यह सिर्फ एक भेद गिट बनाता है। –

+0

@WaylonFlinn यह गिट के संदर्भ में एक विरोधाभास है, जो सवाल है। परिवर्तनों को देखने के दौरान एक प्रतिलिपि रखते हुए बहुत सारी जटिलताओं का कारण बनता है, और गिट ने इसे पेश करने से बचाया है, क्योंकि यह सुझाव दिया गया है कि यह संभव है (और वास्तव में बहुत बेहतर)। – Cascabel

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

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