Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 从以前的修订版开始应用自动文件转换(转换),保留历史记录_Git_Git Rebase_File Conversion - Fatal编程技术网

Git 从以前的修订版开始应用自动文件转换(转换),保留历史记录

Git 从以前的修订版开始应用自动文件转换(转换),保留历史记录,git,git-rebase,file-conversion,Git,Git Rebase,File Conversion,对于一个给定的项目(我目前专门从事该项目),我希望对一些文件应用某种自动转换。在本次讨论中,假设我希望将所有文本文件的行尾从Windows样式更改为Unix样式。我希望新的格式在过去的某次修订中有效,并贯穿历史 我通常做的是:我启动一个交互式重基,并在每次提交后从所需的起点附加以下内容: exec <transformation rule> exec git commit -m "transform" && git revert --no-edit HEAD exe

对于一个给定的项目(我目前专门从事该项目),我希望对一些文件应用某种自动转换。在本次讨论中,假设我希望将所有文本文件的行尾从Windows样式更改为Unix样式。我希望新的格式在过去的某次修订中有效,并贯穿历史

我通常做的是:我启动一个交互式重基,并在每次提交后从所需的起点附加以下内容:

exec <transformation rule>
exec git commit -m "transform" && git revert --no-edit HEAD
exec
exec git commit-m“transform”和&git revert——无编辑头
这将导致一个
转换
,然后是一系列原始提交,每个提交都被
还原
转换
包围,然后是最终的
还原
。然后,我执行第二个交互式重基并挤压所有三元组
revert
-
-
-
transform
,并删除最后一个
revert
。第一个
变换
保持原位,所有其他
变换
还原
提交消失


这个手动过程产生(几乎)所需的结果(我不确定新提交的提交日期),但我想知道是否可以使用
过滤器分支实现自动化,
快速导入
或者可能是我在粗略搜索中错过的自定义工具。

在这种情况下,您可能需要的是
过滤器分支

用更多的解释来更新:当你执行上面描述的源代码时(当我仔细阅读它的时候,我真的希望为你的独创性喝彩!),你必须考虑一系列给定的变化,一系列的变化,转变。这就是为什么你必须引入一个假回复,你必须在下一个互动中挤压它。因此,你避免了冲突,这让我非常着迷

与此不同,git filter branch在同一提交序列上提供了另一个“视图”。序列中的每个提交都被视为状态,而不是转换。您提供的过滤器会更改状态本身。因此,你根本不必考虑冲突,它们根本不可能出现。但当然,您必须对序列中的每个提交应用相同的转换

因此,您的特定问题的答案是:如果您希望将新行从DOS转换为UNIX,只需运行如下命令:

git筛选器分支--树筛选器“查找”-键入f-print0 | xargs-0 perl-pi-e“s\r\n\n,;”'HEAD


perl-pi-e的\n\r\n;'
是执行转换的命令,
find
xargs
是收集当前目录中所有文件并将其传递给
perl
的方法。请注意,
git
有自己的CRLF魔法(参见
core.autocrlf
core.safecrlf
.gittributes
文件的
man-git-config
),通常不需要手动处理CRLF,正确的配置足以构建一个适用于Windows和类unix系统的存储库。

您建议使用哪种特定的
--filter-
呢?刚刚有机会测试了
filter branch
。它摇晃。谢谢你给我指出了看似显而易见的问题。