GoDaddy barındırma planımda bir git repo oluşturma


14

Git kullanarak sürüm kontrollü bir projem var.

Yapabileceğim şey, (ssh etkin) GoDaddy paylaşılan barındırma paketimde bir repo kurmak, böylece FTP'de sürükleyip bırakmak yerine bir push ile dağıtabiliyorum.

Herhangi bir ipucu takdir edilecektir. En iyisi, daha önce yapmış birinden bir hesap olurdu, ancak kişisel olarak çevrimiçi bulamadım.


Muhtemelen bu konuda StackOverflow
alacağız

Evet, ikisi arasında bir savundu. Çapraz göndermeyi deneyebilir. Teşekkürler.
Tom Wright

Henüz bir git repo ayarladığımdan değil, ancak bir kaynak kodu sunucu programlamasının kurulmasıyla ilgili? - Benim
oyum

1
Muhtemelen değil, ama geliştiriciler bunu öğrenecekler, çünkü bunu kurmak için bize güvenmeleri pek mümkün değil.
tomjedrz

1
Tabii ki tomjedrz ve bütünlüğü uğruna: stackoverflow.com/questions/1003885/…
Tom Wright

Yanıtlar:


23

Bir HostNine paylaşılan barındırma paketinde barındırdığı bir site ile aynı sorunla karşılaştım. Onlar da size ssherişim veriyorlar, ancak maalesef gityüklememişler ve çalıştırmanıza bile izin vermiyorlar gcc, böylece kullanıcı için git'i indirip yüklemeyi zorlaştırıyor.

Bu kısıtlamalar üzerinde düşünmek için tek yolu git ikili dosyaları onları olan başka bir bilgisayar üzerinden kopyalamak oldu. Belki de aynı çözüm sizin ve GoDaddy paylaşılan ana makineniz için işe yarar. İşte yaptım:


Önce sunucunuzun hangi mimariye sahip olduğunu bulun. Benim durumumda 32 bit (i386) idi. İşte bunu anlamanın birkaç yolu:

# 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

Daha sonra, aynı mimariye sahip ve üzerinde kurulu olan Linux çalıştıran başka bir bilgisayar bulmanız gerekiyor. Aynı mimari oldukları ve ihtiyacınız olan ikili dosyaları ve kütüphane dosyalarını bulabileceğiniz sürece, Linux'un aynı dağıtımını veya sürümünü çalıştırması bile gerekmez.

Ana git ikili dosyasının yerini bulmak için:

> which git
/usr/local/bin/git

Diğer bazı önemli ikili dosyalar (gibi git-receive-pack) aynı dizinde bulunur, bu yüzden /usr/local/bin/git*ihtiyacınız olan her şeyi aldığınızdan emin olmak için hepsini kopyalamanızı öneririm .


Diğer önemli dosyalar git'e bağımlıdır, kaynak sistemde bir yerde bir 'libexec' dizini altındadır. Bunları kopyalamazsanız git push, yaptığım gibi, yapmaya çalıştığınızda şaşırtıcı bir hata mesajı alabilirsiniz :

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

Target_host üzerindeki core git kitaplıklarını içeren dizini bulmak için şunları kullanabilirsiniz:

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

Önce bu dosyaları kopyalamayı ve sonra herhangi bir eksik paylaşılan kitaplıklardan şikayet edip etmediğini görmek için git çalıştırmayı denemenizi tavsiye ederim. Değilse, gitmek için (muhtemelen) iyidir. Varsa, okumaya devam edin. (Hedef ana bilgisayarda zaten varsa ve doğru sürümdeyse, paylaşılan kitaplıklar üzerinden kopyalamayı kullanamazsınız.)

Sen dosyaları kopyalayabilir scp, rsync, ftpveya sen rahat ne olursa olsun. Kullandım scp, böyle bir şey:

> 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

Sonra ssh to target_host. Aşağıdakilere bunlar gibi bazı satırlar eklemeniz gerekir ~/.bashrc:

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

Bu adımı unutursanız, aşağıdakileri yaptığınızda bu hatayı gördüğünüzde şaşırabilirsiniz git push:

git-receive-pack: command not found

Bu, git.or.cz adresindeki Git SSS bölümünde belgelenmiştir:

Temelde sorun 'git-take-pack' uzak ucunda varsayılan $ PATH olmamasıdır.

...

  • Doğru yolu ayarladığınızdan emin olun .bashrc(sadece değil .bash_profile)

GIT_EXEC_PATHbelgelendiği yer 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.

Yeni kaynak ~/.bashrc. Şimdi koşmayı deneyin git.


Bana ilk defa verdi:

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

Kaynak makinede çalıştırarak kopyalanacak paylaşılan kitaplıkların yerini anlayabildim:

> 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)

Benim durumumda ben sadece kopyalamak zorunda /lib/libcrypto.so.4yanına ~/libon my target_hostve her şey iyiydi.


Şimdi gitpaylaşılan barındırma sunucunuz üzerinde bir çalışma olmalı ve onu itmek mümkün olmalıdır!

Şimdi sunucunuzda yeni bir git deposu ve çalışma ağacı oluşturmanız veya mevcut deponuzu / çalışma ağacınızı kopyalamanız gerekir.


Bu arada, gerçek içerik dosyalarını (yalnızca çıplak bir depoya dahil edilecek dosyaların aksine) dağıtmak istediğinizi söylediğiniz için, bu durumda sunucuda çıplak bir depo istediğinizi düşünmüyorum. config HEAD objects/ refs/bir git push.

toolmantim.com , normal bir git deposu ile çıplak bir havuz arasındaki farkı açıklar:

Varsayılan git deposu onu çalışma dizininiz olarak kullanacağınızı varsayar, bu yüzden git gerçek çıplak depo dosyalarını tüm proje dosyalarının yanında bir .git dizininde depolar. Uzak depolar, çalışan kopyalardan farklı olarak dosya sistemindeki dosyaların kopyalarına ihtiyaç duymaz, tek ihtiyaçları olan deponun kendisinin deltaları ve ikili olmayanlarıdır. “Çıplak” demek gitmektir. Sadece deponun kendisi.


target_hostŞimdilik, web sitenizi (veya dağıttığınız her şeyi) dağıtmak istediğiniz yerde bir dizin oluşturduğunuzu varsayacağım . Diyelim o dizini ~/www/my_site. Hatta tüm dosyalarınızın üzerinde ftp'd yapmış olabilirsiniz ~/www/my_site already. (Olup olmamanız önemli değildir.) Ayrıca, .git alt dizinini zaten kopyalamamış olduğunuzu da varsayacağım ~/www/my_site(eğer varsa iyi çalışmalıdır).

Target_host üzerinde başlatılmış bir git deposu olmadığından, ilk adımınız bir tane oluşturmak olacaktır:

> cd ~/www/my_site
> git init

Sonra hangi ana bilgisayarda dağıtmak istediğiniz en son değişikliklerin bulunduğu depodan (geliştirme kutunuz, sanırım), dağıtmak için böyle bir şey yapmanız yeterlidir:

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

Üzerindeki deponuz target_hostzaten güncel değilse aşağıdaki gibi bir uyarı görebilirsiniz :

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

(Normal gitkullanımda bu mesajı asla görmezsiniz, bence, çünkü normalde çıplak depolara itiyorsunuz . Ancak bu durumda uzak depomuz hem bir çalışma ağacı hem de bir endeks ile normal bir repo gitolduğundan, anlaşılabilir bir şekilde bir şey karıştırmak.)

Yine de sunucunuzda 'yoksaymaya' ayarlamamız güvenli olduğunu düşünüyorum, çünkü doğrudan oradaki depoya herhangi bir taahhütte bulunmayacaksınız. (Tüm taahhütler muhtemelen geliştirme deponuzdan kaynaklanmalı ve daha sonra sunucuya aktarılmalıdır.)

Bu yüzden devam edin ve bunu her bastığınızda uyarıyı görmeyecek şekilde ayarlayın:

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

pushKendisi sadece güncellemeler endeksi ise DEĞİL iş ağacın kendisinde dosyaları. Bu dosyaları güncellemek, yapmaya çalıştığımız şeylerin sadece bir kısmıdır, bu nedenle git, dizinin içeriğini çalışma ağacının kendisine yazmayı söyleyene kadar işimiz yapılmaz :

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

(Not: Sunucudaki çalışma ağacınızda yapmış olabileceğiniz değişikliklerin tümü depoda bulunanların üzerine yazılır.)

Ayrıca mattikus'un önerisini izledim ve sunucum için bir uzaktan kumanda oluşturdum:

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

Şimdi dağıtmak için tek yapmam gereken:

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

Hatta bu komutları adlandırmak script/deployistediğim bir komut dosyasına atacak kadar ileri gittim .

Bu talimatlarda herhangi bir hata bulursanız veya daha iyi bir çözüm biliyorsanız lütfen bize bildirin.


İnanılmaz! Mümkünse çaba için +10 olurdu.
icc97

2

Hem SF hem de godaddy n00b'yim, bu yüzden bana katlan, ama yine de, burada tartışıldığını gördüğüme çok sevindim.

Sadece 0.02 dolarım, linux kutumda git (dinamik olarak) oluşturmaya çalıştım, godaddy hesabımla paylaştım ve sadece pasif godaddy makinesine itmeye çalışsa bile, eksik openssl nedeniyle başarısız oluyor. Belki git ile statik olarak openssl oluşturmaya çalışırsam kötü bir fikir gibi gelir.

$ 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

Konu dışı, ama bu godaddy'den beklememem gereken bir çeşit eksiklik mi?

Saygılarımla CJ

PS. Bir cevap değil, ama git-buy'un bir kez godaddy üzerinde çalıştığına dair bir öneri (öyle mi?), O zaman bağımsız bir çalışma ağacına sahip bir depo web için konuşlandırmanın harika bir yoludur: http://toroid.org/ams/git- web sitesi-howto


0

Bunu yapmanın en kolay yolu, uzak sunucunuzda böyle bir şey çalıştırmaktır:

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

Sonra devel kasanızda:

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

Herhangi bir sunucu veya başka bir şey gerekmez ve ssh erişiminiz olduğu sürece bu makineyi getirebilmeniz / çekebilmeniz gerekir.

.Ssh / config kurulumunuz da varsa, bundan yararlanmalı ve ayarlamış olabileceğiniz özel anahtarları kullanmalıdır.

Güncellemeleri çok fazla göndermeyi planlıyorsanız, geliştirici kasanıza uzak bir repo ekleyebilirsiniz:

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

O zamandan itibaren şunları yapabilirsiniz:

git push godaddy

Daha fazla bilgi için, çevrimiçi dokümanlaragit push göz git push --helpatın veya yerel olarak man sayfasını başlatmak için çalıştırın .


1
Uzak sunucuda sorun olsa da git kurulumu daha fazla. Cevabınız (kullanışlı olsa da) sadece standart bir şekilde havuzun oluşturulmasını kapsamaktadır.
Tom Wright

1
Ahh, anlıyorum. Bunu düşünmemiştim. Godaddy'nin barındırma desteğini e-postayla gönderebilir ve sizin için git'i yükleyip yükleyemeyeceklerini veya en azından kendiniz inşa etmeniz için minimum asgari deps'leri yükleyebileceklerini görebilirsiniz. Değilse, hangi mimariyi çalıştırdığını anlayabilir ve kendinizinkini benzer bir mimaride derleyebilir ve yükleyebilirsiniz.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.