Robin Green
Robin Green

Reputation: 33063

Sharing files between Mercurial repositories

There are one or two files, like .hgignore, which I generally want to be the same in each of a bunch of projects.

However, the nature of these files means that I can't simply move them to a common shared project and just make the other projects depend on that project. They have to be inside each project. Symbolic links are not an option either because some of our developers use Windows.

How can I share these files between repositories and have changes propagated across (on my local machine, at least)? I'm using Eclipse.

Upvotes: 1

Views: 498

Answers (2)

Robin Green
Robin Green

Reputation: 33063

Hardlinking instead of copying the relevant files sort of works with Eclipse - although you have to refresh each of the other projects to get it to pick up the change. However, you can configure Eclipse to watch the filesystem and automatically refresh whenever it needs to - I recommend this.

It does not work by default with Emacs, because Emacs breaks hard links (which is normally the right thing to do, but is not what you want in this case). However, you can disable this behaviour for multiply-linked files with (setq backup-by-copying-when-linked t).

Upvotes: 0

Ry4an Brase
Ry4an Brase

Reputation: 78330

For your specific case of hgignore you can put an entry like this in each project's .hg/hgrc file:

[ui]
ignore.common = ~/hgignore-common

If you you know your common library will always the in the parent directory, as is often the case with a subrepo setup you could do:

[ui]
ignore.common = ../hgignore-common

or if you know it will always be in a sibling directory of project checkouts you could do:

[ui]
ignore.common = ../company-wide-defaults/hgignore-common

Unforunately there's no absolute way to reference a file that's valid everywhere, but you can at least to to a point where on your machine all your checkouts are referencing a common ignore.

Upvotes: 3

Related Questions