git 为什么当我 checkout 一个分支时,我的清洁过滤器正在运行,而不是我的涂抹过滤器?

pdkcd3nj  于 2023-03-21  发布在  Git
关注(0)|答案(1)|浏览(103)

**背景:**我正在处理一个存储库,其中包含其他程序运行所需的文件。由于其他程序的性质,需要调用其他文件的文件必须使用完整的文件路径。所有这些文件都存储在存储库中,因此我制作了一个smudge/clean过滤器,将文件路径从通用路径更改为存储库位置的路径。这个解决方案是必需的,因为可能有多个人将存储库克隆到不同的位置进行修改和测试。
**问题:**过滤器工作正常,但我现在遇到的问题是,每当我 checkout 一个新分支时,运行的是clean filter而不是smudge filter。据我所知,smudge filter应该是在 checkout 时运行的,而不是clean filter。有谁知道为什么smudge filter应该运行的时候却运行clean filter,以及如何解决这个问题?
**观察结果:**未使用筛选器,从设置为使用筛选器的分支和未设置为使用筛选器的分支跳转。

当从一个没有设置使用滤镜的分支跳到一个设置使用滤镜的分支时,会使用污迹滤镜。
当在设置为使用过滤器的两个分支之间切换时,使用清洁过滤器。
当文件被删除并再次 checkout 时,将运行污迹过滤器。
当运行git status时,清洁过滤器似乎随机运行。
通过设置GIT_TRACE=1并查看git正在运行的行,以及在filter脚本中将一些更新从stdout管道传输到stderr,以便它们出现在命令窗口中,来确认每个文件上使用的过滤器。

hgqdbh6s

hgqdbh6s1#

首先,不要忘记考虑替代选项,这将 * 避免 * 需要的内容过滤器(涂抹/清理)完全。
如果您的程序包含“需要调用其他文件的文件必须使用完整的文件路径”,则这些文件可以使用环境变量来引用这些其他文件(使用绝对路径)。
不需要“将文件路径从一般路径更改为存储库位置的路径”。
其次,检查使用git switch而不是old and confusing git checkout command时问题是否仍然存在。这假设您使用的是Git 2.23+(Q3 2019)
第三,使用足够新的Git也会允许使用trace2 API

export GIT_TRACE2=~/log.normal
git switch another Branch

# or

export GIT_TRACE2_EVENT=~/log.event
git switch another Branch

这些将包括更多的细节,而不仅仅是GIT_TRACE

相关问题