As of 0.9.4, when adding a symbolic link Mercurial keeps track of the link itself, and not the file or directories it points to. However, there are cases when it is desirable to keep track of the files pointed to by the symbolic link.
How can I force Mercurial to treat the symbolic link to a directory as a regular directory?
Symlink, also known as a symbolic link in Linux, creates a link to a file or a directory for easier access. To put it in another way, symlinks are links that points to another file or folder in your system, quite similar to the shortcuts in Windows.
Ln Command to Create Symbolic Links By default, the ln command creates a hard link. Use the -s option to create a soft (symbolic) link. The -f option will force the command to overwrite a file that already exists. Source is the file or directory being linked to.
Once LSE is installed, right-click the target file or folder you want to create a symlink to, then click “Pick Link Source.” Next, go to the folder where you want the symlink to appear, right-click it, then select “Drop As -> Symbolic Link.”
program directory in a file manager, it will appear to contain the files inside /mnt/partition/. program. In addition to “symbolic links”, also known as “soft links”, you can instead create a “hard link”. A symbolic or soft link points to a path in the file system.
Under linux you can use
mount --bind sourcepath targetpath
instead of symbolic links and mercurial will treat target as usual directory (tested on openSUSE 11.2 with Mercurial 1.3.1, and on RHEL6).
The alternative syntax, amenable for inclusion in /etc/fstab
, is
mount -o bind sourcepath targetpath
The fstab entry is, then
sourcepath targetpath none defaults,bind 0 0
I don't think there's a way to do this when you're working with directories.
If you're working with mercurial 1.3 or later you could try using the new subrepo support, that will let you have a repo track stuff ourside of it on the local disk, but it's not as seamless as a link would have been.
I was surprised when I found this too, but it seems to be a feature that the Mercurial team don't want to change for security reasons.
I'm planning to get around it by using rsync to update the local copy of the directory before committing, from my makefile. This isn't a great solution but my directory is quite small so it should be OK.
Just a follow up on Rage Steel's excellent answer (mount --bind):
To make your mount ready on boot (since mounts don't survive reboots), in your /etc/fstabs put:
/paht/to/source /path/to/target bind defaults,bind 0 0
Just make sure to put it after your source is mounted.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With