Einrichten eines Git-Repos auf meinem GoDaddy-Hosting-Plan


14

Ich habe ein Projekt, das mit Git versionskontrolliert ist.

Ich möchte in meinem (ssh-fähigen) GoDaddy-Shared-Hosting-Paket ein Repo einrichten, damit ich es per Push bereitstellen kann, anstatt per Drag-and-Drop in FTP.

Irgendwelche Tipps wäre dankbar. Am besten wäre ein Account von jemandem, der es bereits getan hat, aber ich konnte keinen online finden.


Sie würden wahrscheinlich bessere Antworten auf diese von StackOverflow
mrTomahawk

Ja, es war ein Fehler zwischen den beiden. Könnte versuchen, es zu übermitteln. Vielen Dank.
Tom Wright

Noch nicht, dass ich ein Git-Repo eingerichtet habe, aber wie hängt die Einrichtung eines Quellcodeservers zusammen? - Meine Stimme ist für Serverfehler, klar
Serverhorror

1
Das ist wahrscheinlich nicht der Fall, aber die Entwickler werden es wissen, da sie uns bei der Einrichtung wahrscheinlich nicht vertrauen werden.
Tomjedrz

1
Sicher, Tomjedrz, und der Vollständigkeit halber: stackoverflow.com/questions/1003885/…
Tom Wright

Antworten:


23

Ich hatte das gleiche Problem mit einer Site, die ich in einem HostNine Shared Hosting-Paket gehostet hatte. Sie gewähren Ihnen ebenfalls sshZugriff, haben aber leider nicht gitinstalliert und gewähren Ihnen nicht einmal Zugriff auf die Ausführung gcc, was das Herunterladen und Installieren von git für Ihren Benutzer ziemlich schwierig macht.

Die einzige Möglichkeit, diese Einschränkungen zu umgehen, bestand darin, die Git-Binärdateien von einem anderen Computer zu kopieren, auf dem sie installiert waren. Möglicherweise funktioniert die gleiche Lösung für Sie und Ihren gemeinsam genutzten GoDaddy-Host. Folgendes habe ich getan:


Stellen Sie zunächst fest, über welche Architektur Ihr Server verfügt. In meinem Fall war es 32-Bit (i386). Hier sind ein paar Möglichkeiten, das herauszufinden:

# 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

Als nächstes müssen Sie einen anderen Computer finden, auf dem Linux mit derselben Architektur und installiertem Git ausgeführt wird. Sie müssen nicht einmal dieselbe Distribution oder Version von Linux ausführen, solange sie dieselbe Architektur haben und Sie die benötigten Binärdateien und Bibliotheksdateien finden.

So finden Sie den Speicherort der Haupt-Git-Binärdatei:

> which git
/usr/local/bin/git

Einige andere wichtige Binärdateien (wie git-receive-pack) befinden sich ebenfalls im selben Verzeichnis. Ich empfehle daher, nur alle /usr/local/bin/git*zu kopieren , um sicherzustellen, dass Sie alles bekommen, was Sie brauchen.


Andere wichtige Dateien, von denen git abhängt, befinden sich in einem 'libexec'-Verzeichnis irgendwo auf dem Quellsystem. Wenn Sie diese nicht überschreiben, wird möglicherweise eine überraschende Fehlermeldung angezeigt, wenn Sie versuchen git push, wie folgt vorzugehen:

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

So finden Sie das Verzeichnis mit den wichtigsten Git-Bibliotheken auf target_host:

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

Ich würde empfehlen, diese Dateien zuerst zu kopieren und dann zu versuchen, git auszuführen, um festzustellen, ob es sich über fehlende gemeinsam genutzte Bibliotheken beschwert. Wenn dies nicht der Fall ist, können Sie (vermutlich) loslegen. Wenn ja, lesen Sie weiter. (Kopieren über gemeinsam genutzte Bibliotheken ist nicht sinnvoll, wenn diese bereits auf dem Zielhost vorhanden sind und die richtige Version aufweisen.)

Sie können die Dateien mit kopieren scp, rsync, ftp, oder was auch immer Sie sind komfortabel mit. Ich habe so scpetwas verwendet:

> 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

Dann ssh zu target_host. Sie müssen einige Zeilen wie diese zu Ihrem hinzufügen ~/.bashrc:

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

Wenn Sie diesen Schritt vergessen, werden Sie möglicherweise überrascht sein, diesen Fehler zu sehen, wenn Sie Folgendes ausführen git push:

git-receive-pack: command not found

Dies ist in den Git-FAQ auf git.or.cz dokumentiert:

Grundsätzlich besteht das Problem darin, dass 'git-receive-pack' nicht im Standard $ PATH auf der Remote-Seite enthalten ist.

...

  • Stellen Sie sicher, dass Sie den richtigen Pfad eingerichtet haben .bashrc(nicht nur .bash_profile)

GIT_EXEC_PATHist dokumentiert am 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.

Beschaffe dein neues ~/.bashrc. Versuchen Sie jetzt zu laufen git.


Das gab es mir zum ersten Mal:

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

Ich konnte den Speicherort der freigegebenen Bibliotheken zum Kopieren herausfinden, indem ich Folgendes auf dem Quellcomputer ausführte:

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

In meinem Fall hatte ich nur zu kopieren , /lib/libcrypto.so.4um über ~/libmeine target_hostund alles war in Ordnung.


Jetzt sollten Sie gitauf Ihrem gemeinsam genutzten Hosting-Server arbeiten und in der Lage sein, darauf zu pushen!

Jetzt müssen Sie entweder ein neues Git-Repository und einen neuen Arbeitsbaum auf Ihrem Server erstellen oder Ihren vorhandenen Repository- / Arbeitsbaum kopieren.


Übrigens, ich glaube nicht, dass Sie in diesem Fall ein nacktes Repository auf dem Server haben möchten, da Sie gesagt haben, dass Sie die eigentlichen Inhaltsdateien (im Gegensatz zu den Dateien, die in einem nackten Repository enthalten wären) immer bereitstellenconfig HEAD objects/ refs/ möchten du machst ein git push.

toolmantim.com erklärt den Unterschied zwischen einem normalen Git-Repository und einem leeren Repository:

In einem Standard-Git-Repository wird davon ausgegangen, dass Sie es als Arbeitsverzeichnis verwenden. Daher speichert Git die eigentlichen Bare-Repository-Dateien in einem Git-Verzeichnis neben allen Projektdateien. Remote-Repositorys benötigen im Gegensatz zu Arbeitskopien keine Kopien der Dateien im Dateisystem. Sie benötigen lediglich die Deltas und Binär-What-Nots des Repositorys. Dies ist, was "nackt" bedeutet, um zu git. Nur das Repository selbst.


Ich gehe für den Moment davon aus, dass Sie bereits ein Verzeichnis erstellt haben, in target_hostdem Sie Ihre Website bereitstellen möchten (oder was auch immer Sie bereitstellen). Nennen wir das Verzeichnis ~/www/my_site. Möglicherweise haben Sie sogar über alle Ihre Dateien zu ftp'd ~/www/my_site already. (Ob Sie es getan haben oder nicht, ist nicht wichtig.) Ich gehe auch für den Moment davon aus, dass Sie das .git-Unterverzeichnis noch nicht in dieses kopiert haben ~/www/my_site(es sollte aber gut funktionieren, wenn Sie es getan haben).

Da auf target_host noch kein Git-Repository initialisiert ist, müssen Sie zunächst eines erstellen:

> cd ~/www/my_site
> git init

Unabhängig davon, auf welchem ​​Host sich das Repository mit den neuesten Änderungen befindet, die Sie bereitstellen möchten (Ihre Entwicklungsbox, würde ich vermuten), müssen Sie zum Bereitstellen nur Folgendes tun:

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

Möglicherweise wird eine Warnung wie die folgende angezeigt, wenn Ihr Repository auf target_hostnoch nicht aktuell ist:

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

( gitIch glaube, im normalen Gebrauch wird diese Meldung nie angezeigt, weil Sie normalerweise auf leere Repositorys drängen . Da unser Remote-Repository in diesem Fall jedoch ein normales Repository mit einem Arbeitsbaum und einem Index ist, gitbesteht verständlicherweise die Befürchtung, dass dies der Fall sein könnte etwas durcheinander bringen.)

Ich denke, es ist sicher für uns, es auf Ihrem Server auf "Ignorieren" zu setzen, da Sie dort wahrscheinlich keine Commits direkt an das Repository vornehmen. (Alle Commits sollten wahrscheinlich aus Ihrem Entwicklungs-Repository stammen und dann auf den Server übertragen werden.)

Stellen Sie dies so ein, dass die Warnung nicht bei jedem Drücken angezeigt wird:

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

Der pushselbst aktualisiert nur den Index, NICHT jedoch die Dateien im Arbeitsbaum. Das Aktualisieren dieser Dateien ist jedoch nur ein Teil der Aufgabe, die wir zu erledigen versuchen. Unsere Aufgabe wird also erst dann erledigt, wenn wir gitden Inhalt des Index in den Arbeitsbaum selbst schreiben:

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

(Hinweis: Alle Änderungen, die Sie möglicherweise an Ihrem Arbeitsbaum auf dem Server vorgenommen haben, werden durch die Angaben im Repository überschrieben.)

Ich bin auch dem Vorschlag von mattikus gefolgt und habe eine Fernbedienung für meinen Server erstellt:

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

Jetzt muss ich nur noch Folgendes tun, um das Deployment durchzuführen:

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

Ich bin sogar so weit gegangen, diese Befehle in ein Skript zu integrieren, das ich benannt habe, script/deploysodass ich bei jeder Bereitstellung nur einen einzigen Befehl ausführen muss.

Bitte lassen Sie mich wissen, wenn Sie Fehler in dieser Anleitung finden oder eine bessere Lösung kennen.


Tolle! Ich würde für Mühe +10, wenn es möglich wäre.
ICC97

2

Ich bin sowohl ein SF als auch ein Godaddy n00b, also nimm es mit, aber trotzdem bin ich sehr froh, das hier besprochen zu sehen.

Gerade mal 0,02 US-Dollar, habe ich versucht, Git (dynamisch) auf meiner Linux-Box zu erstellen und auf mein Godaddy-Konto zu übertragen, und selbst wenn ich nur versucht habe, es auf die ansonsten passive Godaddy-Maschine zu übertragen, scheitert es an fehlendem OpenSL. Vielleicht, wenn ich versuche, git mit openssl statisch zu bauen, aber es fühlt sich auch nach einer schlechten Idee an.

$ 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

Off Topic, aber ist dies der Mangel an Unterstützung, den ich von Godaddy erwarten sollte? Sollte ich es bereuen, nicht stattdessen Traumhosts gewählt zu haben?

Viele Grüße CJ

PS. Keine Antwort, aber ein Vorschlag, dass ein Repository mit einem getrennten Arbeitsbaum eine großartige Möglichkeit darstellt, um es für das Web bereitzustellen, wenn git-receive auf godaddy läuft (oder?): Http://toroid.org/ams/git- Website-Howto


0

Der einfachste Weg, dies zu tun, besteht darin, auf Ihrem Remote-Server Folgendes auszuführen:

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

Dann auf Ihrer Entwicklungskasse:

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

Es ist weder ein Server noch etwas anderes erforderlich, und Sie sollten in der Lage sein, Daten von diesem Computer abzurufen / abzurufen, solange Sie über SSH-Zugriff verfügen.

Wenn Sie auch Ihre .ssh / config-Datei eingerichtet haben, sollten Sie diese nutzen und alle privaten Schlüssel verwenden, die Sie möglicherweise eingerichtet haben.

Wenn Sie vorhaben, Updates häufig zu veröffentlichen, können Sie Ihrer Entwicklungskasse ein Remote-Repo hinzufügen:

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

Von da an können Sie:

git push godaddy

Weitere Informationen finden Sie in den Online-Dokumenten untergit push oder git push --helprufen Sie die Manpage auf Ihrem lokalen Computer auf .


1
Es ist mehr die Git-Installation auf dem Remote-Server, die allerdings mühsam ist. Ihre Antwort (auch wenn sie nützlich ist) deckt lediglich die Erstellung des Repositorys auf standardmäßige Weise ab.
Tom Wright

1
Ahh, ich verstehe. Daran hatte ich nicht gedacht. Sie können möglicherweise eine E-Mail an den Hosting-Support von godaddy senden und prüfen, ob dieser git für Sie installieren kann oder zumindest die Mindestanforderungen, die Sie erfüllen müssen, um es selbst zu erstellen. Wenn nicht, können Sie möglicherweise herausfinden, welche Architektur ausgeführt wird, Ihre eigene kompilieren und diese hochladen.
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.