नोट: फ़ेलेंगैमेर ने 2011 में कुछ परीक्षण किए थे (इसलिए वे पुराने हो सकते हैं), और यहाँ उनके निष्कर्ष हैं :
संचालन
- फ़ाइल को स्थानीय रिपॉजिटरी और अपस्ट्रीम दोनों में बदल दिया जाता है
git pull
:
Git वैसे भी स्थानीय परिवर्तनों को संरक्षित करता है।
इस प्रकार आप गलती से किसी भी डेटा को नहीं खोएंगे जिसे आपने किसी भी झंडे के साथ चिह्नित किया है।
assume-unchanged
ध्वज के साथ फ़ाइल : Git स्थानीय फ़ाइल को अधिलेखित नहीं करेगा। इसके बजाय यह संघर्ष और सलाह देता है कि उन्हें कैसे हल किया जाए
skip-worktree
ध्वज के साथ फ़ाइल : Git स्थानीय फ़ाइल को अधिलेखित नहीं करेगा। इसके बजाय यह संघर्ष और सलाह देता है कि उन्हें कैसे हल किया जाए
- फ़ाइल को स्थानीय रिपॉजिटरी और अपस्ट्रीम दोनों में बदल दिया जाता है, वैसे भी कुछ अतिरिक्त मैनुअल काम में परिणाम
का उपयोग करने की कोशिश कर रहा है, लेकिन यदि आपके पास कोई स्थानीय परिवर्तन है तो कम से कम आप किसी भी डेटा को नहीं खोएंगे।
git stash
git pull
skip-worktree
assume-unchanged
ध्वज के साथ फ़ाइल : उन्हें पुनर्स्थापित करने के लिए किसी भी संभावना के बिना सभी स्थानीय परिवर्तनों को त्यागता है। प्रभाव ' git reset --hard
’ जैसा है । ' git pull
' कॉल सफल होगा
skip-worktree
झंडे के साथ फाइल : skip-worktree
फाइलों पर काम नहीं करेगा । ' git pull
' ऊपर के रूप में एक ही त्रुटि के साथ विफल हो जाएगा। डेवलपर को मैन्युअल रूप से skip-worktree
ध्वज को रीसेट करने और असफल होने को पूरा करने में सक्षम होने के लिए मजबूर किया जाता है pull
।
- कोई स्थानीय परिवर्तन, अपस्ट्रीम फ़ाइल नहीं बदली,
दोनों झंडे आपको अपस्ट्रीम परिवर्तन प्राप्त करने से नहीं रोकेंगे। गिट पता लगाता है कि आपने ध्वज को रीसेट करके वास्तविकता को प्रतिबिंबित करने के लिए वादा और धोखा दिया ।
git pull
assume-unchanged
assume-unchanged
ध्वज के साथ फ़ाइल : सामग्री अपडेट की गई है, ध्वज खो गया है।
' git ls-files -v
' यह दर्शाता है कि ध्वज को H
(से h
) संशोधित किया गया है ।
skip-worktree
ध्वज के साथ फ़ाइल : सामग्री अपडेट की गई है, ध्वज संरक्षित है।
' git ls-files -v
' S
पहले जैसा ही झंडा दिखाएगा pull
।
- स्थानीय फ़ाइल परिवर्तित के साथ
Git फ़ाइल को स्पर्श नहीं करता है और वास्तविकता को दर्शाता है (फ़ाइल के अपरिवर्तित होने का वादा किया गया फ़ाइल के लिए) ।
git reset --hard
skip-worktree
assume-unchanged
assume-unchanged
झंडे के साथ फ़ाइल : फ़ाइल की सामग्री वापस आ गई है। ध्वज को H
(से h
) पर रीसेट कर दिया गया है ।
skip-worktree
ध्वज के साथ फ़ाइल : फ़ाइल सामग्री बरकरार है। झंडा वही रहता है।
वह निम्नलिखित विश्लेषण जोड़ता है:
ऐसा लगता है कि skip-worktree
है आपके स्थानीय डेटा को बचाने के लिये बहुत मेहनत की कोशिश कर रहा । लेकिन अगर यह सुरक्षित है तो यह आपको अपस्ट्रीम में बदलाव करने से नहीं रोकता है। प्लस git ध्वज को रीसेट नहीं करता है pull
।
लेकिन ' reset --hard
' कमांड को नजरअंदाज करना एक डेवलपर के लिए एक आश्चर्यजनक आश्चर्य बन सकता है।
Assume-unchanged
फ्लैग को pull
ऑपरेशन में खो दिया जा सकता है और ऐसी फाइलों के अंदर स्थानीय परिवर्तन महत्वपूर्ण नहीं लगता है।
देख:
वह निष्कर्ष निकालता है:
वास्तव में दोनों में से कोई भी ध्वज पर्याप्त सहज नहीं है ।
assume-unchanged
मानता है कि एक डेवलपर को फ़ाइल नहीं बदलनी चाहिए। यदि कोई फ़ाइल बदली गई थी - तो वह परिवर्तन महत्वपूर्ण नहीं है। यह ध्वज SDKs जैसे बदलते फ़ोल्डर के लिए प्रदर्शन में सुधार के लिए है।
लेकिन अगर वादा टूट गया है और एक फाइल वास्तव में बदल गई है, तो वास्तविकता को प्रतिबिंबित करने के लिए git ध्वज को बदल देता है। संभवतः आमतौर पर नहीं बदले जाने वाले फ़ोल्डरों में कुछ असंगत झंडे होना ठीक है।
skip-worktree
जब आप गिट को एक विशिष्ट फ़ाइल को कभी नहीं छूने का निर्देश देते हैं तो दूसरी ओर उपयोगी होता है। यह पहले से ट्रैक की गई कॉन्फिग फ़ाइल के लिए उपयोगी है।
अपस्ट्रीम मुख्य रिपॉजिटरी कुछ उत्पादन-तैयार कॉन्फ़िगरेशन को होस्ट करती है, लेकिन आप कुछ स्थानीय परीक्षण करने में सक्षम होने के लिए कॉन्फ़िगरेशन में कुछ सेटिंग्स बदलना चाहेंगे। और आप गलती से उत्पादन विन्यास को प्रभावित करने के लिए ऐसी फ़ाइल में परिवर्तनों की जांच नहीं करना चाहते हैं। उस मामले में skip-worktree
सही दृश्य बनाता है।
Git 2.25.1 (फरवरी 2020) के साथ, "वास्तव में न तो झंडे बहुत सहज हैं" जैसा कि ऊपर वर्णित है, आगे स्पष्ट किया गया है:
देखें 7a2dc95 , 1b13e90 (22 जनवरी 2020) को brian मी। कार्लसन ( bk2204
) ।
(द्वारा विलय Junio सी Hamano - gitster
- में प्रतिबद्ध 53a8329 , 30 जनवरी 2020)
( Git मेलिंग सूची )
doc
: ट्रैक की गई फ़ाइलों को अनदेखा करने का प्रयास करने से उपयोगकर्ताओं को मना करें
साइन-ऑफ-बाय: जेफ किंग
साइन-ऑफ-बाय: ब्रायन एम। कार्लसन
यह उपयोगकर्ताओं के लिए काफी सामान्य है कि वे किसी फ़ाइल के परिवर्तनों को अनदेखा करना चाहते हैं जो Git को ट्रैक करता है।
इस मामले के लिए सामान्य परिदृश्य आईडीई सेटिंग्स और कॉन्फ़िगरेशन फाइलें हैं, जिन्हें आमतौर पर ट्रैक नहीं किया जाना चाहिए और संभवतः टेम्पर्ड तंत्र का उपयोग करके ट्रैक की गई फ़ाइलों से उत्पन्न होता है।
हालांकि, उपयोगकर्ता मान-अपरिवर्तित और स्किप-वर्कट्री बिट्स के बारे में सीखते हैं और वैसे भी ऐसा करने के लिए उनका उपयोग करने का प्रयास करते हैं।
यह समस्याग्रस्त है, क्योंकि जब ये बिट सेट होते हैं, तो कई ऑपरेशन उपयोगकर्ता की अपेक्षा के अनुसार व्यवहार करते हैं, लेकिन वे आम तौर पर तब मदद नहीं करते हैं जब git checkout
किसी फ़ाइल को बदलने की आवश्यकता होती है।
इस मामले में कोई समझदार व्यवहार नहीं है, क्योंकि कभी-कभी डेटा कीमती होता है, जैसे कि कुछ निश्चित कॉन्फ़िगरेशन फ़ाइलें, और कभी-कभी यह अप्रासंगिक डेटा होता है कि उपयोगकर्ता को त्यागने में खुशी होगी।
चूंकि यह एक समर्थित कॉन्फ़िगरेशन नहीं है और उपयोगकर्ता अनपेक्षित उद्देश्यों के लिए मौजूदा सुविधाओं का दुरुपयोग करने के लिए प्रवण हैं, जिससे सामान्य उदासी और भ्रम पैदा होता है , आइए दस्तावेज़ में मौजूदा व्यवहार और नुकसान का दस्तावेजीकरण करें git update-index
ताकि उपयोगकर्ताओं को पता चले कि उन्हें वैकल्पिक समाधानों का पता लगाना चाहिए।
इसके अलावा, चलो कॉन्फ़िगरेशन फ़ाइलों के सामान्य मामले से निपटने के लिए एक अनुशंसित समाधान प्रदान करते हैं, क्योंकि कई वातावरणों में सफलतापूर्वक उपयोग किए जाने वाले प्रसिद्ध दृष्टिकोण हैं।
git update-index
आदमी पेज अब में शामिल हैं:
उपयोगकर्ता अक्सर ट्रैक की जाने वाली फ़ाइलों में परिवर्तनों को अनदेखा करने के लिए गिट को बताने के लिए बिट्स assume-unchanged
और skip-worktree
बिट्स का उपयोग करने का प्रयास करते हैं। यह अपेक्षित रूप से काम नहीं करता है, क्योंकि Git अभी भी कुछ ऑपरेशन करते समय इंडेक्स के खिलाफ कार्यशील ट्री फ़ाइलों की जांच कर सकता है। सामान्य तौर पर, गिट ट्रैक की गई फ़ाइलों में परिवर्तन को अनदेखा करने का एक तरीका प्रदान नहीं करता है, इसलिए वैकल्पिक समाधानों की सिफारिश की जाती है।
उदाहरण के लिए, यदि आप जिस फ़ाइल को बदलना चाहते हैं, वह किसी प्रकार की कॉन्फ़िगर फ़ाइल है, तो रिपॉजिटरी में एक नमूना कॉन्फ़िगर फ़ाइल शामिल हो सकती है जिसे तब अनदेखा नाम और कॉपी किया जा सकता है। रिपॉजिटरी में नमूना फ़ाइल को एक टेम्पलेट के रूप में व्यवहार करने के लिए एक स्क्रिप्ट शामिल किया जा सकता है, इसे स्वचालित रूप से संशोधित और कॉपी किया जा सकता है।
वह अंतिम भाग वह है जो मैं स्मूद / क्लीन स्क्रिप्ट के आधार पर एक विशिष्ट सामग्री फिल्टर ड्राइवर का वर्णन करता हूं ।
.gitignore
इसी तरह के उद्देश्यों के लिए उपयोग कर रहा हूं । क्या यह समाधान आपके लिए काम करेगा?