【问题标题】:Fail to apply multiple git filters on one file无法在一个文件上应用多个 git 过滤器
【发布时间】:2022-01-28 06:01:30
【问题描述】:

我有以下.gitattributes

src/boot/firebaseConfig.js filter=updateFirebaseConfig

还有以下.git/config

[filter "updateFirebaseConfig"]
        smudge = smudgeFirebaseConfig.sh %f
        clean = cleanFirebaseConfig.sh %f

这是我的/usr/local/bin/cleanFirebaseConfig.sh

#!/bin/bash
set -x
sed -i -e "s/base64string/{FIREBASE_KEY}/g" $1
sed -i -e "s/url.firebaseapp.com/{AUTH_DOMAIN}/g" $1
sed -i -e "s/https:\/\/url.firebaseio.com/{CONN_STR}/g" $1
sed -i -e "s/url\.appspot\.com/{STORAGE_BUCKET}/g" $1
sed -i -e "s/project/{PROJECT_ID}/g" $1
sed -i -e "s/idstring/{APP_ID}/g" $1

我在 MacBook 上使用 BASH。我遇到了两个问题:

(1) 它会清理我本地存储库中的文件 src/boot/firebaseConfig.js - 用占位符替换值,这不是预期的行为。

(2) 当我 git add 更改文件 src/boot/firebaseConfig.js 时执行清理操作,最后文件仍然显示为已更改和未暂存,我必须再次添加 - DUPLICATE git add 由于 git 更改本地文件。

(3) 当我浏览远程仓库时,这个文件是空的 - 被删除了。

感谢任何想法和见解。

【问题讨论】:

    标签: git filter git-config gitattributes


    【解决方案1】:
    #!/bin/bash
    sed \
    -e "s/base64string/{FIREBASE_KEY}/g" \
    -e "s/url.firebaseapp.com/{AUTH_DOMAIN}/g" \
    -e "s/https:\/\/url.firebaseio.com/{CONN_STR}/g" \
    -e "s/url\.appspot\.com/{STORAGE_BUCKET}/g" \
    -e "s/projectid/{PROJECT_ID}/g" \
    -e "s/appid/{APP_ID}/g" $1
    

    【讨论】:

    • 涂抹和清洁过滤器必须对通过过滤器的数据进行操作(在其标准输入上,并进入其标准输出),而不是在任何特定文件上。删除$1%f 参数仅用于让您知道将来文件的名称是什么:在过滤器运行时,该文件甚至可能还不存在。
    • 这里提供的代码 sn-p 现在对我有用。我需要删除$1 参数吗?
    • 是的。事实上,代码有时会工作(偶然),有时会失败。
    猜你喜欢
    • 1970-01-01
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-13
    • 1970-01-01
    相关资源
    最近更新 更多