告诉git忽略符号链接

这个问题在这里和这里以类似的forms出现,但是它们似乎与我所寻找的不匹配。

我在一个Ruby静态站点生成器StaticMatic中做项目。 基本上,这只是一个带有Haml模板,Sass和CoffeeScript的src /目录。 StaticMatic提供了一个开发服务器来将这些编译成一个静态的站点,以及一个在build /中生成静态站点的构build命令。

我对StaticMatic的修改是允许添加src / _modules / foo /,它可能包含src / _modules / foo / bar.haml。 运行服务器或构build站点时,会在src / bar.haml中创build一个符号链接,该链接指向foo /中的文件。

到现在为止还挺好。 (冲突处理等)

_modules /中独立目录背后的原因是它们可以作为git子模块进行跟踪,并由其他团队独立检出。 实质上,这允许多个团队在不同的页面(实际上是JS应用程序)在一个静态站点上工作,而不需要重复主布局等。

顺便说一下,git想把这些符号链接看作是文件。 例如, git status显示:

 # On branch master # Untracked files: # (use "git add <file>..." to include in what will be commited) # # src/_modules/bar/foo.haml # src/foo.haml 

…当我真的只想让它显示src/_modules/bar/foo.haml并忽略src/foo.haml

一种方法是让我的链接生成的代码追加到.gitignore的链接,但与编程的.gitignore混乱罢工我容易出错。 (也许这个担心是不合理的?)

我的理想解决scheme是这样的:

 [filetype = link] 

在.gitignore。 据我所知,这是不可能的,或者是这样吗?

根据你使用的是什么版本的git,它应该遵循符号链接。 有一个configuration设置core.symlinks,可能被设置为false,因此不让git作为目录(假设git> = 1.6)。 你的符号链接脚本也会将这些链接附加到.gitignore文件,或者直接添加它们,这似乎是完全合理的。 你也可以做一些像find . -type l >> .gitignore东西find . -type l >> .gitignore find . -type l >> .gitignore

这似乎是一个更好的主意

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

为所有文件查找输出“./”前缀。 除非你把它关掉,否则gitignore是无法对他们采取行动的。 一旦你开始修剪“。”,它就像一个魅力

我们有一个类似的问题,我们需要忽略一个符号链接的目录一个真实的目录,而不是一个同名的子目录一个以相同字母开头的文件。 例如:

  • 忽略 – (符号链接)./media
  • 忽略 – (目录)./media
  • 不要忽视 – ./something/media
  • 不要忽视 – ./media.bak
  • 不要忽视 – ./media-somethingelse

我结束了在.gitignore中使用这个:

 media !*/media 

这看起来有点奇怪,但基本上是说(第1行)忽略所有“媒体”,但(第2行) 不要忽略任何不在根目录中的“媒体”。 这个方法确实需要一点特殊性(关于不要忽略子目录中的东西),但是很容易适应/扩展。

我从另一个问题的答案是相关的:

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

我不保留可执行文件和符号链接在我的存储库中…所以我想要省略它们,当我做一个“混帐状态”。

如果像我一样,你想忽略符号链接,目录和可执行文件(在$ NAG_HOME / libexec中的一些文件,你可以将这些文件添加到.gitignore中,如下所示:

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

然后,当你做一个git状态时,如果你没有将它们添加到你的版本库,它将不会退回这些文件的列表。

我的解决scheme可能看起来很愚蠢,但我宁愿这样做,而不是每次添加新文件时更新.gitignore文件。

我只是把链接的默认名称,如“链接到xxx”,然后将下面的行添加到我的.gitignore文件:

 link to * 

那么你只要确保你没有命名任何其他文件/文件夹名称以“链接到”开始,你是sorting。