2010-06-29 4 views
3

J'ai essayé de configurer le serveur git et le serveur de déploiement sur la même machine pour mon application. Je poussais le projet de la machine locale sur le serveur serveur git/déploiement en utilisant les commandes suivantes:git push, où est caché le code source?

git remote add origin path_to_git_server 
git push origin master 

Ensuite, sur le serveur git, j'ai trouvé le fichier « maître » sous ~/git/log.git/ref/heads, mais nulle part puis-je trouver tous les codes sources. Je dois pointer vers les dossiers source afin qu'il fonctionne sur le serveur web Apache. Qu'est-ce que j'ai fait de mal ici? Merci.

Répondre

6

Il est probable que vous avez créé un dépôt git init --bare - cela ne fonctionnera pas car il est seulement le dépôt git et non la phase de travail. Je vais configurer cela comme une disposition de trois machines - mais il peut être exécuté sur deux ou même une seule machine.

Machine A (votre machine de développement)

Machine B (votre dépôt distant)

machine C (environnement de production)

(Mais si vous avez la production, le développement, et "à distance" Lorsque vous êtes prêt à pousser sur la machine B (Repo), vous engagez tout votre travail, mettez-le en scène, puis exécutez un git push (après avoir fait l'ajout à distance, etc). met à jour le référentiel distant Bare avec tous les changements de votre machine depuis la dernière poussée (Pensez-y comme la synchronisation du contenu de votre.git folder sur la machine a avec le repo distant)

Puisque Git ne se soucie que des modifications du contenu de vos fichiers (et pas vraiment des fichiers ou des dossiers eux-mêmes - faites-moi confiance Git ne se soucie pas de vos fichiers - juste le contenu) il ne stocke pas les fichiers une machine B comme vous voyez sur votre machine Une "étape de travail" Git place ces fichiers dans la phase de travail pour vous utiliser et développer contre - mais Git ne se soucie pas d'eux - encore une fois il se soucie seulement sur les changements au contenu des "fichiers" depuis la dernière fois que vous avez commis. Pour déployer votre code, vous devrez aller à la machine C et cloner le dépôt sur la machine B - cela synchronisera le dossier ".git" vers cet ordinateur et ensuite construire les fichiers/dossiers suivants basés sur tout le contenu c'est suivi. Une fois que vous avez cloné ce référentiel, vous pouvez obtenir des mises à jour futures via git pull

C'est à peu près la même chose. Si vous avez tout sur ordinateur une fois que vous pourriez faire quelque chose comme:

~/projects/git_project (Your devel area) 
/home/repo/git_project.git ("Remote" repo) 
/opt/rails/git_project ("Production" machine) 

Avoir une prise en pension à distance est redondant sur une machine puisque vous pouvez techniquement tirer et pousser de

~/projects/git_project 

à

/opt/rails/git_project 

Mais juste garder l'exemple en ligne

+0

merci beaucoup! rends-le si clair pour moi maintenant. – ohana

3

Le référentiel sur le serveur est un référentiel nu. Par convention, il réside dans le répertoire nommé nom_projet.git.

Le référentiel nu n'a pas de copie de travail extraite du code source de votre projet, comme le fait votre référentiel local. Tout le code source est dans des fichiers de données compressés.

Pour publier du code source via un serveur Web, vous avez besoin d'une application Web capable de lire ces fichiers, par exemple Gitweb ou Gitosis.

Vous pouvez lire ici sur What’s the best Web interface for Git repositories? SO avant de choisir un :-)


Pour utiliser Capistrano (ou un autre outil de construction ou de déploiement) avec git, vous pouvez:

  • utilisation git clone pour créer une copie de travail normale (référentiel git normal, non nu) quelque part sur le serveur de construction

  • run capistrano de t sa copie

  • utiliser régulièrement git pull pour conserver cette copie en synchronisation avec le référentiel commun.

+2

qu'en est-il de capistrano? – ohana

+0

merci beaucoup! Maintenant j'ai compris. – ohana

0

Vous pouvez créer un dépôt nu ory dans le serveur. Un référentiel vide n'a pas de copie locale retirée de l'un des fichiers sous le contrôle de réversion.

Si vous voulez avoir une copie exportées sur un serveur, utilisez git init sans --bare pour initialiser le dépôt git et mis receive.denyCurrentBranch-ignore afin de permettre la commande push. De plus, vous devez vous assurer que personne ne change de fichier dans le dépôt git sur le serveur. Pour plus d'informations, voir http://toroid.org/ams/git-website-howto.