कैसे एक Git रेपो से दूसरे में काम करता है?


96

पिछले हफ्ते मैंने गितुब रेपो बनाया और रेपो के लिए लाइसेंस का चयन करना भूल गया। अब पहले से ही 3 बड़े कमिट हैं।

मैंने 3 योगदानकर्ताओं से पूछा है कि क्या यह ठीक है, अगर मैं रेपो हटाता हूं और फिर इसे उसी नाम से बनाता हूं और इस बार रेपो बनाते समय लाइसेंस का चयन करता हूं, और वे जहां ठीक होते हैं वही करते हैं।

सवाल

क्या कोई तरीका है जो मुझे नए रेपो में मिला है (इस बार पहली प्रतिबद्धता LICENSE फ़ाइल है) और फिर भी प्रतिबद्ध मेटा जानकारी रखें?


1
आप अभी भी मूल रेपो में लाइसेंस जोड़ सकते हैं। देखें help.github.com/articles/open-source-licensing/... जानकारी के लिए।
edwinksl

जवाबों:


163

क्या कोई तरीका है जो मुझे नए रेपो में मिला है (इस बार पहली प्रतिबद्धता LICENSE फ़ाइल है) और फिर भी प्रतिबद्ध मेटा जानकारी रखें?

हां, अपने पहले कमिट के शीर्ष पर एक रिमोट और चेरी उठाकर कमिट्स को जोड़ें।

# add the old repo as a remote repository 
git remote add oldrepo https://github.com/path/to/oldrepo

# get the old repo commits
git remote update

# examine the whole tree
git log --all --oneline --graph --decorate

# copy (cherry-pick) the commits from the old repo into your new local one
git cherry-pick sha-of-commit-one
git cherry-pick sha-of-commit-two
git cherry-pick sha-of-commit-three

# check your local repo is correct
git log

# send your new tree (repo state) to github
git push origin master

# remove the now-unneeded reference to oldrepo
git remote remove oldrepo

इस उत्तर के बाकी हिस्सों में आप अभी भी अपने पिछले रेपो में LICENSE जोड़ना चाहते हैं।

हाँ। आप अपनी LICENSE कमिट को रिबासिंग करके पहली कमिटमेंट के रूप में रख सकते हैं।

रिबासिंग सभी प्रतिबद्ध लेखकों और प्रतिबद्ध तारीखों को बरकरार रखते हुए प्रतिबद्ध आदेश को पुन: व्यवस्थित करने का तरीका है।

एक साझा रेपो पर काम करते समय, यह आमतौर पर हतोत्साहित किया जाता है जब तक कि आपकी पूरी टीम गिट-धाराप्रवाह न हो। जो नहीं हैं, उनके लिए वे सिर्फ रिपॉजिटरी की एक नई कॉपी क्लोन कर सकते हैं।

यहां बताया गया है कि कैसे आप अपनी LICENSE को पहली प्रतिबद्ध के रूप में प्रतिबद्ध करते हैं।

1. अपनी स्थानीय कॉपी को अपडेट करें और रिबेट करें

अपनी परियोजना की जाँच करें और अपने वर्तमान 3 प्रतिबद्ध स्टैक के एक प्रतिबद्ध में LICENSE फ़ाइल रखें।

#create LICENSE file, edit, add content, save
git add LICENSE
git commit -m 'Initial commit'

फिर कमिट्स को REARRANGE करने के लिए मास्टर ब्रांच पर एक इंटरेक्टिव रीबेस करें।

git rebase -i --root

यह एक संपादक खोल देगा। फ़ाइल के शीर्ष पर नीचे की रेखा (अपनी "प्रारंभिक प्रतिबद्ध" प्रतिबद्ध, सबसे हाल की प्रतिबद्ध) को स्थानांतरित करें। फिर संपादक को सहेजें और छोड़ें।

जैसे ही आप संपादक से बाहर निकलते हैं, गिट आपके द्वारा निर्दिष्ट आदेश में कमिट लिखेंगे।

अब आपके पास अद्यतन की रिपॉजिटरी की अपनी स्थानीय प्रति है। करना:

git log

जांचना।

2. बल अपने नए रेपो राज्य को जीथब पर धकेलें

अब जब आपकी कॉपी अपडेट हो गई है, तो आपको इसे ज़ुथब पर धकेलना होगा।

git push -f origin master

यह गिटहब को मास्टर शाखा को उसके नए स्थान पर ले जाने के लिए कहेगा। आपको इस तरह के दुर्लभ अवसरों पर केवल जोर लगाना चाहिए, जहां इसके साथ काम करने वाले हर व्यक्ति को लंबित परिवर्तन के बारे में पता हो, अन्यथा यह आपके सहयोगियों को भ्रमित करेगा।

3. सहयोगकर्ताओं को गितुब को सिंक्रनाइज़ करें

अंत में, सभी सहयोगियों को इस भंडार में सिंक्रनाइज़ करना होगा।

पहले उनके पास स्वच्छ रिपॉजिटरी होनी चाहिए क्योंकि यदि कोई परिवर्तन नहीं हुए हैं तो निम्न कमांड विनाशकारी हो सकती है।

# make sure there are no unsaved changes
git status 

# pull the latest version from github
git fetch  

# move their master branch pointer to the one you published to github.
git reset --hard origin/master

बस। हर कोई अब सिंक में होना चाहिए।


1
बहुत बढ़िया जवाब! धन्यवाद!
काइरोल

बहुत समय बचाया। धन्यवाद!
a0nh4x0r

9

मुझे इसी तरह की समस्या थी जहाँ मैं अपने गितुब के लिए एक रेपो को भूल जाना भूल गया और अपनी गलती का एहसास होने से पहले मैंने कई कमेंट्स जोड़े।

मुझे एक बहुत सरल समाधान मिला।

पहले रिमोट को मूल रेपो में निकालें

git remote remove origin

दूसरा मेरे गीथूब पर नए कांटे के लिए एक रिमोट जोड़ें

git remote add origin <my repo URL>

फिर मैंने मूल गुरु को धक्का दिया और मेरे सारे कमिट मेरे गितुब पर दिखाई दिए।


1
बस इसे जोड़ने के लिए, जब मैंने धक्का दिया, तो मुझे करना था git push --set-upstream origin master, लेकिन गिट आपको इस बारे में अवगत कराता है।
18

महान और आसान समाधान!
mecograph

3
  • गंतव्य Git = UrlD (मौजूदा सामग्री कोई फर्क नहीं पड़ता)
  • SourceGit = UrlS

    git clone UrlS
    
    git remote add origin2 UrlD
    
    git push -f origin2 master
    

अब गंतव्य के पास स्रोत के समान डेटा होगा (आप मूल 2 के बजाय मूल का उपयोग भी कर सकते हैं)

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