web.cgi
below and it must not be hgrc
, because this is the global config file of mercurialhg
lists basic commands, hg help
lists all commands and hg help <command>
shows the help for <command>
(As an alternative if the package of the distro is outdated)
removepkg mercurial…
)make
to get helpmake install
/etc/profile.d/mercurial.sh
with this content: export PYTHONPATH="/usr/local/lib/python2.5/site-package"
Step 4 installs the following content to usr/local/
:
lib/python2.5/site-packages/hgext/ lib/python2.5/site-packages/mercurial/ lib/python2.5/site-packages/mercurial-1.8.4-py2.5.egg-info bin/hg share/man/man1/hg.1 # not with 1.8 ? share/man/man5/hgrc.5 # not with 1.8 ? share/man/man5/hgignore.5 # not with 1.8 ?
Configuration of mercurial is done in $HOME/.hgrc
. See http://www.selenic.com/mercurial/hgrc.5.html
; ~/.hgrc [extensions] hgext.graphlog = hgext.extdiff = [extdiff] cmd.kdiff = kompare [paths] someShortcut = ssh://someUrl/somePath/someProject
Sources: TipsAndTricks Extdiff extension HGBook
Download and install colordiff from www.slackbuilds.org. Then add the following to $HOME/.hgrc
:
[extensions] hgext.extdiff = [extdiff] cmd.cdiff = colordiff opts.cdiff = -uprN
Usage: hg cdiff [...] [| less -R]
Add the following to $HOME/.hgrc
:
[extensions] hgext.extdiff = [extdiff] cmd.kdiff = kompare
Edit ~/.hgrc
(More):
[ui] username = New Username <new@address>
Bookmarks for often accessed remote repositories can be set in .hgrc
. Example:
alias
Just edit .hg/hgrc
in your local repo. More
Cd into the root directory of your project and type hg init
. This merely creates the subdir .hg
which is the repository. The current dir becomes the working dir of the project.
Add all files to the project by hg add
and hg commit
Log-like commands can be formatted with froatting strings, wich ar called templates. A style is simply a precanned template. Command to list all installed styles:
hg log --template list
Command to incluce phase info into the log:
hg glog --template phases hg glog -T phases
This is a no-brainer See ConvertExtension. Note that the conversion worked witout the cvsps
tool mentioned there (On Slack 12.2 with Mercurial 1.4.1)
hg convert <pathToCheckedOutCvsModule>
Remommendation: Use internal branches, i.e. hg branch and add a bookmark to each branch. Don't use hg clone or named branches for branching.
See alo http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
Pulling from another repository usually creates a 2nd head (= 2nd branch) in your repo.
This section describes how to create e.g. client-specific variants of the same main project eg. for special needs of customers.
Use wiki/RebaseExtension and fix rest of this section.
Using the example of css-skins:
Project structure:
. |-- .hgignore |-- index.html |-- skin.css -> skins_user/franz.css |-- skins_dist | |-- default.css | |-- helmut.css | `-- otto.css `-- skins_user `-- franz.css
.hgignore:
syntax: glob skin.css skins_user
skins_dist
which are part of the repouser_dist
which is hgignored (exclueded from the repo)skin.css
to the currently used skin and refer to this skin only via the symlink from the other codeskins_dist/default.css
if no symlink is available
Advantages: Every distributed skin is accessible in every repo. Everything can pushed and pulled in every direction.
Disadvantage: Symlink must be created after cloning a repo
Suitable for projects which are not under your control, i.e. where you just use the code and don't contribute back.
hg revert <file1> [<file2>]
Restores the files in the working directory to the state when they had been last commited. Much more options are posssible, see hg help revert
Hgbook Wiki
Do hg rollback
(and afterwards hg revert
)
Use hg backout REV
. The old commit is not deleted from history, but reverted as new commit
hg strip
(can also be used to remove an older head)
Or:
Use clone -r <revnumber> <old> <new>
to create a repo which contains only the changesets until <revnumber>. Than throw away the original repo and use the cloned repo.
hg histedit
e.g. for merging serveral changesets into one. See Wiki
Wrong histeds may be reverted by hg unbundle .hg/strip-backup/<backupfile>
. This works for wrong hg rebase
s as well.
Copy changes from other branches onto the current branch: See hg/help/graft
Source: MqTutorial
hg init --mq # Start / -c for version control / qinit is deprecated hg qnew -m 'message' name_of_patch # Create new patch hg qrefresh # Update the patch with the new changes hg qapplied # Show currently pushed patches hg qfinish name_of_patch # Make the patch a permanent commit # Pull changes from upstream: hg qpop -a # remove all patches from repo hg pull -u hg qpush -a # apply all patches to repo # Push changes to upstream:??? hg qpop -a # remove all patches from repo hg push hg qpush -a # apply all patches to repo
Basically there is Pull-only versus shared-push collaboration. See also wiki/WorkingPractices
Uncomment or add the following line to /etc/httpd/httpd.conf
:
LoadModule cgi_module lib/httpd/modules/mod_cgi.so
Create file /etc/mercurial/webrc
1):
[collections] /home/share/hgroot = /home/share/hgroot [web] allow_archive = gz, zip, bz2 encoding = UTF-8
Copy hgweb.cgi
from root dir of the mercurial source2) tarball to /var/www/cgi-bin/hgweb
and correct the path to the webrc
config file:
7c7 < config = "/path/to/repo/or/config" --- > config = "/etc/mercurial/webrc"
Clone some repositories into /home/share/hgroot
and point browser to http://localhost/cgi-bin/hgweb/
With the HgGit extension you can push/pull to/from a remote (or local) Git repo while doing all the work in a local Hg repo. A nice way to get around Git commands
See http://hg-git.github.io/ for more info.
HgGit needs dulwich. Both is available on www.slackbuilds.org
Local repo (L) is hg, remote repo (R) is git.
We want to push/pull to/from branch master on R
Verify:
master
which tells HgGit to push to / pull from which branch on R. Checkout if that bookmark must point to tip in order to get pushed all commits! Checkout if the bookmark must be active on L!default/master
is autmatically created and moved on L on every push to / pull from RTo push an existing Mercurial repository to Github: