How can I get Git to follow symlinks?
What I did to add to get the files within a symlink into Git (I didn't use a symlink but):
sudo mount --bind SOURCEDIRECTORY TARGETDIRECTORY
Do this command in the Git-managed directory. TARGETDIRECTORY
has to be created before the SOURCEDIRECTORY
is mounted into it.
It works fine on Linux, but not on OS X! That trick helped me with Subversion too. I use it to include files from an Dropbox account, where a webdesigner does his/her stuff.
If you want to make this bind permanent add the following line to /etc/fstab
:
/sourcedir /targetdir none bind
Why not create symlinks the other way around? Meaning instead of linking from the Git repository to the application directory, just link the other way around.
For example, let’s say I am setting up an application installed in ~/application
that needs a configuration file config.conf
:
- I add
config.conf
to my Git repository, for example, at~/repos/application/config.conf
. - Then I create a symlink from
~/application
by runningln -s ~/repos/application/config.conf
.
This approach might not always work, but it worked well for me so far.
Use hard links instead. This differs from a soft (symbolic) link. All programs, including git
will treat the file as a regular file. Note that the contents can be modified by changing either the source or the destination.
On macOS (before 10.13 High Sierra)
If you already have git and Xcode installed, install hardlink. It's a microscopic tool to create hard links.
To create the hard link, simply:
hln source destination
macOS High Sierra update
Does Apple File System support directory hard links?
Directory hard links are not supported by Apple File System. All directory hard links are converted to symbolic links or aliases when you convert from HFS+ to APFS volume formats on macOS.
From APFS FAQ on developer.apple.com
Follow https://github.com/selkhateeb/hardlink/issues/31 for future alternatives.
On Linux and other Unix flavors
The ln
command can make hard links:
ln source destination
On Windows (Vista, 7, 8, …)
Use mklink to create a junction on Windows:
mklink /j "source" "destination"