2009-06-27 10 views
12

मुझे अक्सर इंटरनेट पर नेटवर्क/नेटवर्क कनेक्शन के साथ सड़क पर सामान विकसित करने की आवश्यकता होती है। मैं केवल एक डेवलपर हूं, इसलिए अब तक मेरी मशीन पर बस एक एसवीएन रिपोजिटरी थी और जब मैं चला गया तो मेरे लैपटॉप पर चेकआउट किया। समस्या: इससे मुझे सड़क पर कोई स्रोत नियंत्रण नहीं मिलता है।एक डेवलपर के लिए गिट सेटअप?

तो मैंने गिट में बदलने की कोशिश की, जो मुझे लगता है कि ऐसा करने लगता है, लेकिन मुझे यकीन नहीं है कि मैं ठीक से समझता हूं कि यह मेरे सेटअप में कैसे उपयोग किया जाना चाहिए।

मूलतः

:

  • बनाया \ MyServer \ शेयर \ का उपयोग कर git init
  • क्लोंड मशीन 1 करने के लिए है कि भंडार git clone
  • का उपयोग कर क्लोंड मशीन से 2 भंडार का उपयोग करते हुए कि git clone
  • काम परियोजना पर एक भंडार मशीन 2 पर, git commit का उपयोग करके मेरे स्थानीय भंडार में कोई बदलाव करने के लिए
  • F inally git push उपयोग किए गए सभी परिवर्तन पीछे धकेलने के लिए \ MyServer \ शेयर \ prohect
  • मशीन 1 पर git pull प्रयुक्त \ शेयर \ परियोजना \ MyServer से नवीनतम परिवर्तन प्राप्त करने के लिए

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

मेरी स्थिति में सही कदम क्या होंगे?

  • मैं ही कभी, मशीन 1 या मशीन 2 पर काम करेंगे पर कभी नहीं दोनों
  • मैं (बस हमेशा की तरह की तरह) bugfixes/परीक्षण के लिए एक अलग शाखा के लिए एक मार्ग के रूप शाखाओं में उपयोग करना चाहते हैं, लेकिन एकाधिक डेवलपर्स
  • के रूप में नहीं, मैं वास्तव में मुख्य रूप से इसे अपने एसवीएन rsync के विकल्प के रूप में उपयोग करना चाहता हूं।

संपादित करें: दो विषमताएं हैं। पहला यह है कि अगर मैं बस एक फ़ाइल बदलता हूं, तो यह कहता है "बदल गया लेकिन अपडेट नहीं किया गया"। जो अजीब है:

warning: You did not specify any refspecs to push, and the current remote 
warning: has not configured any push refspecs. The default action in this 
warning: case is to push all matching refspecs, that is, all branches 
warning: that exist both locally and remotely will be updated. This may 
warning: not necessarily be what you want to happen. 
warning: 
warning: You can specify what action you want to take in this case, and 
warning: avoid seeing this message again, by configuring 'push.default' to: 
warning: 'nothing' : Do not push anything 
warning: 'matching' : Push all matching branches (default) 
warning: 'tracking' : Push the current branch to whatever it is tracking 
warning: 'current' : Push the current branch 
Counting objects: 7, done. 
Delta compression using up to 4 threads. 
Compressing objects: 100% (4/4), done. 
Writing objects: 100% (4/4), 333 bytes, done. 
Total 4 (delta 3), reused 0 (delta 0) 
Unpacking objects: 100% (4/4), done. 
warning: updating the current branch 
warning: Updating the currently checked out branch may cause confusion, 
warning: as the index and work tree do not reflect changes that are in HEAD. 
warning: As a result, you may see the changes you just pushed into it 
warning: reverted when you run 'git diff' over there, and you may want 
warning: to run 'git reset --hard' before starting to work to recover. 
warning: 
warning: You can set 'receive.denyCurrentBranch' configuration variable to 
warning: 'refuse' in the remote repository to forbid pushing into its 
warning: current branch. 
warning: To allow pushing into the current branch, you can set it to 'ignore'; 
warning: but this is not recommended unless you arranged to update its work 
warning: tree to match what you pushed in some other way. 
warning: 
warning: To squelch this message, you can set it to 'warn'. 
warning: 
warning: Note that the default will change in a future version of git 
warning: to refuse updating the current branch unless you have the 
warning: configuration variable set to either 'ignore' or 'warn'. 
To file:///\\myserver\share\project 
    129649b..1f4b957 master -> master 

तो यह मुझसे कहता है कि "वर्तमान शाखा में धक्का" है:

# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: myproject/Readme.txt 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

दूसरा संदेश एक मुझे लगता है कि अपराधी, Git धक्का के उत्पादन में है अनुशंसित नहीं है, लेकिन मुझे वास्तव में यह नहीं मिलता है कि ऐसा करने का उचित तरीका क्या है।

+0

मैं एक ही समस्या को हल करने के लिए गिट का उपयोग कर रहा हूं। मुझे एक ही समस्या नहीं है, लेकिन मैंने इसे थोड़ा अलग तरीके से संपर्क किया। मैं केंद्रीय भंडार के रूप में घर पर एक लिनक्स सर्वर का उपयोग कर रहा हूं, तो मेरे सभी देव स्थान केंद्रीय के क्लोन हैं। क्या आप सटीक त्रुटि संदेश कॉपी कर सकते हैं? यह मुझे आपके प्रश्न का बेहतर उत्तर देने में मदद कर सकता है। –

+0

इससे मदद मिली। आपके पास अन्य लोगों से कुछ अच्छे जवाब हैं, जिन्हें मैं ऊपर उठा रहा हूं। –

उत्तर

10

अन्यथा अच्छा लगता है, लेकिन त्रुटि संदेश से बचने के लिए आप एक खाली रेपो के रूप में "अपस्ट्रीम" भंडार सेट कर सकते हैं, यानी एक चेक आउट कॉपी शामिल नहीं है।आप

git --bare init 

के साथ ऐसा कर देखें e.g. this example

+1

लिंक के लिए धन्यवाद, जिसमें मैं चाहता था! "जादू" पहले स्थानीय भंडार बनाने के लिए है और उसके बाद सर्वर पर एक --बैर भंडार को धक्का देना है, न कि दूसरी तरफ। –

+0

उदाहरण के लिए यूआरएल टूटा हुआ है। वेबैक मशीन लिंक: http://web.archive.org/web/20100211165958/http://toolmantim.com/articles/setting_up_a_new_remote_git_repository –

8

git push आदेश एक refspec निर्दिष्ट करने के लिए आवश्यक है कि आप किसी और आपके द्वारा निर्दिष्ट किया जा रहा कोई refspecs के मामले में डिफ़ॉल्ट कार्रवाई निर्दिष्ट करने के लिए .git/config संपादित करने के लिए होगा। उदाहरण के लिए, उस परिदृश्य पर विचार करें जहां आपके पास master नाम की शाखा है।

master शाखा धकेलने के लिए

, आप:

git push refs/heads/master:refs/heads/master 
git push master:master 
git push master 

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

अन्यथा, आप .git/config संपादित करें और जोड़ सकते हैं:।

[push] 
    default = matching 

यह आपको सिर्फ git push, और Git स्थानीय शाखा आप में हैं के दूरदराज के शाखा करने के लिए धक्का होगा करने की अनुमति होगी उदाहरण के लिए, आप अगर वर्तमान में शाखा master, git push में स्थानीय मास्टर शाखा को दूरस्थ मास्टर शाखा में धक्का देगी।

जैसा कि जेनब ने कहा है, आपको बिना किसी चेतावनी के इसे धक्का देने के लिए एक नंगे भंडार का उपयोग करना होगा। एक सामान्य (नंगे) भंडार को धक्का देने वाला मुद्दा यह है कि, प्राथमिक मालिक (विशेष 'सामान्य' भंडार का) अपने भंडार में जोड़े गए परिवर्तनों को नहीं चाहेगा। उस समय, अगर कोई इस भंडार को धक्का देता है, और एक शाखा (या कोई अन्य परिवर्तन) हटा देता है, तो मालिक को इस तरह के बदलाव की उम्मीद नहीं होगी। इस प्रकार, चेतावनी।

0

आप अपने मुख्य सवाल का अच्छा जवाब है लगता है, इसलिए मैं इस से निपटने होगी:

... अगर मैं बस एक फ़ाइल बदलने के लिए, यह कहते हैं, "बदल दिया लेकिन अद्यतन नहीं"। जो अजीब है ...

Git, के विपरीत हर दूसरे संस्करण नियंत्रण प्रणाली कभी, स्पष्ट उपयोगकर्ता कार्रवाई की आवश्यकता है चीजों को अगले प्रतिबद्ध होना करने के सेट में संशोधित फ़ाइलों को शामिल करने के। इससे पहले कि कर git commit कहना

$ git add <your modified files> 

के बाद उन्हें और संपादन है। मुझे लगता है कि यह केवल कुछ संशोधनों को चुनिंदा रूप से प्रतिबद्ध करना आसान बनाता है।

यदि आप "गिट एड" करते हैं और फिर फ़ाइलों को संशोधित करते हैं, तो आपको फिर से "गिट एड" करना होगा या यह केवल पहले "गिट एड" के बिंदु पर परिवर्तन करेगा।

एक शॉर्टकट, git commit -a है, जो अन्य वीसीएसई "प्रतिबद्ध" संचालन करता है जो कम या ज्यादा करता है। मैं कहता हूं "अधिक या कम" क्योंकि मुझे विश्वास नहीं है कि यह सभी मामलों में एक सटीक मैच है। मुझे पता है कि एकमात्र विचलन यह है कि, गिट के कुछ पुराने संस्करण आपकी सभी संशोधित फ़ाइलों को और अपनी सभी नई फाइलें जोड़ देंगे, और फिर प्रतिबद्ध होंगे; इसे वर्तमान संस्करण में ठीक किया गया है, लेकिन मुझे अभी भी इस बात पर भरोसा नहीं है।

+0

मैं अप-वोट करने वाला था, लेकिन फिर मैंने आपके अंतिम बिंदु को -a के बारे में पढ़ा। यह केवल संशोधित फ़ाइलों को जोड़ देगा, न कि नए (अनचाहे) वाले। – Douglas

+0

यह सुनिश्चित करें कि पिछली बार मैंने कोशिश की थी कि नरक ने नई फाइलें जोड़ दीं :-P – zwol

+0

पर्सफोर्स को अगली प्रतिबद्धताओं के सेट में संशोधित फ़ाइलों को शामिल करने के लिए स्पष्ट उपयोगकर्ता कार्रवाई की भी आवश्यकता है। – Arafangion

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