Telling git to ignore symlinks

心已入冬 提交于 2019-11-28 06:42:58

This seems to be a better idea

find . -type l | sed -e s'/^\.\///g' >> .gitignore

Find outputs a "./" prefix for all files. Unless you trim it off, gitignore is unable to act on them . Once you trim the ".\" at the beginning , it works like a charm

Depending on what version of git you are using it should follow symlinks. There's a config setting core.symlinks, that may be set to false and thus not letting git follow them as directories (assuming git >= 1.6). It seems completely reasonable to have your symlinking script also append those links to the .gitignore file or just add them yourself. You could also do something like find . -type l >> .gitignore

We had a similar issue where we needed to ignore a symlinked directory or a real directory, but not a subdirectory of the same name or a file starting with the same letters. For example:

  • Ignore - (symlink) ./media
  • Ignore - (directory) ./media
  • Do not ignore - ./something/media
  • Do not ignore - ./media.bak
  • Do not ignore - ./media-somethingelse

I ended up using this in the .gitignore:

media
!*/media

Which looks a little strange but is basically saying (line 1) ignore everything "media" but (line 2) do not ignore anything "media" that isn't in the root directory. This method does require a little specificity (in regards to not ignoring things in subdirectories) but should be pretty easy to adapt/extend.

ColinM

My answer from another question is relevant:

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    test -L "$f" && echo $f >> .gitignore;
    test -d "$f" && echo $f\* >> .gitignore;
done

I used the most suitable solution to me - naming agreement.

With files Each symlink to file in my solution had a prefix in a name like "bla.outsidemodule.ts". In .gitignore file, I had just:

**/*.outsidemodule.*

With folders Also on the root of the solution, I had folder "platform", which had common libs/modules for other parts of the solution. The structure was like it:

 - ./platform              <- sources
 - ./client/src/platform   <- symlink to ./platform
 - ./server/src/platform   <- symlink to ./platform
 - ./exchange/src/platform <- symlink to ./platform
 - ./service/src/platform  <- symlink to ./platform

And in .gitignore just:

**/platform <- exclude all "platform" folders
!./platform <- do not exclude folder "platform" if it's on a root 

I don't keep the executables, and symlinks in my repository... so I want to omit them as well when I do a "git status".

If, like me, you want to ignore symlinks, directories and executables (ala some of the files in $NAG_HOME/libexec you can add those files into .gitignore as follows:

   file * | egrep 'ELF|symbolic|directory' | awk -F\: '{ print $1 }' >> .gitignore

   echo ".gitignore" >> .gitignore

Then, when you do a git status, it won't spit back the list of those files if you have not added them to your repository.

My solution might seem silly, but I'd rather do this than update the .gitignore file every time a new file is added.

I merely leave the links with a default name like "link to xxx" and then add the following line to my .gitignore file:

link to *

Then you just ensure you do not name any other files/folders with a name starting with "link to " and you're sorted.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!