keo*_*keo 24 git history rewrite branch newline
我们正在使用第三方PHP引擎来定期更新.这些版本保存在git中的一个单独的分支上,而我们的fork是主分支.
这样我们就可以从新版本的引擎中将补丁应用到我们的fork中.
我的问题是,经过对我们分支的许多提交后,我意识到引擎的初始导入是通过CRLF行结尾完成的.
我将每个文件转换为LF,但这做了一个巨大的提交,删除了100k行并添加了100k行,这显然打破了我们打算做的事情:从第三方引擎的工厂版本中轻松合并补丁.
我知道什么?我怎样才能解决这个问题?我的fork上已经有数百个提交.
最好的方法是在初始导入之后以及在分支我们自己的fork之前以某种方式执行行结束修复提交,并在历史记录中删除那个巨大的行结束提交.
但是我不知道如何在Git中这样做.
谢谢!
keo*_*keo 34
我终于设法解决了.
答案是:
git filter-branch --tree-filter '~/Scripts/fix-line-endings.sh' -- --all
Run Code Online (Sandbox Code Playgroud)
fix-line-endings.sh包含:
#!/bin/sh
find . -type f -a \( -name '*.tpl' -o -name '*.php' -o -name '*.js' -o -name '*.css' -o -name '*.sh' -o -name '*.txt' -iname '*.html' \) | xargs fromdos
Run Code Online (Sandbox Code Playgroud)
在所有提交的所有树中修复所有行结尾之后,我做了一个交互式rebase并删除了所有修复行结尾的提交.
现在我的回购清洁,新鲜,准备被推:)
访问者注意:如果您的仓库被推/克隆,请不要这样做,因为它会使事情变得非常糟糕!