- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想在我的 git 存储库中应用此过滤器,以便在 checkout 期间从解决方案文件中删除一个部分,并在提交期间添加该部分。
这是我要删除或添加的部分:
GlobalSection(SubversionScc) = preSolution
Svn-Managed = True
Manager = AnkhSVN - Subversion Support for Visual Studio
EndGlobalSection
我在我的 .git/info/attributes 中设置了这个过滤器
*.sln filter=SourceControlProvider
并且我已经将这些命令添加到我的配置中
$ git config filter.SourceControlProvider.smudge "sed -e '/GlobalSection(SubversionScc)/,/EndGlobalSection/d' %"
$ git config filter.SourceControlProvider.clean "sed -n -e '/^Global$/ r ankhsvnsection ' < %"
嗯,这行不通。我做错了什么?
ankhsvnsection 是一个文本文件,与 *.sln 文件位于同一目录中
最佳答案
我在这里看到了一些问题:
两个过滤器的末尾都有 %
。
这没有特殊含义,将作为额外参数传递给 sed,这可能会产生错误(除非您有一个名为 %
的文件)。
过滤器应该是“流式”的(从标准输入读取并写入标准输出)。它们的定义可以包括%f
,但它不应该真正被当作一个文件来读取或写入; Git 负责这部分工作,过滤器应该只从标准输入读取并写入标准输出。
您的清理过滤器尝试从 %f
重定向标准输入。
输入数据已经在标准输入上,无需重定向。
clean 过滤器中的 sed 程序使用 r
命令访问另一个文件。
过滤器似乎是从工作树的根运行的,但我不确定这是否得到保证。
清理过滤器中的 sed 命令使用 -n
。它的唯一输出将是 ankhsvnsection
文件的内容(假设输入有一个 Global
行)。
某些版本的 sed(至少是 Mac OS X 中的(旧)BSD 版本)不允许在 r
命令的文件名后有空格(即 clean 过滤器的 sed 程序中 ankhsvnsection
之后的空格)。
添加、更改或删除过滤器后,您可能需要在 Git 应用过滤器之前触摸、修改或删除您的工作树文件。 Git的索引记录了工作树文件的修改时间;如果它们没有改变,那么 Git 会将 git checkout -- file
和 git add file
翻译成空操作。
如果你想查看索引的实际内容(例如检查 clean 过滤器生成的内容),你可以使用 git show :0:path/from/repo/root/to/file
。您通常不能为此使用 git diff
,因为它也会应用过滤器。
这些对我有用:
git config filter.SourceControlProvider.smudge "sed -e '/GlobalSection(SubversionScc)/,/EndGlobalSection/d'"
git config filter.SourceControlProvider.clean "sed -e '/^Global\$/ r ankhsvnsection'"
关于git - 这个 git smudge/clean 过滤器有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5380634/
我在搞乱图像处理,主要是使用 Python。我现在不太担心性能,因为我只是为了好玩。到目前为止,我可以加载位图,合并它们(根据某些功能),并进行一些非常粗略的分析(找到最亮/最暗的点,诸如此类)。 我
首先,我在网上和这个网站上搜索了解决方案,但我尝试过的解决方案都不起作用,所以我决定发布我的个人问题和代码。该程序是使用 Python 3.2.2 和相应的兼容版本的 pygame 创建的。我还意识到
我正在创建一个 smudge/clean git 过滤器。过滤器需要知道名称被过滤的文件,以便它可以执行一些外部操作其结果将由过滤器输出。 由于过滤器是从标准输入读取并写入标准输出,有没有办法获取被过
我为我的 git 存储库定义了 smudge 和 clean 过滤器。我单独测试了这些脚本,我很确定它们可以正常工作。 但是当我 git commit && git push 时,远程版本未被过滤。
购买新显示器并设置双显示器显示后,VS 2010 被弄脏了。我真的不知道如何描述它,但它真的很烦人。看这里: 我试过重新安装 VS,但没有成功。我的显卡是 ATI Radeon HD 5770,我使用
我正在尝试使用 git 来管理对我的实时网站的部署。我遇到的问题是我有几个设置文件,我不想在推送到生产环境时更新这些文件 我正在做的是使用钩子(Hook)或涂抹/清洁来更改文件内容,例如从
我想在我的 git 存储库中应用此过滤器,以便在 checkout 期间从解决方案文件中删除一个部分,并在提交期间添加该部分。 这是我要删除或添加的部分: GlobalSection(Subversi
出于 checkout/差异/阶段等目的,我想完全忽略一些行: set(ROOT /path/to/something/name_suffix) set(ROOT /path/to/something
我是游戏开发团队的一员。我们正在开发 Unreal Engine 4个人电脑游戏。我们有私有(private)GitLab服务器处理项目的版本控制。 现在,当任何人尝试从我们 Git 项目的特定分支进
我是一名优秀的程序员,十分优秀!