J'ai un projet dont la version est contrôlée à l'aide de git.
Ce que je veux être en mesure de mettre en place un dépôt sur mon package d'hébergement partagé GoDaddy (compatible ssh) afin que je puisse déployer avec une poussée plutôt que de glisser-déposer en FTP.
Des conseils seraient appréciés. Le mieux serait un compte de quelqu'un qui l'a déjà fait, mais je n'ai personnellement trouvé aucun compte en ligne.
Réponses:
J'ai rencontré le même problème avec un site que j'avais hébergé sur un package d'hébergement partagé HostNine. Ils vous donnent également
ssh
accès, mais ils ne l'ont malheureusement pasgit
installé et ne vous donnent même pas accès à l'exécutiongcc
, ce qui rend le téléchargement et l'installation de git assez difficiles pour votre utilisateur.La seule façon dont je pouvais penser à contourner ces restrictions était de copier les binaires git depuis un autre ordinateur qui les avait. Peut-être que la même solution fonctionnerait pour vous et votre hôte partagé GoDaddy. Voici ce que j'ai fait:
Déterminez d'abord l'architecture de votre serveur. Dans mon cas, c'était 32 bits (i386). Voici quelques façons de comprendre cela:
Ensuite, vous devez trouver un autre ordinateur exécutant Linux avec la même architecture et avec git installé dessus. Ils n'ont même pas besoin d'exécuter la même distribution ou version de Linux, tant qu'ils sont de la même architecture et que vous pouvez trouver les fichiers binaires et les fichiers de bibliothèque dont vous avez besoin.
Pour trouver l'emplacement du binaire git principal:
Certains autres binaires importants (comme
git-receive-pack
) résident également dans le même répertoire, je vous recommande donc de simplement les copier tous/usr/local/bin/git*
pour vous assurer d'obtenir tout ce dont vous avez besoin.D'autres fichiers importants sont ceux dont git dépend sont sous un répertoire «libexec» quelque part sur le système source. Si vous ne les recopiez pas, vous pouvez obtenir un message d'erreur surprenant lorsque vous essayez de faire un
git push
, comme je l'ai fait:Pour trouver le répertoire contenant les bibliothèques git principales sur target_host, vous pouvez utiliser ceci:
Je recommanderais de copier ces fichiers en premier, puis d'essayer d'exécuter git pour voir s'il se plaint d'éventuelles bibliothèques partagées manquantes. Si ce n'est pas le cas, alors vous êtes (vraisemblablement) prêt à partir. Si c'est le cas, continuez à lire. (N'utilisez pas la copie sur des bibliothèques partagées si elles existent déjà sur l'hôte cible et sont la version correcte.)
Vous pouvez copier les fichiers avec
scp
,rsync
,ftp
ou tout ce que vous êtes à l' aise avec. J'ai utiliséscp
quelque chose comme ça:Ensuite, ssh vers target_host. Vous devrez ajouter quelques lignes comme celles-ci à votre
~/.bashrc
:Si vous oubliez cette étape, vous pourriez être surpris de voir cette erreur lorsque vous effectuez une
git push
:Ceci est documenté dans la FAQ Git sur git.or.cz:
GIT_EXEC_PATH
est documenté surman git
:Achetez votre nouveau
~/.bashrc
. Maintenant, essayez de courirgit
.C'est ce que ça m'a donné la première fois:
J'ai pu déterminer l'emplacement des bibliothèques partagées à copier en exécutant ceci sur la machine source:
Dans mon cas , je devais juste copier
/lib/libcrypto.so.4
vers~/lib
montarget_host
et tout allait bien.Maintenant, vous devriez avoir un travail
git
sur votre serveur d'hébergement partagé et vous devriez pouvoir y pousser!Vous devez maintenant créer un nouveau référentiel git et une arborescence de travail sur votre serveur ou copier votre référentiel / arborescence de travail existant.
Soit dit en passant, je ne pense pas qu'un référentiel nu soit ce que vous voulez sur le serveur dans ce cas puisque vous avez dit que vous vouliez déployer les fichiers de contenu réels (par opposition aux seuls
config HEAD objects/ refs/
fichiers qui seraient inclus dans un référentiel nu) chaque fois vous faites ungit push
.toolmantim.com explique la différence entre un référentiel git normal et un référentiel nu:
Je suppose pour le moment que vous avez déjà créé un répertoire sur votre
target_host
où vous souhaitez déployer votre site web (ou quoi que vous déployiez). Appelons ce répertoire~/www/my_site
. Vous pouvez même avoir ftp'd sur tous vos fichiers~/www/my_site already
. (Que vous ayez ou non n'est pas important.) Je suppose également pour le moment que vous n'avez pas déjà copié le sous-répertoire .git dans~/www/my_site
(cela devrait fonctionner très bien si vous l'avez déjà fait).Puisqu'il n'y a pas déjà de dépôt git initialisé sur target_host, votre première étape serait d'en créer un:
Ensuite, quel que soit l'hôte disposant du référentiel avec les dernières modifications que vous souhaitez déployer (votre boîte de développement, je suppose), il vous suffit de faire quelque chose comme ceci pour déployer:
Un avertissement comme celui-ci peut s'afficher si votre référentiel
target_host
n'est pas déjà à jour:(En
git
utilisation normale , vous ne voyez jamais ce message, je pense, parce que vous poussez normalement vers des référentiels nus . Mais puisque notre référentiel distant dans ce cas est un dépôt normal avec à la fois un arbre de travail et un index, ilgit
est compréhensible que cela puisse gâcher quelque chose.)Je pense qu'il est sûr pour nous de le régler sur «ignorer» sur votre serveur, car vous ne risquez pas de faire de commit directement dans le référentiel. (Toutes les validations devraient probablement provenir de votre référentiel de développement, puis être envoyées au serveur.)
Alors, allez-y et réglez ceci pour que vous ne voyiez pas l'avertissement à chaque fois que vous appuyez sur:
Le
push
lui-même ne met à jour que l'index, mais PAS les fichiers dans l'arborescence de travail elle-même. Cependant, la mise à jour de ces fichiers n'est que le point essentiel de ce que nous essayons de faire, donc notre travail n'est pas terminé jusqu'à ce que nous disionsgit
d'écrire le contenu de l'index dans l'arbre de travail lui-même, comme ceci:(Remarque: toutes les modifications que vous pourriez avoir apportées à votre arborescence de travail sur le serveur seront écrasées par ce qui se trouve dans le référentiel.)
J'ai également suivi la suggestion de mattikus et créé une télécommande pour mon serveur:
Alors maintenant, tout ce que je dois faire pour déployer est:
Je suis même allé jusqu'à lancer ces commandes dans un script que j'ai nommé,
script/deploy
donc chaque fois que je veux déployer, je n'ai qu'une seule commande à exécuter.Veuillez me faire savoir si vous trouvez des erreurs dans ces instructions ou si vous connaissez une meilleure solution.
la source
Je suis à la fois un SF et un godaddy n00b, alors restez avec moi, mais de toute façon, je suis très heureux de voir cela discuté ici.
Juste mon 0,02 $, j'ai tenté de construire git (dynamiquement) sur ma boîte Linux, en le jetant sur mon compte godaddy, et même si j'essaye simplement de pousser vers la machine godaddy autrement passive, il échoue en raison de l'opensl manquant. Peut-être que si j'essaye de compiler git statiquement avec openssl, mais c'est aussi une mauvaise idée.
Hors sujet, mais est-ce le genre de manque de soutien que je dois attendre de Godaddy, devrais-je regretter de ne pas avoir choisi les dreamhosts à la place?
Cordialement CJ
PS. Pas une réponse, mais une suggestion qu'une fois que git-receive fonctionne sur godaddy (n'est-ce pas?), Alors un référentiel avec un arbre de travail détaché est un excellent moyen de déployer pour le web: http://toroid.org/ams/git- site web-howto
la source
La façon la plus simple de le faire est d'exécuter quelque chose comme ça sur votre serveur distant:
Ensuite, lors de votre validation de développement:
Il n'y a pas de serveur ou quoi que ce soit d'autre requis, et vous devriez pouvoir récupérer / extraire de cette machine aussi longtemps que vous avez un accès ssh.
Si vous avez également configuré votre .ssh / config, il devrait en tirer parti et utiliser toutes les clés privées que vous auriez pu configurer.
Si vous prévoyez de pousser beaucoup de mises à jour, vous pouvez ajouter un dépôt à distance à votre caisse de développement:
Ensuite, à partir de là, vous pouvez:
Pour plus d'informations, consultez les documents en ligne sur
git push
ou exécutezgit push --help
pour lancer la page de manuel sur votre section locale.la source