如何在composer安装的Magento模块上忽略Git符号链接


11

我使用安装模块composer.phar

这就造成了符号链接文件publichtml/app/code/community,目标是(例如)vendor/themodule...

在我.gitignore本人中,我排除了供应商目录-但是链接当然仍然会在git中结束。

有没有一种自动排除这些链接的简便方法?(除了将所有内容手动添加到.gitignore之外)

我不得不说,我有一些require-dev模块不应最终存储在最终服务器上-因此拥有这些链接至少不会那么好。


1
这也适用于modman吗?
philwinkle 2013年

使用modman时,通常对每个扩展都使用git子模块,只需将符号链接添加到存储库中。相反,无需将它们排除在外,相反,在大多数情况下,在modman部署方案中这没有意义。
Vinai

1
@philwinkle我最近出于安全原因(例如,轻松检测到已修改的文件),跟踪index.php和Mage.php的更改以及更容易进行的Magento升级而在一个单独的存储库中开始跟踪Magento根,因此IMO也肯定与modman相关。
ColinM 2014年

Answers:


8

我想出的最好的方法是在作曲家安装/更新后运行此程序

$ find * -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore

该命令应在git根目录中运行。它将所有未存在的符号链接添加到.gitignore文件中。


这会生成路径,例如./foo/bar..我认为我们必须删除第一个.-这样对您有用吗?
Alex

与领导合作对我来说很好.,是的。其他情况下进行了救援:find . -type l -not -exec grep -q "{}" .gitignore \; -print | sed 's/^\.\///'
Vinai

实际上,这打破了常规。好吧,也许无论如何都有一种清理路径的好方法……
Vinai 2013年

1
简单的解决方案:find * ...。会更新我的答案。
Vinai

3

此方法仅添加未跟踪的符号链接,因此可以重复进行而无需添加重复的条目,子模块中或已经被忽略的符号链接,或故意跟踪的符号链接。

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


1

适用于我的@ColinM和@Vinai的组合解决方案

for f in $(git status --porcelain | grep '^??' | sed 's/^?? //'); do
    if test -L "$f"
    then
        test -L "$f" && echo $f >> .gitignore;
    elif test -d "$f"
    then
        find ${f%/} -type l -not -exec grep -q "^{}$" .gitignore \; -print >> .gitignore
    fi
done

您是否注意到最近的作曲家安装程序会自动排除符号链接?
亚历克斯

可以,但是我的某些项目不在作曲家的控制之下。这里提供的解决方案不仅适用于作曲家项目,而且还完全忽略了符号链接。希望它能帮助到别人
martin_mageworx '16
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.