Mercurial
hg
config file
- Windows: C:\Users\<User>\mercurial.ini
- Linux: ~/.hgrc
Username/Mail
If you are using the commandline, make sure to add to your config file:
[ui] username = John Doe <john@example.com>
simple use
- create a repository
hg init
- create a file
echo "Hello World" > myTestFile
- prepare it to be used by the next commit
hg add myTestFile
- add it to the repository (under Windows: use " instead of ' for the comment)
hg commit -m 'adding a test file for test purposes and because testing is so tasty'
- what happened in the long long history of this repository?
hg log
- if you added the aliases I mention somewhere on this page, try
hg ll
- create another file
echo "Bye bye World" > myTestFile2
- change the first file
echo "Hello World 2" >> myTestFile
- check the status of the files
hg status
- commit all file with changes which are already managed by the repository
hg commit -m 'commiting changes ... again? Work, Work'
- check the status of the files
hg status
You will see that "hg commit" will commit all your changes to the repository. It will ignore new files until you manually add them with "hg add". You CAN use "hg commit" and give the files you want to commit as parameters. But normally you don't want to do that.
aliases
mercurial command line log as one line per commit
Windows: add:
[alias] logline = log --template "{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n" ll = logline
Linux: add: (the only difference to Windows is " vs '
[alias] logline = log --template '{node|short} | {date|isodatesec} | {author|user}: {desc|strip|firstline}\n'
Weird formatting of status output
If you get something which looks like bad readable links if yo do
hg status
then you probably don't want that. I do not understand the reason for it and I am not sure my "solution" is the correct way to do it. But it works:
[alias] status = status --template status
ssh
Normally you will want to use the default OS ssh. So add the following to the config file:
[ui] ssh = ssh -C
The "-C" seems to enable compression. Not sure yet, but I keep it for now.
IF you can normally ssh to the other machine with
ssh v-rooster
then now you should be able to do a
hg -v push ssh://v-rooster/work/repo1/
or pull or clone or whatever you want to do.
You can give a name and/or port like this:
hg -v push ssh://user@v-rooster:port/work/repo1/
but it would make more sense to configure your port to connect correctly. Example under Windows 10, modify your C:\Users\<user>\.ssh\config
Host v-rooster HostName 1.2.3.4 User meaMario Port 22 IdentityFile C:\Users\<user>\.ssh\id_rsa-no-pw
paths
If you don't want to write the server and path all the time, add the following to the config file:
[paths] default = ssh://v-deb-dev2/work/src/ v-deb-dev1 = ssh://v-deb-dev1/work/src/ v-deb-dev2 = ssh://v-deb-dev2/work/src/ v-deb-dev3 = ssh://v-deb-dev3/work/src/
You guessed it, 'default' is the entry which is used, when you don't give a remote target. It is NOT necessary to have it as normal path AND default, but I like it that way.
If you want to see these with hg:
hg paths
If you clone a repository, your default is of course the source of the clone.
copy/move
use
hg cp source target hg mv source target hg mv oldFile NewFile hg mv project directory
empty work directory
Normally you have all the history in the .hg directory and than a checked out version directly in the repositories root directory.
If you want it to be empty, for example because it is just like a server, no need need for a working directory with checkout:
hg update null
Only the .hg directory will remain.
TortoiseHG
Why does hg not work?
After you installed TortoiseHG, add the path to the install directory of TortoiseHG to the PATH variable. (Start/Settings/System/About/System Info/Advanced system settings/Environment Variables...)
ignore
In the root of the repository you can put a file ".hgignore". Here you can use normal ("glob") patterns or regular expressions, somehow. For glob:
syntax: glob *.aux *.log *.out *.synctex.gz
From now on you will not see untracked files with these extensions if you use
hg status
But if you use
hg status -A
Then you'll see the files with an "I" for ignored.
Manage hgrc with Mercurial
Everything in .hg does NOT have a history in Mercurial. Depending on your circumstances, you want the history of hgrc or even be able to copy/paste another hgrc to your current installation without a hassle. You can do it:
- in the main directory of your Mercurial repository create a directory called ".hg-configs-managed".
- move your current .hg/hgrc to .hg-configs-managed/hgrc-MY-CORPORATION-PC01
- create a link .hg/hgrc which points to .hg-configs-managed/hgrc-MY-CORPORATION-PC01
- put .hg-configs-managed/hgrc-MY-CORPORATION-PC01 into Mercurial ("hg add...")
- repeat this for every installation, so you'll get a lot of files in .hg-configs-managed but only one hgrc in .hg
Create the link with Linux
cd .hg ln -s ../.hg-configs-managed/hgrc-MY-CORPORATION-PC01 hgrc
Create the link with Windows 10
cd .hg mklink /H hgrc ..\.hg-configs-managed\hgrc-MY-CORPORATION-PC01
Questions
Get a managed file back which I deleted
I deleted a file and just want Mercurial to get it again:
hg revert <file>
Diff abort with "not under root"
- pull/push
cd myLocalRepository hg pull remoteRepository
- diff
cd myLocalRepository hg diff remoteRepository ERROR
Diff is mostly used for differences between revisions. And it is used for differences between files. If you just point it to a repository, chances are, the command will fail. There were cases where the command did not give me an error. But do NOT use diff as test for your connection to a remote repository.
If you need a test command, use something like
hg outgoing otherRepository