Mercurial

Bonsoir,

Voilà, j’ai un petit problème avec mercurial.

je voudrais faire un dépot sur mon réseau local et y accéder depuis ssh.

j’ai donc installé mercurial et mercurial-server sur le serveur

ensuite lancé les commndes suivantes dans le répertoire que je veux transformer en dépot :

hg init hg commit

sur le client :

hg clone ssh://login@192.168.1.1:666//media/archives/hg Password: destination directory: hg aucun changement trouvé updating to branch default 0 files updated, 0 files merged, 0 files removed, 0 files unresolved
donc je pense que tout est bon du coté serveur…

ensuite, je rentre dans le dossier hg qui vient d’apparaitre
je crée un fichier test.c
et j’essaye d’envoyer

[code] hg add test.c
test.c already tracked!

$hg push
pushing to ssh://login@192.168.1.1:666//media/archives/hg
Password:
aucun changement trouvé
[/code]

aucun changement trouvé ???
pourtant :

~/hg$ hg status A test.c

et quand je vérifie sur le serveur, le fichier test.c n’est pas là :frowning:

Quelqu’un peut m’expliquer svp ? :blush:

Bonsoir,

Tu oublies simplement une étape :slightly_smiling:

Ajout/suppression/édition des fichiers :

Commit des modifications de la copie de travail dans le dépôt local :

Envoi des modifications sur le dépôt utilisé comme référence (automatiquement paramétré lors d’un hg clone) :

A+

merci :slightly_smiling:

Par contre, je suis obligé de faire la même manip dans crontab sur le serveur ?
Je pensais que c’était automatique

Pas du tout, tu n’as rien à faire côté serveur. Une fois le push effectué sur ta station (et le pull si tu veux récupérer les modifications apportées par d’autres utilisateurs), le dépôt serveur sera le même que celui que tu as en local.

c’est bizarre, parce que si j’ajoute pas un script dans crontab qui fait un

cd /media/archives/hg echo "`date`" hg add * hg ci -m "`date` - mise à jour automatique - serveur" hg push hg update

mon répertoire sur le serveur reste toujours vide

Ton répertoire sur le serveur n’est pas vide, il contient un répertoire caché .hg.
Ce dossier .hg est le dépôt qui contient l’ensemble des fichiers ainsi que leurs modifications (changesets). Il existe sur le serveur, et dans ton répertoire sur ta machine.
Les autres fichiers que tu vois toi au côté du .hg forment ce que l’on appelle la copie de travail. En somme, c’est l’établi sur lequel tu bricoles avant d’archiver tes modifications (commit) dans le dépôt (.hg). Lors d’un push, tu ne fais qu’envoyer tes modifications (changesets) de ton répertoire .hg vers le .hg du répertoire sur le serveur.

Si tu ne travailles pas directement sur ton serveur, tu n’as aucunement besoin que les fichiers de travaux (test.c par exemple) y soient présent. Ils sont versionnés dans le .hg et cela suffit amplement :slightly_smiling:

$ hg init depot1 $ hg clone depot1 depot2 updating to branch default 0 files updated, 0 files merged, 0 files removed, 0 files unresolved $ ls depot1 depot2 $ ls -A depot1 .hg $ ls -A depot2 .hg $ cd depot2 $ touch test.c $ hg add test.c $ hg ci -m "Ajout test.c"

À ce niveau, on a cloné le dépôt n°1 en dépôt n°2, puis on a ajouté un fichier dans le dépôt n°2. Pour envoyer cette modification au dépôt n°1, on push :

$ hg push pushing to /home/seb/Bureau/mercurial_test/depot1 searching for changes adding changesets adding manifests adding file changes added 1 changesets with 1 changes to 1 files

Vérifions la présence de notre fichier dans le dépôt n°1 :

$ cd ../depot1 $ hg log changeset: 0:dcd0d087cc55 tag: tip user: keldath date: Sat Oct 29 00:39:04 2011 +0200 summary: Ajout test.c

C’est bon ! On peut recloner ce dépôt n°1 pour s’en assurer :

$ cd .. $ hg clone depot1 depot3 updating to branch default 1 files updated, 0 files merged, 0 files removed, 0 files unresolved $ ls -A depot3 .hg test.c

Comme expliqué précédemment par Keldath, les changements ont bien été enregistrés dans l’historique du dépôt. Mais le répertoire de “copie de travail” (working directory) pointe elle toujours sur la première révision. Il est alors possible de configurer le dépôt du serveur pour qu’il mette à jour sa copie de travail à chaque modification, de telle sorte qu’elle pointe toujours sur la dernière révision: tip. Ca se passe dans son fichier .hg/hgrc, à créer au besoin:

[hooks]
changegroup = hg update

[size=85]Sous réserve que je n’aie pas fait d’erreur…[/size]

Voir la documentation sur le wiki de Mercurial concernant les hooks (“hameçons”), et la documentation du fichier de configuration d’un dépôt.

C’est ce que j’utilise personnellement pour faire générer un site statique en fonction de fichiers sources gérés dans un dépôt Hg; j’ai donc besoin d’avoir, sur le serveur, la dernière version de ceux-ci.

MERCI ! :007

Ca marche super :stuck_out_tongue:

C’est dingue ce truc en fait, c’est pas super compliqué à mettre en place coté serveur…

En 3 lignes ça marche :open_mouth:

Heu, y a une manip spécial pour les dossiers ?

Je viens d’ajouter mon dossier de sources

[code]hg add exec-c/
ou
hg addr

hg commit -m “dossier de sources”

hg push
pushing to ssh://login@192.168.1.1:666//media/archives/hg
Password:
searching for changes
aucun changement trouvé

$ hg clone ssh://login@192.168.1.1:666//media/archives/hg …/dev2
Password:
requesting all changes
adding changesets
adding manifests
adding file changes
added 4 changesets with 4 changes to 3 files
updating to branch default
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

$ ls …/dev2/
up.sh
$

[/code]

Mercurial ne traite que des fichiers, pas des répertoires. Il crée automatiquement les répertoires grâce aux chemins des fichiers, donc tant qu’un répertoire est vide, il ne sera pas référencé !

Dans la pratique il est très rare qu’un répertoire soit vide, et si un tel répertoire doit exister, à charge de ton application ou autre (système de construction, d’empaquetage…) de le créer si besoin à la volée.

@fero14041 : sympa cette astuce :slightly_smiling: Je regarderai ça plus en détail pour obtenir le même comportement mais seulement sur les tags, pas à tous les commits.

arf, il est loin d’être vide ce répertoire, puisqu’il contient toutes mes sources…

Je pensais que c’était a cause du tiret, mais apparement non, j’ai enlevé, il ne veut pas… alors que d’autres sont passés…

Après avoir fait ton hg add, que donne :

?

J’ai trouvé :slightly_smiling:

il y avait un dossier .hg dans le dossier c

Donc, il le prenait pour un autre dépot et l’ignorait :slightly_smiling: