Git clean筛选器-检索原始行、Git污迹,但不检索原始行
为了结帐/diff/stage等目的,我想完全忽略一些行:Git clean筛选器-检索原始行、Git污迹,但不检索原始行,git,Git,为了结帐/diff/stage等目的,我想完全忽略一些行: set(ROOT /path/to/something/name_suffix) set(ROOT /path/to/something/othername_suffix) 偶尔(但不总是)我会把它当作 set(ROOT /some/other/private/path/name) set(ROOT /some/other/private/path/othername) 忽略意味着: ~smudge:如果我签出它,什么都不会做。如果
set(ROOT /path/to/something/name_suffix)
set(ROOT /path/to/something/othername_suffix)
偶尔(但不总是)我会把它当作
set(ROOT /some/other/private/path/name)
set(ROOT /some/other/private/path/othername)
忽略意味着:
git diff
以查看最初提交的内容(问题是\u后缀
,我无法从工作树中分辨出它是什么。原始路径可以硬编码,它不会更改),并将其替换为索引的路径。我不希望我的专用路径包含\u后缀
目录
这里有两件事:
涂抹脚本应将捕获的组保存在同名文件中,扩展名为
.smudge
(例如)和.gitignore
包括*.smudge
这样,您的clean filter脚本就可以从xxx.smudge读取原始值,并通过反向sed
将文件恢复为其原始内容
您可以。(请参见)您的smudge脚本应将捕获的组保存在同名文件中,扩展名为
.smudge
(例如)和.gitignore
包括*.smudge
这样,您的clean filter脚本就可以从xxx.smudge读取原始值,并通过反向sed
将文件恢复为其原始内容
您可以。(请参阅)正如VonC建议的那样:您实际上可以将正在处理的文件的名称传递到清理/涂抹脚本 让污迹过滤器“保留”目标线的当前状态的一种方法是:
- 从磁盘读取
的当前内容,并确定要保留的行%f
- 在标准中替换要保留的行
sed
,或任何可编写脚本的方式来替换文本
请注意,一般来说,如果从一个分支切换到另一个分支,目标文件可能与您预期的不同——它是否存在于当前工作树中?它的格式是否在两个分支之间更改
话虽如此,上述内容仍应涵盖您的大多数用例。正如VonC所建议的那样:您实际上可以将正在处理的文件的名称传递给清理/涂抹脚本 让污迹过滤器“保留”目标线的当前状态的一种方法是:
- 从磁盘读取
的当前内容,并确定要保留的行%f
- 在标准中替换要保留的行
sed
,或任何可编写脚本的方式来替换文本
请注意,一般来说,如果从一个分支切换到另一个分支,目标文件可能与您预期的不同——它是否存在于当前工作树中?它的格式是否在两个分支之间更改
话虽如此,上述内容仍应涵盖您的大多数用例。谢谢,这是答案的一半。我将等待看是否有人捕捉到“涂抹”部分。取消删除-如果原始行未更改(而不是涂抹),我希望涂抹在签出时不做任何操作.BTW,我喜欢这个解决方案,特别是因为我们可以使用
.smudge
文件名,这样它就不会出现在ls中。@kabanus“如果原始行没有改变”?但是当您签出该文件时,原始行根据定义是不变的…我并不完全了解您的用例。如果我有污点过滤器,即使原始行没有改变,它也会在签出后更改。如果我将“aaa”污点为“bbb”,并且我的索引和工作区都包含“aaa”,则在git签出后
它将更改“aaa”到“bbb”。用例是,我通常会使用全局路径,通常是我的私有路径,除非我明确更改它,否则我不想担心它。谢谢,这是答案的一半。我将等待,看看是否有人捕捉到“污迹”部分。取消删除-如果原始行不变,我希望污迹在签出时不做任何操作(而不是弄脏它)。顺便说一句,我喜欢这个解决方案,特别是因为我们可以使用。弄脏文件名,这样它就不会出现在ls中了。@kabanus“如果原始行不变的话“?但是当您签出该文件时,原始行根据定义是不变的……我并不完全了解您的用例。如果我有污点过滤器,即使原始行没有改变,它也会在签出后更改。如果我将“aaa”污点为“bbb”,并且我的索引和工作区都包含“aaa”,则在git签出
后,它将更改“aaa”至“bbb”"。使用案例是,我通常会使用全局路径,通常是我的私有路径,除非我明确更改它,否则我不想担心。这让我想到让sed跳过污迹上包含原始根路径的行,谢谢。这让我想到让sed跳过包含原始根路径的行在污迹上,谢谢。
smudge = "sed 's#set\\(ROOT\\) .*/\\([a-z]*\\).*)#\\1 /some/other/private/path/\\2)#'"