আমার GoDaddy হোস্টিং পরিকল্পনায় গিট রেপো সেট আপ করা হচ্ছে


14

আমার একটি প্রকল্প রয়েছে যা গিট ব্যবহার করে সংস্করণ-নিয়ন্ত্রিত।

আমি যা করতে সক্ষম হতে চাই তা হ'ল আমার (এসএস-সক্ষম) GoDaddy ভাগ করে নেওয়ার হোস্টিং প্যাকেজে একটি রেপো সেট আপ করুন যাতে আমি এফটিপি-তে টানা এবং নামার পরিবর্তে একটি পুশ দিয়ে মোতায়েন করতে পারি।

কোনও টিপস প্রশংসা করা হবে। ইতিমধ্যে এটি সম্পন্ন কারও কাছ থেকে সেরা অ্যাকাউন্ট হবে তবে আমি ব্যক্তিগতভাবে কোনও অনলাইন খুঁজে পেলাম না।


আপনি সম্ভবত স্ট্যাকওভারফ্লো থেকে আরও ভাল উত্তর পেতে পারেন
এমআরটোমাহক

হ্যাঁ, এটি দুজনের মধ্যে টস-আপ ছিল। এটিকে ক্রস পোস্ট করার চেষ্টা করুন। ধন্যবাদ।
টম রাইট

আমি এখনও একটি গিট রেপো সেট আপ করছি না তবে কীভাবে উত্স কোড সার্ভার প্রোগ্রামিং সেটআপ করা যায়? - আমার ভোটটি সার্ভারফল্টের জন্য, স্পষ্টতই
সার্ভারহরর

1
এটি সম্ভবত না, তবে বিকাশকারীরা এটি সম্পর্কে জানবেন, কারণ তারা এটি স্থাপনের জন্য আমাদের বিশ্বাস করার সম্ভাবনা নেই।
tomjedrz

1
নিশ্চিত জিনিস টমজেদরজ, এবং সম্পূর্ণতার জন্য: stackoverflow.com/questions/1003885/…
টম রাইট

উত্তর:


23

আমি কোনও হোস্টনেইনকে হোস্টিং প্যাকেজ ভাগ করে নেওয়ার জন্য যে সাইটটি হোস্ট করেছি তাতে একই সমস্যা দেখা দিয়েছে। তারাও আপনাকে sshঅ্যাক্সেস দেয় তবে দুর্ভাগ্যক্রমে তাদের এগুলি নেইgit ইনস্টল করেনি এবং চালানোর জন্য আপনাকে অ্যাক্সেসও দেয় না gcc, এটি আপনার ব্যবহারকারীর জন্য গিট ডাউনলোড করা এবং ইনস্টল করা আরও কঠিন করে তোলে।

আমি এই বিধিনিষেধের আশেপাশে কাজ করার একমাত্র উপায়টি হ'ল গিট বাইনারিগুলি অন্য একটি কম্পিউটার থেকে অনুলিপি করা। সম্ভবত একই সমাধানটি আপনার এবং আপনার গোডাডি শেয়ার্ড হোস্টের জন্য কাজ করবে। আমি যা করেছি তা এখানে:


আপনার সার্ভারের কী আর্কিটেকচার রয়েছে তা প্রথমে বের করুন। আমার ক্ষেত্রে এটি 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

এরপরে আপনাকে একই আর্কিটেকচার এবং এটিতে ইনস্টল করা গিট সহ আরও একটি কম্পিউটার চালিত লিনাক্সের সন্ধান করতে হবে। এমনকি লিনাক্সের একই বিতরণ বা সংস্করণটি চালানোর দরকার নেই, যতক্ষণ না তারা একই আর্কিটেকচার এবং আপনি যে বাইনারি এবং লাইব্রেরি ফাইলগুলি প্রয়োজন সেগুলি পেতে পারেন।

প্রধান গিট বাইনারি এর অবস্থান সন্ধান করতে:

> which git
/usr/local/bin/git

কিছু অন্যান্য গুরুত্বপূর্ণ বাইনারি (যেমন git-receive-pack) এছাড়াও একই ডিরেক্টরিতে থাকে, তাই /usr/local/bin/git*আপনার প্রয়োজনীয় সমস্ত কিছু পেয়েছেন তা নিশ্চিত করার জন্য আমি কেবলমাত্র সমস্তটির অনুলিপি করার পরামর্শ দিই ।


অন্যান্য গুরুত্বপূর্ণ ফাইলগুলি হ'ল গিট নির্ভর করে সোর্স সিস্টেমের কোথাও একটি 'লিবেক্সেক' ডিরেক্টরিতে। আপনি যদি এগুলি অনুলিপি না করেন তবে আপনি git pushযেমন করার মতো চেষ্টা করার সময় আপনি একটি আশ্চর্যজনক ত্রুটি বার্তা পেতে পারেন:

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

টার্গেট_হোস্টের মূল গিট লাইব্রেরি ধারণকারী ডিরেক্টরিটি সন্ধান করতে আপনি এটি ব্যবহার করতে পারেন:

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

আমি প্রথমে এই ফাইলগুলি অনুলিপি করার এবং তারপরে গিট চালানোর চেষ্টা করার পরামর্শ দিচ্ছি এটি কোনও অনুপস্থিত ভাগ করা লাইব্রেরি সম্পর্কে অভিযোগ করে কিনা। যদি এটি না হয় তবে আপনি (সম্ভবত) ভাল to যদি তা হয় তবে পড়তে থাকুন। (ভাগ করা লাইব্রেরিগুলি যদি ইতিমধ্যে লক্ষ্য হোস্টে উপস্থিত থাকে এবং সঠিক সংস্করণ হয় তবে তাদের অনুলিপি করার কোনও প্রয়োজন নেই))

আপনার সাথে ফাইল কপি করতে পারেন 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

তারপরে টার্গেট_ হোস্টে এসএসএস করুন। আপনার এগুলির মতো কিছু লাইন যুক্ত করতে হবে ~/.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 এ গিট FAQ এ নথিভুক্ত করা হয়েছে:

মূলত সমস্যাটি হ'ল 'গিট-রিসিভ-প্যাক' দূরবর্তী প্রান্তে ডিফল্ট $ 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

টুলম্যান্টিম.কম একটি নিয়মিত গিট সংগ্রহস্থল এবং একটি খালি সংগ্রহস্থলের মধ্যে পার্থক্য ব্যাখ্যা করে:

একটি ডিফল্ট গিট সংগ্রহস্থল অনুমান করে যে আপনি এটিকে আপনার কার্যক্ষম ডিরেক্টরি হিসাবে ব্যবহার করবেন তাই গিট সমস্ত প্রকল্প ফাইলের পাশাপাশি একটি .git ডিরেক্টরিতে প্রকৃত খালি সংগ্রহস্থল ফাইল সংরক্ষণ করে। রিমোট রিপোজিটরিগুলিতে ওয়ার্কিং কপিগুলির বিপরীতে ফাইল সিস্টেমে ফাইলের অনুলিপিগুলির প্রয়োজন হয় না, কেবলমাত্র ডেল্টা এবং বাইনারি হ'ল সংগ্রহস্থলটির কী-নোট। এই "খালি" গিট মানে কি। খালি ভান্ডার।


আমি এই মুহুর্তের জন্য ধরে নেব যে আপনি ইতিমধ্যে target_hostআপনি যেখানে আপনার ওয়েবসাইটটি (বা আপনি নিযুক্ত করছেন যা কিছু) স্থাপন করতে চান সেখানে একটি ডিরেক্টরি তৈরি করেছেন । চলুন যে ডিরেক্টরি কল ~/www/my_site। আপনি এমনকি আপনার সমস্ত ফাইলের উপরে এটিও করতে পারেন ~/www/my_site already। (আপনার কাছে থাকা বা না হওয়া গুরুত্বপূর্ণ নয়)) আমি সেই মুহুর্তের জন্যও ধরে নেব যে আপনি ইতিমধ্যে .git সাব-ডিরেক্টরিকে অনুলিপি করেন নি ~/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ব্যবহারে আপনি কখনই সেই বার্তাটি দেখতে পাচ্ছেন না বলে আমি মনে করি, কারণ আপনি সাধারণত খালি ভাণ্ডারগুলিতে চাপ দিচ্ছেন But তবে আমাদের দূরবর্তী সংগ্রহস্থল যেহেতু কার্য গাছ এবং সূচক উভয়ই একটি সাধারণ রেপো তাই বোধহয় 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

আমি উভয়ই এসএফ এবং গডাডি এন00 বি, তাই আমার সাথে সহ্য করুন, তবে যাইহোক, আমি এখানে এই আলোচিত দেখে খুব আনন্দিত।

মাত্র আমার 0.02 ডলার, আমি আমার লিনাক্স বাক্সে গিট (গতিশীল) তৈরি করার চেষ্টা করেছি, এটি আমার গডাডি অ্যাকাউন্টে জমা দিয়েছি, এবং এমনকি যদি প্যাসিভ গডাড্ডি মেশিনটিকে কেবল ধাক্কা দেওয়ার চেষ্টা করেও, এটি ওপেনসেল হারিয়ে যাওয়ার কারণে ব্যর্থ হয়। আমি যদি ওপেনসেল দিয়ে স্থিতিশীলভাবে গিট তৈরির চেষ্টা করি তবে এটিও একটি খারাপ ধারণা বলে মনে হয়।

$ 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- ওয়েবসাইট-হাওটুর


0

এটি করার সহজতম উপায় হ'ল আপনার রিমোট সার্ভারে এরকম কিছু চালানো:

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

তারপরে আপনার ডেভেল চেকআউটে:

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

এখানে কোনও সার্ভার বা অন্য কোনও প্রয়োজন নেই এবং আপনার এসএসএস অ্যাক্সেস থাকা অবস্থায় আপনি সেই মেশিন থেকে আনতে / টানতে সক্ষম হবেন।

আপনার নিজের .ssh / কনফিগারেশনটিও যদি সেট আপ করে থাকে তবে এটির সুবিধা নেওয়া উচিত এবং আপনার সেট আপ করা কোনও ব্যক্তিগত কী ব্যবহার করা উচিত।

আপনি যদি আপডেটগুলি প্রচুর পরিমাণে ঠেলে দেওয়ার পরিকল্পনা করেন তবে আপনি আপনার ডেভেল চেকআউটে একটি রিমোট রেপো যুক্ত করতে পারেন:

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

তার পর থেকে আপনি এটি করতে পারেন:

git push godaddy

আরও তথ্যের জন্য, অনলাইন ডক্সেgit push চেক আউট করুন বা আপনার লোকালটিতেgit push --help ম্যান পৃষ্ঠাটি চালু করতে রান করুন।


1
এটি রিমোট সার্ভারে গিট ইনস্টল করার পরেও সমস্যাজনক। আপনার উত্তর (কার্যকর যখন) কেবলমাত্র স্ট্যান্ডার্ড ফ্যাশনে সংগ্রহশালা তৈরির বিষয়টি কভার করে।
টম রাইট

1
ওহহ আচ্ছা. আমি এটা ভাবিনি। আপনি গডাড্ডির হোস্টিং সহায়তা ইমেল করতে এবং তারা আপনার জন্য গিট ইনস্টল করতে পারে কিনা তা দেখতে সক্ষম হতে পারেন, বা এটি তৈরি করার জন্য কমপক্ষে খালি ন্যূনতম ডিপগুলি। যদি তা না হয় তবে আপনি কী আর্কিটেকচারটি চালাচ্ছেন তা নির্ধারণ করতে এবং আপনার নিজের মতো করে একটি সংকলন করতে এবং এটি আপলোড করতে সক্ষম হতে পারেন।
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.