Ignore symbolic links in .gitignore
Asked Answered
A

2

12

Is it possible to tell Git to ignore symlinks ? I'm working with a mixed Linux / Windows environment and, as you know, symlinks are handled very differently between the two.

Askja answered 18/8, 2010 at 10:56 Comment(9)
What exactly do you mean by ignore? You can just add the symlinks to your .gitignore if that is what you want.Roger
Yes but if just add the filenames it would also ignore the files that are symlinked...although I guess I could specify the full paths. I was hoping for something I could stick in a config file...Askja
Your best bet might be to generate the list with a find * -type l, I guess.Harelda
Hey, good idea :). I was hoping there was something built-in though.Askja
I don't understand. Either the files that are symlinked are already in your git working tree, in which case they will be tracked where they are, or they are not, in which case you are not tracking them anyway. If you want to work with filesystems that don't support symlinks then surely you should not use symlinks rather than just ignoring them?Roger
Maybe this will make things clearer: I'm doing a lot of git add . in order to track new files, counting on my .gitignore to exclude files I don't want to be tracked. Of course I can just add each symlink manually to the .gitignore, which is what I'm doing right now, just thought there might be some built-in way to prevent symlinks from being tracked.Askja
What are your symlinks linking to/why are you looking to ignore them?Musa
I'm taking a stab here - you might want to set your core.symlinks setting to "false" on windows, and stop ignoring the links. They'll get added to your repository, and then checked out on windows as innocuous text files. This seems to be the best automated solution available to your problem (other than shell scripts you run before committing to update your ignore list)Musa
This question might provide the desired answer: https://mcmap.net/q/46993/-git-symbolic-links-in-windowsAnjanette
S
2

Use git version >= 1.6

Git used to treat sym-links the same as regular files, but newer git versions (>= 1.6) check if a file is beyond a symbolic link and will throw a fatal error.

e.g.:

# git init 
# mkdir newdir 
# touch newdir/foo 
# git add newdir/foo 
# git commit -m 'add foo' 
# mv newdir /tmp/ 
# ln -s /tmp/newdir 
# touch newdir/bar 
# git add newdir/bar 
fatal: 'newdir/bar' is beyond a symbolic link

# git add/tmp/newdir
fatal: '/tmp/newdir' is outside repository

# git --version
git version 1.7.3.4
Snodgrass answered 19/4, 2011 at 12:22 Comment(1)
git 1.7.9.5 adds symlinks just fine, even when they point to something outside the repository...Annorah
B
2

No, it is not possible to do this globally. However, if you have lots of symlinks here is a bash script that you can use to easily add them to your repo's .gitignore file:

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    test -L "$f" && echo $f >> .gitignore; # add symlinks
    test -d "$f" && echo $f\* >> .gitignore; # add new directories as well
done
Bobbette answered 28/10, 2014 at 18:28 Comment(1)
Awesome solution! Works very fine :) Thank you very much!Diverticulum

© 2022 - 2024 — McMap. All rights reserved.