允许更改的文件不被git pull覆盖

时间:2016-01-12 12:10:48

标签: git drupal githooks

我有这样的开发设置:

/themes/themename/css/style.css   # path to drupal theme css file
/styleguide/source/css/style.css  # path to generated css-file in styleguide

样式指南包含所有不同页面类型的示例标记,这就是设计实现的地方。 drupal主题css文件在git中跟踪,并在master中从stylebuide中生成的css更新。但是,我一直需要检查样式开发是否也在drupal站点中正确显示,同时我实现了设计。因此,我设置了一个软链接,以便:

/themes/themename/css/style.css -> /styleguide/source/css/style.css

这很好用,我可以用drupal视图重新加载Web浏览器,并加载新生成的css文件。

目前我隐藏了一个事实,即使用:

更改了style.css(对于git)
git update-index --assume-unchanged /themes/themename/css/style.css

然而,每当我在现有分支上执行git pull或git checkout时,git会抱怨,说:

  

错误:结帐后,您对以下文件的本地更改将被覆盖:
  主题/ uib_w3 / CSS / style.css中
  请在更改分支之前提交更改或存储更改   中止

有什么建议我怎么能避免收到这条消息?也许使用一些钩子来重置git pull上的文件,并重新建立链接post pull?或者是否有另一种可能更好的方法?

1 个答案:

答案 0 :(得分:2)

你可以"滥用"一个content filter driver,以便在结帐时生成正确的/themes/themename/css/style.css

  • 首先,请不要再使用style.css版本:将其重命名为"模板"。
    git mv style.css style.css.tpl
    /themes/themename/css/style.css添加到您的.gitignore

  • 第二,在.gitattributes declaration中添加与*.css.tpl个文件相关联的涂抹脚本:

    *.css.tpl  filter=checkcss
    

smudge
(图片来自" Customizing Git - Git Attributes",来自" Pro Git book")

git config filter.checkcss.smudge 'style_smudge'

style_smudge脚本可以进行版本控制,可以简单如下:

#/bin/sh
cat

简而言之:它在结帐时对style.css.tpl没有任何作用 ,您可以使用(滥用,真的)涂抹脚本来执行其他操作:

#/bin/sh
if [ -z ${dev+x} ]; then 
  ln -fs /styleguide/source/css/style.css /themes/themename/css/style.css
else
  cp -f /themes/themename/css/style.css.tpl /themes/themename/css/style
fi
cat

如果环境变量名为" dev"定义(任何值),然后你进入"开发"环境,你需要一个符号链接 如果相同的变量" dev"未设置,则保留原始style.css文件。