我创建的所有GIT补丁都是致命的:无法识别的输入

时间:2016-05-20 12:56:08

标签: git osx-mavericks

我正在运行Mac OSX 10.9.4(Mavericks)并且拥有git版本2.8.2。我用一个全新的回购测试了这个。这是一个例子。

mkdir gitest
cd gitest
git init
echo "monkeyface" > monkey.txt
git commit -m "first commit"
echo "monkeyface farted" > monkeyfart.txt
git add .
git diff HEAD > new.patch
rm monkeyfart.txt
git reset --hard HEAD
git apply new.patch --check
>fatal: unrecognized input

任何想法导致了什么?它可以是我的.gitconfig文件中的任何内容吗?

[user]
    name = myusername
    email = myemail@mail.com
[color]
  ui = always
[alias]
  st = status -sb -uall
  lg = log --decorate --pretty=oneline --abbrev-commit --graph
  undocommit = reset --soft HEAD^
  undopush = push -f origin HEAD^:master
[core]
    editor = vim
    excludesfile = ~/.gitignore_global
    pager = less -r
[commit]
  template = ~/.gitmessage.txt
[filter "media"]
    clean = git-media-clean %f
    smudge = git-media-smudge %f

更新:

虽然下面链接的答案提供了一些关于问题可能存在的想法,但我的问题特别隐藏在我的配置中,因为没有颜色参数传递给命令。这个答案是相关的,但我的问题和答案可能对可能遇到类似问题的其他人有所帮助。

Extract changes from diff file to current branch

5 个答案:

答案 0 :(得分:15)

补丁文件中存在格式问题。要修复路径文件:

  1. 在notepad ++中打开补丁文件,然后进入以下两个菜单:

    Encoding/Convert to UTF-8
    Edit/EOL conversion/Unix (LF)
    
  2. 运行:

    git apply --reject --whitespace=fix your_patch.patch
    

答案 1 :(得分:12)

更新

您可能有一个未编码为UTF-8的文件。要在* nix系统(MacOS,Linux等)上修复它

iconv -f ascii -t utf-8 fix.patch -o fix_utf8.patch

对于Windows,您可以尝试:

Get-Content .\fix.patch | Set-Content -Encoding utf8 fix_utf8.patch

如果您的文件中可能已包含颜色代码,您可以尝试:

git apply --reject --whitespace myfile.patch

传入颜色参数似乎可以解决问题。

git diff HEAD --color=never > fix.patch

现在检查没有返回错误消息。

git apply fix.patch --check

更改我的.gitconfig文件
[color]
    ui = always

始终改为

[color]
    ui = auto

解决了我的问题,因此我不必在传播到补丁文件时传递颜色选项。

更新:根据saurabheights答案,你甚至不需要brew link gnu-sed,你可以用珍珠做到这一点。这也将从错误的补丁文件中删除颜色字符。可能有很多方法可以做到这一点。

perl -pe 's/\x1b.*?[mGKH]//g' bad.patch > good.patch

答案 2 :(得分:3)

我们尝试调试了几个小时。最终起作用的是:

  1. 使用VS Code之类的编辑器打开补丁文件
  2. 将编码更改为UTF-8
  3. 将行尾从CRLF更改为LF
  4. 保存了新文件
  5. git apply myPatch.patch有效

答案 3 :(得分:2)

对于那些已经有颜色代码补丁的人,试试这个: -

Ubuntu : -

brew link gnu-sed

Mac 上,使用以下命令安装gsed: -

cat incorrect.patch | gsed -r "s/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[mGK]//g" > correct.patch

并生成正确的补丁文件: -

09/03/2017 00:10 29 .bowerrc
09/03/2017 00:10 242 .editorconfig
09/03/2017 00:10 138 .gitignore
09/03/2017 00:13 321 bower
09/03/2017 00:13 198 bower.cmd
09/03/2017 00:10 118 bower.json
09/03/2017 00:13 335 cleancss
09/03/2017 00:13 212 cleancss.cmd
09/03/2017 00:14 962 config.xml
09/03/2017 00:13 333 dateformat
.....
09/03/2017 00:13 325 semver
09/03/2017 00:13 202 semver.cmd
09/03/2017 00:13 323 shjs
09/03/2017 00:13 200 shjs.cmd
09/03/2017 00:13 331 sshpk-conv
09/03/2017 00:13 208 sshpk-conv.cmd
09/03/2017 00:13 331 sshpk-sign
09/03/2017 00:13 208 sshpk-sign.cmd
09/03/2017 00:13 335 sshpk-verify
09/03/2017 00:13 212 sshpk-verify.cmd
09/03/2017 00:13 323 strip-bom
09/03/2017 00:13 200 strip-bom.cmd
09/03/2017 00:13 329 strip-indent
09/03/2017 00:13 206 strip-indent.cmd
09/03/2017 00:13 323 user-home
09/03/2017 00:13 200 user-home.cmd
09/03/2017 00:13 317 uuid
09/03/2017 00:13 194 uuid.cmd
09/03/2017 00:13 321 which
09/03/2017 00:13 198 which.cmd
09/03/2017 00:13 327 window-size
09/03/2017 00:13 204 window-size.cmd
03/2017 00:14 www

答案 4 :(得分:0)

在Windows上,对于Visual Studio:

  1. 打开文件
  2. 从菜单:文件->将文件名另存为...
  3. 选择“保存编码...”

Save with Encoding

  1. 选择以下内容:
    • 编码:带/不带签名的UTF-8
    • 行尾:Unix(LF)

Encoding Options

  1. 保存文件
  2. 再次运行git apply MyPatch.patch