【发布时间】:2015-11-11 07:47:01
【问题描述】:
我为我的 git 存储库定义了涂抹和清洁过滤器。我单独测试了这些脚本,我很确定它们可以正常工作。
但是当我git commit && git push时,远程版本是未过滤的。
我做错了什么?另外,有没有办法在不将过滤器推送到远程存储库的情况下测试过滤器是否工作?
存储库如下所示:
zsh/
|- zshrc
git/
|- gitconfig
.gitattributes
.gitconfig
config
zshrc-clean.zsh
zshrc-smudge.zsh
gitconfig-clean.zsh
gitconfig-smudge.zsh
zsh/zshrc
export HOMEBREW_GITHUB_API_TOKEN = abcdefg
git/gitconfig
[user]
email = me@example.com
.gitattributes
zsh/zshrc filter=zshrc
git/gitconfig filter=gitconfig
.gitconfig
[filter "zshrc"]
clean = zsh zshrc-clean.zsh
smudge = zsh zshrc-smudge.zsh
[filter "gitconfig"]
clean = zsh gitconfig-clean.zsh
smudge = zsh gitconfig-smudge.zsh
config
git:user:email = me@example.com
zsh:HOMEBREW_GITHUB_API_TOKEN = abcdefg
configuration-scripts/gitconfig-clean.zsh
sed '/email/ s/= .*/= REPLACEME:git:user:email/' /dev/stdin
gitconfig-smudge.zsh
user_email=$(sed -n '/git:user:email/ { s/.* = //; p; }' ~/dotfiles/config)
sed "s/REPLACEME:git:user:email/$user_email/" /dev/stdin
zshrc-clean.zsh
sed '/export HOMEBREW_GITHUB_API_TOKEN/ s/=.*/=REPLACEME:zsh:HOMEBREW_GITHUB_API_TOKEN/' /dev/stdin
zshrc-smudge.zsh
HOMEBREW_GITHUB_API_TOKEN=$(sed -n '/HOMEBREW_GITHUB_API_TOKEN/ { s/.* = //; p; }' ~/dotfiles/config)
sed "s/REPLACEME:zsh:HOMEBREW_GITHUB_API_TOKEN/$HOMEBREW_GITHUB_API_TOKEN/" /dev/stdin
测试过滤器
zsh zshrc-clean.zsh < zsh/zshrc > zshrc-temp
cat zshrc-temp
zsh zshrc-smudge.zsh < zshrc-temp
zsh gitconfig-clean.zsh < git/gitconfig > gitconfig-temp
cat gitconfig-temp
zsh gitconfig-smudge.zsh < gitconfig-temp
【问题讨论】:
-
我已经像您描述的那样创建了存储库(但
.gitconfig文件的内容附加到.git/config)并且干净的过滤器似乎正在工作。这是 7-zip 打包的 base64 编码的测试存储库:sprunge.us/FZTJ。请同时发布您的.git/config、git --version和操作系统。 -
注意:如果 Github API 令牌或其他安全信息由于不工作的干净过滤器而被发布,有问题的令牌应该被撤销并重新生成。
标签: git filter git-filter