此问题以here和here的相似形式出现,但它们似乎与我正在寻找的内容不符。
我在StaticMatic中创建了一个项目,这是一个Ruby静态站点生成器。基本上,它只是一个带有Haml模板,Sass和CoffeeScript的src /目录。 StaticMatic提供了一个开发服务器来继续将它们编译为静态站点,以及在build /中生成静态站点的构建命令。
我对StaticMatic的修改是允许添加src / _modules / foo /,它可能包含src / _modules / foo / bar.haml。运行服务器或构建站点时,将在src / bar.haml创建符号链接,该符号链接指向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会让我觉得容易出错。 (也许这种担忧是不合理的?)
我理想的解决方法是:
[filetype = link]
...在.gitignore。据我所知,这是不可能的,或者是吗?
答案 0 :(得分:21)
这似乎是一个更好的主意
find . -type l | sed -e s'/^\.\///g' >> .gitignore
查找输出所有文件的“./”前缀。除非你把它修剪掉,否则gitignore无法对它们采取行动。一旦你在开头修剪“。\”,它就像一个魅力
答案 1 :(得分:17)
根据您使用的git版本,它应该遵循符号链接。有一个配置设置core.symlinks,可以设置为false,因此不要让git跟随它们作为目录(假设git&gt; = 1.6)。让符号链接脚本也将这些链接附加到.gitignore文件或者自己添加它们似乎是完全合理的。您也可以执行find . -type l >> .gitignore
答案 2 :(得分:10)
我们遇到了类似的问题,我们需要忽略符号链接的目录或一个真实的目录,但是不是一个同名的子目录或以相同字母开头的文件。例如:
我最终在.gitignore中使用了这个:
NSString *decimalSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleDecimalSeparator];
formatter.positiveFormat = [NSString stringWithFormat:@"###%@00", decimalSeparator];
这看起来有点奇怪,但基本上是说(第1行)忽略所有“媒体”但是(第2行)不忽略根目录中不存在的任何“媒体”。这个方法确实需要一点特异性(关于不忽略子目录中的东西),但应该很容易适应/扩展。
答案 3 :(得分:3)
another question的答案是相关的:
for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
test -L "$f" && echo $f >> .gitignore;
test -d "$f" && echo $f\* >> .gitignore;
done
答案 4 :(得分:1)
我对我使用了最合适的解决方案-命名协议。
带有文件 在我的解决方案中,每个指向文件的符号链接都有一个前缀,例如“ bla.outsidemodule.ts”。 在.gitignore文件中,我只有:
**/*.outsidemodule.*
带有文件夹 同样在解决方案的根目录上,我有文件夹“ platform”,其中包含解决方案其他部分的通用库/模块。结构是这样的:
- ./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
在.gitignore中只是:
**/platform <- exclude all "platform" folders
!./platform <- do not exclude folder "platform" if it's on a root
答案 5 :(得分:0)
我没有将可执行文件和符号链接保存在我的存储库中...所以当我执行“git status”时我也想省略它们。
如果像我一样,你想忽略符号链接,目录和可执行文件(在$ NAG_HOME / libexec中的一些文件,你可以将这些文件添加到.gitignore中,如下所示:
file * | egrep 'ELF|symbolic|directory' | awk -F\: '{ print $1 }' >> .gitignore
echo ".gitignore" >> .gitignore
然后,当你执行git状态时,如果你没有将它们添加到你的存储库,它就不会吐出这些文件的列表。
答案 6 :(得分:0)
我的解决方案看似愚蠢,但我宁愿这样做,也不愿每次添加新文件时都更新.gitignore文件。
我只是将链接保留为默认名称,例如“link to xxx”,然后将以下行添加到我的.gitignore文件中:
link to *
然后,您只需确保不要将名称以“link to”开头的任何其他文件/文件夹命名,然后对其进行排序。
答案 7 :(得分:0)
如果您真的想忽略文件名(如果它是符号链接或文件),而不是目录(如果不是目录),则可以添加到.gitignore:
/media
!/media/
要像@Chris_Rasys一样来表达它,这将是: