2009-01-23 11 views
5

मेरे पास एक रिमोट गिट रेपो और एक स्थानीय क्लोन है। मान लीजिए कि मैं अपनी स्थानीय .git निर्देशिका खो देता हूं और बाद में कुछ फ़ाइलों को स्थानीय कार्य निर्देशिका में जोड़ता हूं और हटा देता हूं।गिट का उपयोग करते समय, आप सटीक कार्यशील निर्देशिका को रिमोट पर कैसे दबाते हैं?

किसी बिंदु पर, मैं स्थानीय रेपो को दोबारा जोड़ना चाहता हूं, इसे रिमोट से जोड़ना चाहता हूं, और आखिरकार मेरे स्थानीय कामकाजी डीआईआर को रिमोट पर धक्का देना (जैसा कि कहना है, मैं सभी को रखना चाहता हूं जोड़ा/हटाए गए फाइल रिमोट में समान हैं)

मैं इसे कैसे पूरा करूं?

मेरा वर्तमान समाधान है, जिसे मैं पसंद नहीं करता (और सभी मामलों में काम नहीं कर सकता)।

Git init

Git दूरस्थ मूल [SOME_URL]

Git जोड़ने जोड़ें। # काम कर dir

Git में सभी फाइलों कहते हैं -m "जोड़ने फ़ाइलें"

(इस बिंदु पर, मेरे वर्तमान विचार करने के लिए है के लिए प्रतिबद्ध:

  • एक शाखा बनाने के लिए,

  • इसे में दूरस्थ लाने,

  • 'Git diff मास्टर शाखा> my_patch'

  • शाखा है कि पैच, दूरस्थ करने के लिए शाखा से

  • धक्का,

  • मास्टर में पुल,

  • लागू करते हैं और शाखा मार डालते हैं।)

स्पष्ट रूप से मेरा विचार काफी जटिल और बदसूरत है। कोई विचार?

उत्तर

9

ऐसा कुछ (मान लीजिए कि आप खो गए हैं। गिट पल से शुरू हो रहे हैं)?

# Make the current directory a git repository. 
# This puts you on a master branch with no commits. 
git init 

# Add a reference to the remote repository. 
git remote add origin urlurlurl 

# Fetch the remote refs. 
git fetch 

# Without touching the working tree, move master branch 
# from nowhere onto the remote master. 
git reset origin/master 

# Stage all changes between the new index and the current tree. 
git add -A 

# Make a commit of these changes. 
git commit -m "New working tree as a patch on remote master" 
+0

यह सही है! आपका बहुत बहुत धन्यवाद! –

0

क्षमा करें अगर मैंने आपको गलत समझा है, लेकिन मुझे लगता है कि आप मानक पुल और पुश करना चाहते हैं? Have a read of this। गिट आपके लिए किसी भी विलय को संभालेगा, और अगर संघर्ष हो तो आप उन्हें आसानी से हल कर सकते हैं।

+0

नहीं, दुर्भाग्य से मुझे नहीं लगता कि मानक धक्का और खींच मेरे लिए काम करेगी। आइए मान लें कि फ़ाइल 'foo.txt' रिमोट रेपो में मौजूद है, लेकिन मेरी स्थानीय निर्देशिका में नहीं है (जो याद है, अभी तक स्रोत नियंत्रण में नहीं है)। अगर मैं 'गिट इनिट' करता हूं, तो रिमोट जोड़ें, और खींचें - यह foo.txt बना देगा! –

+0

क्षमा करें, मैंने आपको गलत समझा होगा। हां, यह foo.txt बना देगा। गिट भंडार एक-दूसरे की सभी प्रतियां हैं। – dylanfm

+0

हाँ, मुझे लगता है कि मैं सिर्फ गिट को बताने का एक तरीका चाहता हूं "वर्तमान कामकाजी डीआईआर और रिमोट के बीच अंतर लें और इसे रिमोट पर लागू करें!" –

3

मुझे नहीं लगता कि आपके मामले में एक नई शाखा बनाना आवश्यक है। अपने वर्तमान स्थानीय टूट रेपो में निम्न कार्य करें:: यहाँ मेरा उत्तर है

git init 
git add . 
git commit -m 'add files' #create the local master branch 
git remote add myproj [some_url] 
git fetch myproj 
git branch -r #check the remote branches 
git diff master..myproj/master #view the diffs between your local and remote repos 
#now you are sure there is no conflict, 
#so you merge the remote to your local master branch 
git pull myproj master 
git push myproj #push your local master branch to remote 
#now your upstream and downstream is sync'ed 
1

यहाँ मेरे वर्तमान समाधान (मान लीजिए कि मैं पहले से ही निर्देशिका है कि मौजूदा फ़ाइलें हैं में हूँ चलो जाता है, लेकिन एक Git नहीं मिल रहा है रेपो)

git clone -n [git_url] tmp_git_dir 
mv tmp_git_dir/.git . 
rm -rf tmp_git_dir 
git add . 
git commit -a -m "commit message" 

यह और अधिक सरल लगता है और स्वचालित रूप से जोड़ सकते हैं और आवश्यक के रूप में फाइल को हटा देगा। मुझे लगता है कि यह भी अधिक कुशल है।

मुझे आश्चर्य है - क्या वर्तमान डीआईआर में गिट रेपो को क्लोन करने का कोई तरीका है (मूल रूप से मैं सिर्फ वर्तमान डीआईआर में .git dir जगह में चाहता हूं इसलिए मुझे एमवी और आरएम नहीं करना है)?

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