Hits : 6155

Mercurial :: Mini How To 


Working Progress ... still :)
Προσπαθώ να καταγράψω το Mercurial 1.4[link1]

Contents


Mercurial


file:logomercurial.png

a fast, lightweight Source Control Management system designed for efficient handling of very large distributed projects.

Το λογισμικό mercurial είναι ένα πρόγραμμα για απομακρυσμένη διαχείριση κώδικα ανεξάρτητα με το λειτουργικό.

http://www.selenic.com/mercurial

Το βιβλίο του mercurial: http://hgbook.red-bean.com

Ενώ ένα πολύ ενδιαφέρον site for tips: hgtip[link2]

Data Sheets:
http://www.ivy.fr/mercurial/ref/v1.0
http://edong.net/2008v1/docs/dongwoo-Hg-300dpi.png


Παρουσίαση: google[link3]

Ένα υπέρ-αναλυτικό άρθρο για Version Control: http://www.infoq.com/articles/dvcs-guide

top

Installation


Requirement: Python 2.3.0 or later, Gnu Make[link4]

(Σε μία διανομή ubuntu χρειάζεται απλά το : apt-get install python2.5-dev)

$ wget -c http://mercurial.selenic.com/release/mercurial-1.4.tar.gz
$ tar zxvf mercurial-1.4.tar.gz
$ cd mercurial-1.4
$ make all
$ make install


Εναλλακτικά μπορούμε να κατεβάσουμε την τελευταία σταθερή έκδοση μέσω του mercurial
(εάν δλδ έχουμε παλαιότερη έκδοση) με τον εξής τρόπο:

$ hg clone http://selenic.com/repo/hg-stable mercurial.hg
$ cd mercurial.hg
$ make all
$ make install


Εάν θέλουμε να χρησιμοποιήσουμε την development έκδοση του mercurial τότε πρέπει να
κατεβάσουμε το εξής αντίγραφο:

$ hg clone http://selenic.com/repo/hg mercurial.hg


top

Extras


# cp contrib/bash_completion /etc/bash_completion.d/hg
# cp contrib/vim/HGAnnotate.vim /usr/share/vim/vim72/syntax/


top

Simple Usage


Το ακόλουθο κομμάτι κώδικα αποτελεί ένα πολύ απλό παράδειγμα χρήσης του mercurial.
  1. Παράγουμε έναν κλώνο. Δλδ κατεβάζουμε ένα πλήρη αντίγραφο ενός project.
  2. Ενημερωνόμαστε για τυχόν αλλαγές στον κώδικα.
  3. Εάν υπάρχουν αλλαγές πραγματοποιούμε αναβάθμιση στο αντίγραφο που διατηρούμε.

$ hg clone http://hg.dovecot.org/dovecot/
$ cd dovecot


Όποτε θέλουμε να ελέγξουμε για τυχόν αλλαγές στον κώδικο τότε απλά γράφουμε:

$ hg pull
pulling from http://hg.dovecot.org/dovecot/
searching for changes
no changes found
$ hg update
0 files updated, 0 files merged, 0 files removed, 0 files unresolved

log 


$ hg log | head -11
changeset:   7493:45b79d3e393e
tag:         tip
user:        Matt Mackall <mpm@selenic.com>
date:        Sat Dec 20 16:12:01 2008 -0600
summary:     Added signature for changeset 3773e510d433

changeset:   7492:e9d21bbfd4cc
user:        Matt Mackall <mpm@selenic.com>
date:        Sat Dec 20 16:12:00 2008 -0600
summary:     Added tag 1.1.1 for changeset 3773e510d433

parents


$ hg parents
changeset:   7493:45b79d3e393e
tag:         tip
user:        Matt Mackall <mpm@selenic.com>
date:        Sat Dec 20 16:12:01 2008 -0600
summary:     Added signature for changeset 3773e510d433

Αναβάθμιση


$ hg pull
$ hg update

Status


$ hg status

Δημιουργία αρχειοθήκης


Από τον κατάλογο που έχουμε μπορούμε να δημιουργήσουμε archive files.
Οι τύποι μου υποστήριζονται είναι οι εξής:


Ένα παράδειγμα:

$ hg archive -t tbz2 mercurial.tbz2

$ file mercurial.tbz2 
mercurial.tbz2: bzip2 compressed data, block size = 900k


branch


$ hg branche
default                     7493:45b79d3e393e

$ hg branches
default                     7493:45b79d3e393e

heads


$ hg heads
changeset:   7493:45b79d3e393e
tag:         tip
user:        Matt Mackall <mpm@selenic.com>
date:        Sat Dec 20 16:12:01 2008 -0600
summary:     Added signature for changeset 3773e510d433

identify


$ hg identify
45b79d3e393e tip

paths


$ hg paths
default = http://selenic.com/repo/hg-stable

resolve


$ hg resolve --all

root


$ hg root 
/home/ebal/mercurial.hg

show config


$ hg showconfig
bundle.mainreporoot=/home/ebal/dnl/sw/mercurial.hg
paths.default=http://selenic.com/repo/hg-stable

tags


Τα tags είναι ένας ευκολότερος και καλύτερος τρόπος για να διαχειριζόμαστε τις εκδόσεις αντί των revision numbers.
Μπορούμε να δούμε τα tags με την εξής εντολή:

$ hg tags | head 
tip                             7493:45b79d3e393e
1.1.1                           7491:3773e510d433
1.1                             7461:2a67430f92f1
1.0.2                           6514:d2375bbee6d4
1.0.1                           6457:d5cbbe2c49ce
1.0                             6386:bae2e9c838e9
0.9.5                           5472:23889160905a
0.9.4                           4723:fb4b6d5fe100
0.9.3                           3896:27230c29bfec
0.9.2                           3865:36a957364b1b


Σε δικό μας παράδειγμα μπορούμε να ορίσουμε ένα tag ως εξής:

$ hg tag -r 2 test

tip 


Το Tip είναι πάντα το τελευταίο changeset (είναι κάτι σαν tag για την τελευταία έκδοση)

$ hg tip
changeset:   7493:45b79d3e393e
tag:         tip
user:        Matt Mackall <mpm@selenic.com>
date:        Sat Dec 20 16:12:01 2008 -0600
summary:     Added signature for changeset 3773e510d433

verify


$ hg verify
checking changesets
checking manifests
crosschecking files in changesets and manifests
checking files
1117 files, 7494 changesets, 14713 total revisions

version


$ hg version
Mercurial Distributed SCM (version unknown)

Copyright (C) 2005-2008 Matt Mackall <mpm@selenic.com> and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


top

Changes


See History or Change:
hg log


See Heads of Log
$ hg heads


Version:
hg version


Status:

hg status


Root:
hg root


top

Summary


Εμφανίζει μία συνοπτική κατάσταση του καταλόγου εργασίας mercurial.

Ορίστε ένα παράδειγμα (από το dovecot 1.2):

$ hg summary 
parent: 9484:fa8a438c64ce tip
 lib-index: MAIL_TRANSACTION_TYPE_MASK didn't contain the new _EXT_HDR_UPDATE32.
branch: HEAD
commit: (clean)
update: (current)


top

Web 


Μία από τις καλύτερες δυνατότητες του mercurial είναι ότι μπορεί να μας "σερβίρει" το περιεχόμενο
ενός version source directory μέσω http. Είναι εξαιρετικά εύκολο:

$ hg serve

127.0.0.1 - - [23/Dec/2008 21:55:52] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [23/Dec/2008 21:55:52] "GET /static/style-paper.css HTTP/1.1" 200 -
127.0.0.1 - - [23/Dec/2008 21:55:52] "GET /static/hglogo.png HTTP/1.1" 200 -
127.0.0.1 - - [23/Dec/2008 21:55:52] "GET /static/hgicon.png HTTP/1.1" 200 -
127.0.0.1 - - [23/Dec/2008 21:55:55] "GET /static/hgicon.png HTTP/1.1" 200 -


Ο python http server ακούει by default στην http port=8000.

Οπότε μπορούμε απλά με την χρήση ενός web client/browser (π.χ. firefox)
να ανοίξουμε την εξής διεύθυνση:

http://localhost:8000


top

Mercurial Help


Παρακάτω είναι οι τρόποι να για δούμε την βοήθεια και την επεξήγηση των εντολών του mercurial project

$ hg

$ hg -v

$ hg --help

$ man hg


και εάν θέλουμε βοήθεια για μία συγκεκριμένη εντολή:

$ hg help init

$ hg -v help init


και εάν θέλουμε ακόμα περισσότερη βοήθεια :

$ hg --debug help


top

List of commands


Η παρακάτω λίστα εντολών αποτελεί απλά ένα hg help
από την stable έκδοση του mercurial 0.9.5.

hg command
$ hg help
Mercurial Distributed SCM

list of commands:

annotateshow changeset information per file line
archivecreate unversioned archive of a repository revision
backoutreverse effect of earlier changeset
bisectsubdivision search of changesets
branchset or show the current branch name
brancheslist repository named branches
bundlecreate a changegroup file
catoutput the current or given revision of files
clonemake a copy of an existing repository
commitcommit the specified files or all outstanding changes
copymark files as copied for the next commit
diffdiff repository (or selected files)
exportdump the header and diffs for one or more changesets
grepsearch for a pattern in specified files and revisions
headsshow current repository heads or show branch heads
helpshow help for a given topic or a help overview
identifyidentify the working copy or specified revision
importimport an ordered set of patches
incomingshow new changesets found in source
initcreate a new repository in the given directory
locatelocate files matching specific patterns
logshow revision history of entire repository or files
manifestoutput the current or given revision of the project manifest
mergemerge working directory with another revision
outgoingshow changesets not found in destination
parentsshow the parents of the working dir or revision
pathsshow definition of symbolic path names
pullpull changes from the specified source
pushpush changes to the specified destination
recoverroll back an interrupted transaction
removeremove the specified files on the next commit
renamerename files; equivalent of copy + remove
resolveretry file merges from a merge or update
revertrestore individual files or dirs to an earlier state
rollbackroll back the last transaction
rootprint the root (top) of the current working dir 
serveexport the repository via HTTP
showconfigshow combined config settings from all hgrc files
statusshow changed files in the working directory
tagadd one or more tags for the current or given revision
tagslist repository tags
tipshow the tip revision
unbundleapply one or more changegroup files
updateupdate working directory
verifyverify the integrity of the repository
versionoutput version and copyright information

additional help topics:

datesDate Formats
patternsFile Name Patterns
environmentEnvironment Variables
revisionsSpecifying Single Revisions
multirevsSpecifying Multiple Revisions
diffsDiff Formats

top

Mercurial in Action

Βασικές Λειτουργίες


Ο παρακάτω κώδικας αποτελεί ένα τυπικό παράδειγμα χρήσης του mercurial.
Γίνεται επεξήγηση μέσω παραδείγματος των παρακάτω βασικών λειτουργιών:


Το παρακάτω παράδειγμα λειτουργίας παρουσιάζεται γραφικά στο κάτω μέρος της σελίδας αυτής.
Για λόγους ευχρηστίας έχω αριθμήσει τα βήματα.

top

Παράδειγμα Κώδικα


file:hg01.jpg

Formatter "highlight/html" not found

top

Γραφική απεικόνηση βασικής λειτουργίας


file:hg02.png

top


hgrc


vim ~/.hgrc


[ui]
username = Evaggelos Balaskas <ebalaskas@ebalaskas.gr>
verbose = True

[extensions]
hgext.graphlog = 

[extensions]
hgext.extdiff =

[extdiff]
cmd.meld = meld
opts.meld =


Links
[link1] http://mercurial.selenic.com/wiki/WhatsNew#A1.4_-_2009-11-16

[link2] http://hgtip.com/

[link3] http://video.google.com/videoplay?docid=-7724296011317502612

[link4] http://www.gnu.org/software/make/

[link5] http://en.wikipedia.org/wiki/Bzip2

[link6] http://en.wikipedia.org/wiki/ZIP_(file_format)