情况:我刚刚克隆了一个git repo,然后我为repo配置了涂抹过滤器。在repo周围散布着.gitattributes
个文件,这些文件指定了在结帐时应该在文件上使用的过滤器。但是因为我在结帐(克隆)之后设置了过滤器,所以没有处理任何文件。
如何告诉git通过repo,查找所有.gitattributes
个文件,并更新(重新检出,应用过滤器,等等)所有带有污迹过滤器的文件?
答案 0 :(得分:12)
只需重新检查所有内容。
cd /path/to/your/repo
git stash save
rm .git/index
git checkout HEAD -- "$(git rev-parse --show-toplevel)"
git stash pop
涂抹过滤器将应用于新结帐。
注意,如this answer所示,您需要删除索引才能强制过滤器再次运行。
我创建了一个别名“
reattr
”来执行所有这些步骤,现在我很高兴。
reattr = !sh -c "\"git stash save; rm .git/index; git checkout HEAD -- \\\"$(git rev-parse --show-toplevel)\\\"; git stash pop\""
(可读性多行)
reattr = !sh -c "\"git stash save; \
rm .git/index; \
git checkout HEAD -- \\\"$(git rev-parse --show-toplevel)\\\"; \
git stash pop\""
答案 1 :(得分:2)
您可以删除Git索引并让Git重新扫描它以了解更改。然后你可以检查出所有带有污迹过滤器的文件。
# remove Git index
rm .git/index
# rescan index
git reset HEAD -- .
# checkout all the files which have a smudge filter on them
git ls-files --modified | grep -v .gitattributes | awk '{print "git checkout HEAD -- \""$1"\""}' | bash
注意: 在重新结帐之前保存未提交的更改,否则,将覆盖对这些涂抹滤镜应用文件的所有修改。