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

lac*_*der 9 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
Run Code Online (Sandbox Code Playgroud)

是什么原因引起了这个?它可以是我的.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
Run Code Online (Sandbox Code Playgroud)

更新:

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

将更改从diff文件提取到当前分支

小智 22

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

  1. 在记事本++中打开补丁文件,然后输入以下两个菜单:

    Encoding/Convert to UTF-8
    Edit/EOL conversion/Unix (LF)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 跑:

    git apply --reject --whitespace=fix your_patch.patch
    
    Run Code Online (Sandbox Code Playgroud)

  • 对我来说,只需将 diff 文件转换为 UTF-8 就可以了 (3认同)

lac*_*der 14

传递颜色参数似乎解决了这个问题.

iconv -f ascii -t utf-8 fix.patch -o fix_utf8.patch
Run Code Online (Sandbox Code Playgroud)

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

Get-Content .\fix.patch | Set-Content -Encoding utf8 fix_utf8.patch
Run Code Online (Sandbox Code Playgroud)

从中更改我的.gitconfig文件

git apply --reject --whitespace myfile.patch
Run Code Online (Sandbox Code Playgroud)

永远改变

git diff HEAD --color=never > fix.patch
Run Code Online (Sandbox Code Playgroud)

解决了我的问题所以我不必在传播到补丁文件时传递颜色选项.

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

git apply fix.patch --check
Run Code Online (Sandbox Code Playgroud)


Chi*_*g64 9

我们尝试调试了几个小时。最终奏效的是:

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