मेरे GoDaddy होस्टिंग प्लान पर git रेपो सेट करना


14

मेरे पास एक प्रोजेक्ट है जो git का उपयोग करके संस्करण-नियंत्रित है।

जो मैं करने में सक्षम होना चाहता हूं वह मेरे (ssh- सक्षम) पर एक रेपो सेट किया गया है GoDaddy ने होस्टिंग पैकेज साझा किया ताकि मैं एफ़टीपी में खींचने और छोड़ने के बजाय एक धक्का के साथ तैनात कर सकूं।

किसी भी युक्तियां की सराहना की जाएगी। बेस्ट किसी ऐसे व्यक्ति का खाता होगा जो पहले से ही ऐसा कर चुका है, लेकिन मैं व्यक्तिगत रूप से कोई ऑनलाइन नहीं ढूंढ सकता।


शायद आपको
स्टैकऑवरफ्लो

हाँ, यह दोनों के बीच टॉस-अप था। इसे क्रॉस-पोस्ट करने का प्रयास कर सकते हैं। धन्यवाद।
टॉम राइट

ऐसा नहीं है कि मैंने अभी तक git रेपो सेट किया है, लेकिन स्रोत कोड सर्वर प्रोग्रामिंग कैसे संबंधित है? - मेरा वोट
सर्वरफॉल्ट के

1
यह शायद नहीं है, लेकिन डेवलपर्स को इसके बारे में पता चल जाएगा, क्योंकि वे इसे स्थापित करने के लिए हम पर भरोसा करने की संभावना नहीं रखते हैं।
टोमजेड्रेज़

1
निश्चित बात टामजेड्रेज़ और पूर्णता के लिए: stackoverflow.com/questions/1003885/…
टॉम राइट

जवाबों:


23

मैं एक साइट है कि मैं एक HostNine साझा होस्टिंग पैकेज पर होस्ट किया था के साथ एक ही समस्या में भाग गया। वे आपको sshएक्सेस भी देते हैं , लेकिन वे दुर्भाग्य से gitस्थापित नहीं होते हैं और आपको चलाने के लिए एक्सेस भी नहीं देते हैं gcc, जिससे आपके उपयोगकर्ता के लिए गिट डाउनलोड और इंस्टॉल करना मुश्किल हो जाता है।

जिस तरह से मैं इन प्रतिबंधों के आसपास काम करने के बारे में सोच सकता था, वह एक और कंप्यूटर से प्राप्त जीनेट बायनेरिज़ पर कॉपी करना था जो उनके पास था। शायद वही समाधान आपके और आपके GoDaddy के साझा होस्ट के लिए काम करेगा। यहाँ मैंने क्या किया है:


सबसे पहले यह पता लगाएं कि आपके सर्वर में क्या आर्किटेक्चर है। मेरे मामले में यह 32-बिट (i386) था। यह पता लगाने के कुछ तरीके हैं:

# uname -a
Linux ___.myserverhosts.com 2.6.18-128.1.6.el5PAE #1 SMP Wed Apr 1 10:02:22 EDT 2009 i686 i686 i386 GNU/Linux

# file /bin/echo
/bin/echo: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.9, dynamically linked (uses shared libs), for GNU/Linux 2.6.9, stripped

आगे आपको उसी आर्किटेक्चर के साथ लिनक्स चलाने वाले एक और कंप्यूटर को खोजने की जरूरत है और उस पर स्थापित git के साथ। उन्हें लिनक्स के समान वितरण या संस्करण को चलाने की भी आवश्यकता नहीं है, जब तक कि वे एक ही आर्किटेक्चर न हों और आपको आवश्यक बायनेरी और लाइब्रेरी फाइल्स मिल सकें।

मुख्य गिट बाइनरी के स्थान को खोजने के लिए:

> which git
/usr/local/bin/git

कुछ अन्य महत्वपूर्ण बायनेरिज़ (जैसे git-receive-pack) भी एक ही डायरेक्टरी में रहते हैं, इसलिए मैं /usr/local/bin/git*यह सुनिश्चित करने के लिए सभी की नकल करने की सलाह देता हूं कि आपको अपनी जरूरत की हर चीज मिल जाए।


अन्य महत्वपूर्ण फाइलें यह हैं कि git स्रोत प्रणाली पर कहीं न कहीं 'libexec' निर्देशिका के अंतर्गत है। यदि आप इन पर प्रतिलिपि नहीं बनाते हैं, तो आप एक आश्चर्यजनक त्रुटि संदेश प्राप्त कर सकते हैं जब आप ऐसा करने की कोशिश करते हैं git push, जैसे मैंने किया था:

git: 'index-pack' is not a git-command. See 'git --help'.

लक्ष्य_होस्ट पर मुख्य git पुस्तकालयों वाली निर्देशिका को खोजने के लिए, आप इसका उपयोग कर सकते हैं:

> git --exec-path
/usr/local/libexec/git-core

मैं पहले उन फाइलों को कॉपी करने की सलाह दूंगा और फिर यह देखने की कोशिश करूंगा कि क्या यह किसी भी लापता साझा लाइब्रेरी के बारे में शिकायत करता है। यदि यह नहीं है, तो आप जाने के लिए (संभवतः) अच्छे हैं। अगर ऐसा होता है, तो पढ़ते रहें। (साझा पुस्तकालयों पर नकल का कोई उपयोग नहीं है यदि वे पहले से ही लक्ष्य होस्ट पर मौजूद हैं और सही संस्करण हैं।)

आप के साथ फ़ाइलों को कॉपी कर सकते हैं scp, rsync, ftp, या जो भी आप के साथ सहज हैं। मैंने इस्तेमाल किया scp, कुछ इस तरह से:

> ssh target_host 'mkdir -p ~/bin ~/libexec'
> scp /usr/local/bin/git* target_host:~/bin
> scp -r /usr/local/libexec/git-core target_host:~/libexec

उसके बाद target_host पर ssh करें। आपको कुछ लाइनों को अपने जैसे जोड़ना होगा ~/.bashrc:

export PATH=$PATH:~/bin
export LD_LIBRARY_PATH=~/lib
export GIT_EXEC_PATH=~/libexec/git-core

यदि आप इस चरण को भूल जाते हैं, तो आप इस त्रुटि को देखकर आश्चर्यचकित हो सकते हैं git push:

git-receive-pack: command not found

यह git.or.cz पर Git FAQ में प्रलेखित है:

मूल रूप से समस्या यह है कि 'git-receive-pack' दूरस्थ अंत में डिफ़ॉल्ट $ PATH में नहीं है।

...

  • सुनिश्चित करें कि आपके पास सही रास्ता है .bashrc(न केवल .bash_profile)

GIT_EXEC_PATHपर प्रलेखित है man git:

   --exec-path
       Path to wherever your core git programs are installed. 
       This can also be controlled by setting the GIT_EXEC_PATH
       environment variable. If no path is given, git will print
       the current setting and then exit.

अपने नए स्रोत ~/.bashrc। अब दौड़ने की कोशिश करो git


यह वही है जिसने मुझे पहली बार दिया:

> git
git: error while loading shared libraries: libcrypto.so.4: cannot open shared object file: No such file or directory

मैं स्रोत मशीन पर इसे चलाकर कॉपी करने के लिए साझा पुस्तकालयों के स्थान का पता लगाने में सक्षम था:

> ldd /usr/local/bin/git
libz.so.1 => /usr/lib/libz.so.1 (0xb7fcf000)
libcrypto.so.4 => /lib/libcrypto.so.4 (0xb7ee4000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb7ed2000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7da6000)
libgssapi_krb5.so.2 => /usr/lib/libgssapi_krb5.so.2 (0xb7d92000)
libkrb5.so.3 => /usr/lib/libkrb5.so.3 (0xb7d2d000)
libcom_err.so.2 => /lib/libcom_err.so.2 (0xb7d2a000)
libk5crypto.so.3 => /usr/lib/libk5crypto.so.3 (0xb7d08000)
libresolv.so.2 => /lib/libresolv.so.2 (0xb7cf5000)
libdl.so.2 => /lib/libdl.so.2 (0xb7cf1000)
/lib/ld-linux.so.2 (0xb7fe8000)

मेरे मामले में मैं सिर्फ नकल करना पड़ा /lib/libcrypto.so.4के लिए खत्म हो ~/libमेरी पर target_hostऔर सब कुछ ठीक था।


अब आपके पास gitअपने साझा किए गए होस्टिंग सर्वर पर काम करना चाहिए और आपको इसे पुश करने में सक्षम होना चाहिए!

अब आपको या तो अपने सर्वर पर एक नया गिट रिपॉजिटरी और वर्क ट्री बनाने की जरूरत है या अपने मौजूदा रिपोजिटरी / वर्क ट्री को कॉपी करें।


वैसे, मुझे नहीं लगता कि इस मामले में आप सर्वर पर एक नंगे भंडार चाहते हैं, क्योंकि आपने कहा था कि आप वास्तविक सामग्री फ़ाइलों को तैनात करना चाहते थे (केवल उन config HEAD objects/ refs/फ़ाइलों के विपरीत जो नंगे भंडार में शामिल होंगी) यदि आप एक कर git push

toolmantim.com एक नियमित गिट रिपॉजिटरी और एक नंगे रिपॉजिटरी के बीच के अंतर को बताता है:

एक डिफ़ॉल्ट गिट रिपॉजिटरी मानती है कि आप इसे अपनी वर्किंग डाइरेक्टरी के रूप में इस्तेमाल कर रहे हैं, इसलिए git सभी प्रॉजेक्ट फाइलों के साथ .it डायरेक्टरी में वास्तविक नंगे रिपोजल फाइल को स्टोर करता है। दूरस्थ रिपॉजिटरी को काम की प्रतियों के विपरीत फाइल सिस्टम पर फ़ाइलों की प्रतियों की आवश्यकता नहीं होती है, सभी की जरूरत है वे डेल्टास और बाइनरी हैं जो कि रिपॉजिटरी के ही नहीं हैं। यही "नंगे" का अर्थ है, चुगली करना। सिर्फ भंडार है।


मैं उस क्षण के लिए मान लूंगा कि आपने पहले ही अपनी निर्देशिका बना ली है target_hostजहाँ आप अपनी वेब साइट (या जो भी आप तैनात कर रहे हैं) को तैनात करना चाहते हैं। चलो उस निर्देशिका को बुलाओ ~/www/my_site। आपके पास अपनी सभी फ़ाइलों पर ftp'd भी हो सकती है ~/www/my_site already। (चाहे आपके पास है या नहीं यह महत्वपूर्ण नहीं है।) मैं उस क्षण के लिए भी मानूंगा कि आपने पहले ही .it उपनिर्देशिका की नकल नहीं की थी ~/www/my_site(यदि आपके पास यह ठीक है तो काम करना चाहिए)।

चूंकि पहले से ही लक्ष्य_होस्ट पर आरंभिक जीओस रिपॉजिटरी नहीं है, इसलिए आपका पहला कदम एक बनाना होगा:

> cd ~/www/my_site
> git init

फिर जो भी मेजबान आपके द्वारा तैनात किए जाने वाले नवीनतम परिवर्तनों के साथ रिपॉजिटरी है (आपका विकास बॉक्स, मुझे लगता है), आपको बस तैनाती के लिए ऐसा कुछ करना होगा:

> git push --all ssh://username@target_host:port/~/www/my_site/.git

यदि आपकी रिपॉजिटरी target_hostपहले से अद्यतित नहीं है तो आप इस तरह की चेतावनी देख सकते हैं :

> 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'.

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

मुझे लगता है कि आपके सर्वर पर 'इग्नोर' करने के लिए इसे सेट करना हमारे लिए सुरक्षित है, हालाँकि, क्योंकि आप वहाँ सीधे रिपॉजिटरी में कोई कमिट नहीं कर रहे हैं। (सभी कमिट्स को संभवतः आपके विकास भंडार में उत्पन्न होना चाहिए और फिर सर्वर पर धकेल दिया जाना चाहिए।)

इसलिए आगे बढ़ें और इसे सेट करें ताकि आपको हर बार पुश करते समय चेतावनी न दिखाई दे:

> ssh target_host 'cd ~/www/my_site/; git config receive.denyCurrentBranch ignore'

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

> ssh target_host 'cd ~/www/my_site/; git reset --hard'

(नोट: सर्वर पर आपके कार्य ट्री में आपके द्वारा किए गए किसी भी परिवर्तन को रिपॉजिटरी में क्या लिखा जाएगा।)

मैंने भी मैटिकस के सुझाव का पालन किया और अपने सर्वर के लिए एक रिमोट बनाया:

> git remote add h9 ssh://username@target_host:port/~/www/my_site/.git

इसलिए अब मुझे केवल यही करना है कि वह तैनाती करे:

> git push --all --force h9
> ssh remote_host 'cd ~/www/my_site/; git reset --hard'

मैं यहां तक ​​गया कि इन कमांडों को एक स्क्रिप्ट में फेंक दूं जिसे मैंने script/deployकिसी भी समय नामित किया है जिसे मैं तैनात करना चाहता हूं मेरे पास चलाने के लिए केवल एक ही कमांड है।

कृपया मुझे बताएं कि क्या आप इन निर्देशों में कोई गलती पाते हैं या यदि आप एक बेहतर समाधान के बारे में जानते हैं।


गजब का! यदि संभव हो तो मैं प्रयास के लिए +10 था।
icc97

2

मैं एक SF और Godaddy n00b दोनों हूँ, इसलिए मेरे साथ रहते हैं, लेकिन वैसे भी, मैं यहाँ इस चर्चा को देखकर बहुत खुश हूँ।

बस मेरे $ 0.02, मैंने अपने लिनक्स बॉक्स पर git (डायनामिक रूप से) बनाने का प्रयास किया, इसे अपने Godaddy खाते में छिपा दिया, और यहां तक ​​कि अगर केवल अन्यथा निष्क्रिय Godaddy मशीन को धक्का देने का प्रयास किया गया, तो यह अनुपलब्ध नहर के कारण विफल हो जाता है। हो सकता है कि अगर मैं ओपनएसएल के साथ सांख्यिकीय रूप से निर्माण करने का प्रयास करता हूं, लेकिन यह एक बुरा विचार भी लगता है।

$ git remote add godaddy ssh://unclecj@sveningsson.info//home/content/u/n/c/unclecj/foo.git

$ git push godaddy master
bash: git-receive-pack: command not found
fatal: The remote end hung up unexpectedly

$ git push --receive-pack="/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack" godaddy master
/home/content/u/n/c/unclecj/opt/git-1.6.3/bin/git-receive-pack: error while loading shared libraries: libcrypto.so.0.9.8: cannot open shared object file: No such file or directory
fatal: The remote end hung up unexpectedly

ऑफ टॉपिक, लेकिन क्या मुझे गोडैडी से समर्थन की कमी की उम्मीद है, क्या मुझे इसके बजाय ड्रीमहोस्ट चुनने का अफसोस करना चाहिए?

सादर सी.जे.

पुनश्च। उत्तर नहीं, लेकिन एक सुझाव है कि एक बार गिट-प्राप्त गोडैडी (यह है?) पर काम कर रहा है, तो एक अलग कार्यस्थान के साथ एक रिपॉजिटरी वेब के लिए तैनात करने का एक शानदार तरीका है: http://toroid.org/ams/git- वेबसाइट-howto


0

ऐसा करने का सबसे आसान तरीका आपके दूरस्थ सर्वर पर कुछ इस तरह से चल रहा है:

mkdir repo.git
cd repo.git
git init --bare 

तो फिर अपने devel चेकआउट पर:

git push --all ssh://<username>@<your server>/~/path/to/repo/relative/to/homedir/repo.git

कोई सर्वर या कुछ और आवश्यक नहीं है, और आपको उस मशीन से प्राप्त करने और खींचने में सक्षम होना चाहिए, जब तक आपके पास ssh एक्सेस हो।

यदि आपके पास अपना .ssh / config सेट है, तो इसका लाभ उठाना चाहिए और आपके द्वारा सेट की गई किसी भी निजी कुंजी का उपयोग करना चाहिए।

यदि आप अपडेट को बहुत आगे बढ़ाने की योजना बनाते हैं, तो आप अपने डेवेल चेकआउट में एक रिमोट रेपो जोड़ सकते हैं:

git remote add godaddy ssh://<username>@<your server>/path/to/repo.git

तब से तुम पर कर सकते हैं:

git push godaddy

अधिक जानकारी के लिए, अपने स्थानीय पर मैन पेज लॉन्च करने के लिए ऑनलाइन डॉक्स देखेंgit push या चलाएं git push --help


1
यह अधिक दूरस्थ सर्वर पर git इंस्टॉलेशन है जो कि हालांकि तकलीफदेह है। आपका उत्तर (उपयोगी होते हुए) सिर्फ मानक शैली में रिपॉजिटरी के निर्माण को कवर करता है।
टॉम राइट

1
हाँ! मैंने देखा। मैंने ऐसा नहीं सोचा था। आप Godaddy के होस्टिंग समर्थन को ईमेल करने में सक्षम हो सकते हैं और देख सकते हैं कि क्या वे आपके लिए गिट स्थापित कर सकते हैं, या कम से कम आपके लिए इसे बनाने के लिए नंगे न्यूनतम डिपो। यदि नहीं, तो आप यह पता लगाने में सक्षम हो सकते हैं कि यह किस आर्किटेक्चर से चल रहा है और एक समान पर अपना खुद का संकलन करें और इसे अपलोड करें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.