2009-08-08 7 views
0

J'essaie d'apprendre à utiliser subversion. Sur mon mac os x serveur je:Où est passé mon fichier validé?

~/public_html (beaucoup de fichiers)

j'ai aussi/var/svn/myproject (ce qui est le répertoire svn où je svnadmin ~/public_html/var/svn/myproject)

Sur mon MacBook Pro, je svn checkout svn checkout svn: // myserver/mysvnpath

Il vérifie les fichiers.

modifier un fichier et mettre quelque chose de simple dans

je commets et ne donne aucune erreur et dit que je suis à la révision 2.

Ma question:.

Lorsque je me suis engagé le fichier mis à jour , où est-il allé sur le serveur? Je ne le vois jamais changé dans ~/public_html.

Où est mon fichier mis à jour sur le serveur? J'ai regardé dans les fichiers de révision et je peux voir 2 dans revs a mon changement (qui est juste l'addition d'une ligne, phpinfo();).

Nous vous remercions de votre aide.

EDIT: basé sur des commentaires que je peux voir, je ne comprends vraiment pas.

EDIT: J'ai essayé svn update dans ~/public_html mais mon fichier index.php n'est jamais changé. Fait intéressant, j'ai une autre machine que j'ai vérifié le code et il montre la nouvelle révision (2). Je ne peux tout simplement pas le retrouver dans ~/public_html. Si je dois le copier manuellement dans ~/public_html alors comment puis-je être sûr que la version la plus récente est utilisée. À quoi sert le dépôt à ce stade? Je sais qu'il suit les changements mais je veux qu'il sorte la dernière version si je mets à jour mon répertoire web sur le serveur.

+0

Un système de contrôle de version n'est pas un système de distribution de logiciel. –

Répondre

2

Je pense que cette FAQ SVN vous aidera: "I'm managing a website in my repository. How can I make the live site automatically update after every commit?":

Cela se fait tout le temps, et est facilement accompli en ajoutant un script hook post-commit à votre dépôt . En savoir plus sur les scripts de hook dans Chapitre 5 du livre. L'idée de base est de faire du "site en direct" une simple copie de travail , et ensuite votre script de hook post-commit exécute 'svn update' dessus. En pratique, il y a quelques choses à surveiller. Le programme serveur exécutant le commit (svnserve ou apache) est le même programme qui exécutera le script de hook post-commit . Cela signifie que ce programme doit disposer des autorisations appropriées pour mettre à jour la copie de travail . En d'autres termes, la copie de travail doit appartenir au même utilisateur que svnserve ou apache s'exécute comme - ou au moins la copie de travail doit avoir autorisations appropriées définies.

Si le serveur a besoin de mettre à jour un copie de travail qu'il ne possède pas (pour exemple, l'utilisateur joe ~/public_html/zone ), une technique est de créer le programme binaire d'un + pour lancer la mise à jour, étant donné qu'Unix n'autorise pas l'exécution des scripts + s. Compiler un programme minuscule C:

#include <stddef.h> 
#include <stdlib.h> 
#include <unistd.h> 
int main(void) 
{ 
    execl("/usr/local/bin/svn", "svn", "update", "/home/joe/public_html/", 
     (const char *) NULL); 
    return(EXIT_FAILURE); 
} 

... puis chmod + s le binaire, et assurez-vous qu'il appartient à l'utilisateur 'Joe'. Ensuite, dans le hook post-commit, ajoutez une ligne pour lancer le binaire.

Si vous rencontrez des problèmes pour faire fonctionner le crochet , voir "Pourquoi mon référentiel ne fonctionne-t-il pas?".

De même, vous voudrez probablement empêcher apache d'exporter les répertoires .svn/dans la copie de travail en direct. Ajouter ceci à votre httpd.conf:

# Disallow browsing of Subversion working copy administrative dirs. 
<DirectoryMatch "^/.*/\.svn/"> 
Order deny,allow 
Deny from all 


Une alternative: Vous pouvez utiliser l'importation en place. Regardez here comment le faire.

+0

Il y a un 'de fermeture de' ', mais wmd ne l'aime pas tellement et il disparaît. : - | –

0

Vous devez également exécuter svn update sur ~/public_html.

Je crois que ~/public_html est à la révision 1, et votre macbook est à la révision 2.

+0

cela n'a pas eu les nouveaux fichiers. Pardon. mais merci. – johnny

1

confusion même que je l'ai vu un peu.

Votre SVN (s'il s'agit d'un serveur SVN) (/var/svn/myproject) et votre serveur Web (~/public_html) sont complètement séparés et n'ont aucune relation entre eux. Vous aurez besoin de sauvegarder/télécharger le fichier dans le dossier ~/public_html et aussi de valider le SVN (serveur). L'un est le serveur Web et l'autre est le SVN (serveur).

Le processus général que j'utilise lorsque vous travaillez est:

  1. Commander le dépôt dans un dossier local (pas le répertoire du serveur Web parce que vous ne voulez pas que les gens soient en mesure d'accéder à des dossiers .svn).
  2. Modifiez les fichiers nécessaires.
  3. Téléchargez, enregistrez ou copiez le fichier de votre répertoire de travail sur le serveur Web. Testez pour vous assurer que cela fonctionne. (Certains éditeurs, tels que Dreamweaver ou PhpEd peuvent enregistrer à la fois votre répertoire de travail et votre répertoire de serveur Web (FTP ou autre) dans un raccourci clavier.)
  4. Une fois que vous avez accepté les modifications, utilisez votre processus de validation SVN pour mettre les changements dans le SVN.

Répétez chaque fois que vous effectuez un ensemble de modifications, sauf pour la vérification, vous voudrez faire une mise à jour au cas où vous apporteriez des modifications ailleurs ou à quelqu'un d'autre. (Je fais ce processus chaque fois que je travaille sur un ensemble spécifique de changements ou un bug pour un site afin que je puisse suivre l'historique de ce que j'ai fait pour chaque changement.)

SVN (serveur) est seulement pour suivre les changements . Il fonctionne souvent comme un module d'un serveur Web, mais n'a rien à voir avec votre webserer réel.

Si vous êtes confus par la façon dont cela fonctionne, je vous recommande d'acheter un service SVN afin que vous soyez moins confus et qu'ils s'occuperont de la configuration du SVN et de ses problèmes connexes.

Modifier Si vous voulez qu'il ne vous envoie jamais automatiquement une version sur le serveur web (non recommandé), vous devrez créer un script à mettre à jour toutes les 15 minutes environ. C'est vraiment mauvais parce que vos dossiers .svn finiront sur le répertoire du serveur Web. Vous devez le faire manuellement chaque fois que vous apportez une modification ou exportez svn dans ce répertoire.

+0

Alors SVN ne reçoit pas vraiment le fichier? Il ne suit que les changements. Est-ce exact? Et je dois copier le nouveau fichier de mon mac sur le serveur? Tu as raison. J'ai un énorme malentendu. – johnny

+0

Pouvez-vous commenter tous ceux qui disent utiliser svn update sur ~/public_html? Est-ce faux? Ça ne marche pas pour moi mais c'est pareil. Devrait-il? – johnny

+0

Si vous allez faire cela (comme je l'ai dit, mauvaise idée), vous devrez d'abord vider le dossier public_html, puis la caisse. –

0

Les fichiers Rev 2 seront mis à jour dans/var/svn/myproject. Pour que les modifications soient également reflétées dans ~/public_html, vous devrez effectuer une mise à jour SVN sur ce répertoire, car il ne le fait pas automatiquement, et sera toujours à la révision 1, au moins jusqu'à ce que vous le mettiez à jour. Vous pouvez automatiser ce processus avec un cronjob, et je crois qu'il existe un moyen de détecter quand il y a une nouvelle validation SVN, mais je ne sais pas si/ce que c'est.

0

Il y a 2 processus ici que vous essayez de résoudre:

  1. Comment gérer différentes personnes travaillant sur le même code source. Vous avez configuré un serveur subversion pour cela; les développeurs vérifient le code sur leur machine locale et y apportent leurs modifications.

  2. Déployer vos modifications sur le site en ligne. Il existe plusieurs façons d'y parvenir, en fonction de facteurs tels que le niveau d'assurance qualité dont vous avez besoin dans le système, la vitesse à laquelle les changements doivent être déployés, ... Dans tous les cas, il est recommandé de mettre en place une procédure appropriée pour le déploiement. Cela peut être fait en faisant une copie de travail du répertoire public_html de votre serveur web et en y exécutant 'svn update' (manuellement, programmé ou déclenché depuis le hook post-commit). Cependant j'investirais un peu plus de temps dans un vrai script de déploiement (en utilisant msbuild, nant, simplement un fichier .bat, celui qui fonctionne pour vous) qui exporte les sources (en utilisant 'svn export') et les met au bon endroit.

Questions connexes