मेरा उद्देश्य एक नया जिथब रेपो बनाना है, जिसमें रेपो से कुछ फाइलें शामिल हैं जिन्हें मैंने फोर्क किया है (और फिर प्रभावी ढंग से अपने स्वयं के जीथब के भीतर फोर्क किया गया है, http://deanmalone.net/post/how-to-fork-your-own-repo-on-github/

मैंने पाया है कि मेरे रेपो में, अगर मैं फाइलों को इधर-उधर ले जाता हूं ताकि वे समाप्त हो जाएं जैसे मैं उन्हें चाहता हूं, गिट इतिहास हटा दिया जाता है (ठीक है, सामान्य रूप से, और यहां तक ​​​​कि जब ऐसा नहीं होता है, तब तक जीथब इतिहास नहीं दिखाता है आप मूल प्रतिबद्धता पर वापस जाते हैं - इसलिए वास्तव में काम करने वाले सभी लोगों को योगदानकर्ताओं के रूप में सूचीबद्ध नहीं किया जाता है - जिन्हें मैं वास्तव में टालना चाहता हूं)।

इसलिए, मैंने एक विरल चेकआउट करने की कोशिश की

git init
<set remote>
git fetch
git checkout origin/master -- python/file.py

लेकिन यह file.py के बजाय python/file.py बनाता है, जो मुझे चाहिए। मैं स्पष्ट रूप से फ़ाइल को एमवी नहीं कर सकता, क्योंकि इसमें वही समस्या है जो मुझे शुरुआत में मिली थी।

मुझे दो विकल्प दिखाई देते हैं, लेकिन यह नहीं मिला कि कैसे प्राप्त किया जाए

  • क्या git checkout का उपयोग करके python/demo.py को वर्तमान निर्देशिका में सहेजने का कोई तरीका है या किसी अन्य तरीके से जो मुझे नहीं मिला है? (git archive काम नहीं करेगा)
  • क्या मैं उपनिर्देशिका से एक नया दूरस्थ URL सेट कर सकता हूं? यानी सीडी में python और फिर रिमोट सेट करें ताकि मेरे रेपो में केवल file.py ही प्रतिबद्ध हो?
0
ChrisW 22 मई 2019, 20:56

1 उत्तर

सबसे बढ़िया उत्तर

Git में, इतिहास है कमिट करता है; कमिट हैं इतिहास। "फ़ाइल इतिहास" जैसी कोई चीज़ नहीं है।

यह सच है कि git log -- somefile.py आपको वह इतिहास दिखाता है जो somefile.py को प्रभावित करता है। लेकिन इसका तरीका यह है कि सभी कमिट्स को देखना है, वर्तमान से शुरू होकर, एक बार में पीछे की ओर काम करना। प्रत्येक कमिट में, यह उस कमिट के खिलाफ पैरेंट कमिटमेंट को अलग करता है। क्या somefile.py माता-पिता और बच्चे के बीच बदल गया? अगर ऐसा है, तो कमिट को प्रिंट करें। यदि नहीं, तो कुछ भी नहीं छापें। किसी भी स्थिति में, पैरेंट कमिटमेंट जारी रखें।

(मर्ज कमिट में चीजें थोड़ी मुश्किल हो जाती हैं, जिसकी परिभाषा के अनुसार एक से अधिक माता-पिता होते हैं। यहां गिट डिफ़ॉल्ट रूप से किसी भी माता-पिता का अनुसरण करता है नहीं somefile.py को बदलता है।)

यदि आप अपने git log में --follow जोड़ते हैं, तो Git एक अतिरिक्त काम करता है: जब यह माता-पिता और बच्चे की तुलना करता है, तो यह देखने के लिए जाँच करता है कि क्या माता-पिता से बच्चे में अंतर यह कहता है कि फ़ाइल का नाम बदल दिया गया था /em>. यदि ऐसा है, तो जैसे ही यह पैरेंट के पास जाता है, यह फ़ाइल के पुराने नाम की तलाश शुरू कर देता है। लेकिन आप अभी भी सभी मामलों में प्रतिबद्ध इतिहास के कुछ सबसेट देख रहे हैं। यदि आपके पास कमिट हैं, तो Git उन्हें देखेगा, और उनमें से कुछ को प्रिंट करेगा। यदि आपके पास कमिट नहीं है, तो आपके पास कोई इतिहास नहीं है।

1
torek 22 मई 2019, 18:22