क्या इतिहास को दोबारा लिखने से रोकने के लिए Git के पास "सुरक्षित मोड" है?


11

जब आप जीआईटी (और सामान्य रूप से डीवीसीएस) के साथ नए तरह के होते हैं, और आप इतिहास-पुनर्लेखन परिवर्तनों की खोज शुरू करते हैं, तो आप सुरक्षित हैं यदि रिपॉजिटरी केवल स्थानीय है, लेकिन आप समस्याओं में भाग सकते हैं यदि आप रीमोट के साथ काम करते हैं और कोशिश करते हैं ऐसे बदलावों को आगे बढ़ाएं।

एक विशेषता जो मुझे उम्मीद है कि एक "सुरक्षित मोड" को सक्षम करने की क्षमता है जो मूल रूप से मुझे वह करने से रोकती है जो मुझे नहीं करना चाहिए ... और मुझे इससे क्या मतलब है? मेरा मतलब है कि इतिहास-पुनर्लेखन में पहले से ही किसी चीज को धकेल दिया गया था। मैं इसे ठीक से परिभाषित नहीं कर सकता, लेकिन इसमें इस तरह के मामले शामिल होंगे:

  • commit --amend जब HEAD को पहले ही धकेल दिया गया है
  • rebase एक गैर-स्थानीय शाखा का
  • reset जिस शाखा को धक्का दिया गया है

ये उन स्थितियों के उदाहरण हैं, जो संभवत: अगली pushअसफलता बना देंगी (क्योंकि यह तेजी से आगे, IIRC नहीं होगी)। मैंने दुर्घटना से कुछ बनाया है और रिमोट पर शाखा को फिर से बनाना है। और मैं अभी भी इस उपवास को करने के लिए भाग्यशाली था ताकि किसी ने मेरे द्वारा लिखे गए इतिहास को नहीं खींचा।

मेरा मानना ​​है कि इस प्रकार के परिवर्तनों की पहचान करना संभव है और मांग पर, उपयोगकर्ता को उन्हें बनाने से रोकना चाहिए। क्या इसके लिए कोई विकल्प है?

अगर वहाँ नहीं है, तो क्या आपको लगता है कि इसे बनाने का प्रयास करना सार्थक है? क्या आप ठीक से परिभाषित करने की कोशिश करेंगे कि इस तरह के "खतरनाक परिवर्तन" की पहचान कैसे करें?


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

यह उचित लगता है कि आप रिमोट मशीन पर हुक में इसका पता लगा सकते हैं और फिर परिवर्तनों को अस्वीकार कर सकते हैं।
एंड्रयू टी फिनेल


मुझे आपका सवाल नहीं आता। डिफ़ॉल्ट मोड सुरक्षित है। जब तक आप निर्दिष्ट नहीं करेंगे, यह आपको धक्का नहीं देगा --force
14मोन तोथ

मैं भी ऐसा ही कुछ देखना चाहता हूं। मूल रूप से मैं उन सीखने के लिए एक सुरक्षित संस्करण प्रदान करना चाहूंगा, शायद केवल कमांड लाइन लपेटकर और केवल मूल बातें उजागर करना: कमिट, पुल, पुश, सरल सामान। इस पृष्ठ पर किसी भी चीज़ के लिए उन्हें पूर्ण रूप से निकालने के लिए बाध्य करें: git-scm.com/book/en/Git-Tools-Rewriting-History पहले से ही स्थानीय और दूरस्थ रेपो के बारे में सोचने के लिए अन्य उपकरणों की तुलना में सीखना थोड़ा कठिन है। - चिंता की बात है कि आप रोलबैक के बजाय रिबेट कर सकते हैं डरावना है।
क्रिस मोसचिनी

जवाबों:


5

यह बहुत करीब दिखता है, अगर यही सवाल प्रिवेंटिंग या कैचिंग गीट हिस्ट्री रीराइट के लिए नहीं है

इसे योग करने के लिए आप सक्षम कर सकते हैं

git config --system receive.denyNonFastforwards true

तथा

git config --system receive.denyDeletes true

या आपके द्वारा निर्धारित किसी भी चीज़ को अस्वीकार करने के लिए एक पोस्ट प्राप्त करने के लिए हुक प्राप्त करें।


1
मेरा मानना denyNonFastforwardsहै कि डिफ़ॉल्ट (?) है, जबकि denyDeletesनहीं है। ये दोनों उपयोगी हैं, लेकिन मैं एक क्लाइंट-साइड समाधान की कल्पना कर रहा हूं, जो मुझे रोक देगा यानी commit --amendअगर मैं इसे धक्का नहीं दे पाऊंगा (क्योंकि HEAD को पहले ही धक्का दे दिया गया था)।
कोस

दूसरे शब्दों में: उन तंत्रों के अलावा, जो एक रिमोट को सुसंगत रखने की अनुमति देते हैं, मैं एक ऐसी चीज़ चाहूंगा जो रिमोट के साथ एक क्लोन "सुसंगत" रखने की अनुमति देता है।
कोस

@ क्या आप स्थानीय हुक भी बना सकते हैं
एंड्रयू टी फिननेल २०'१२

क्या केवल मास्टर शाखा पर सेट denyNonFastfowardsकरने का कोई तरीका है true? मैं चाहूंगा कि मेरी विषय शाखाओं को बगावत करने और बलपूर्वक धकेलने की अनुमति दी जाए।
नैनी

2

नहीं, क्योंकि यह आपको पूरी शक्ति देने के लिए git के दर्शन का हिस्सा है और आपको उस शक्ति का प्रबंधन करने देता है जिस तरह से आप चाहते हैं।

यदि आप इस दर्शन का पालन नहीं करते हैं, तो शायद मर्क्यूरियल पर स्विच करने के लायक होगा क्योंकि वे इतिहास को फिर से लिखने की अनुमति देते हैं लेकिन एक सीमित या, स्पष्ट, अनिच्छुक तरीके से, जिससे आपको लगता है कि यह एक अच्छा विचार नहीं है।


2
मैं गलतियां करता हूँ। एक तंत्र जिसकी मुझे स्पष्ट रूप से पुष्टि करने की आवश्यकता होती है जब भी मैं कुछ खतरनाक कर रहा होता हूं तो वह कुछ ऐसा होता है जो "अपनी शक्ति को मेरे इच्छित तरीके से प्रबंधित करना" लगता है। :-) (इसके अलावा Git पहले से ही अवसरों पर ऐसा करता है।)
कोस

2

AFAIK, जिस तरह से इन मुद्दों को हल करता है वह यह है कि जब भी आप इस तरह की कार्रवाई का अनुरोध करते हैं, तो यह इसे स्थानीय स्तर पर निष्पादित करेगा, लेकिन आपको सूचित करेगा कि आप जो कर रहे हैं, उसके अवांछनीय परिणाम हो सकते हैं। उस बिंदु पर, आपने अभी तक कुछ भी धक्का नहीं दिया है, इसलिए आप अपने स्थानीय भंडार की समीक्षा करने की स्थिति में हैं, और संभवतः इससे पहले कि आप खतरनाक परिवर्तन को धक्का दे दें। आपको इस बात पर ध्यान देना होगा कि कौन सी बात आपको बता रही है, और जब आप इस तरह की त्रुटियों को सुधारते हैं तो बेहतर होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.