今天打算同步 RubyChina 的 source code,但在 merge 到本地的 branch 后,push 到 github 时确碰到了问题,错误如下:
Pushing to https://github.com/hunkshi/ruby-china.git
error: unpack failed: index-pack abnormal exit
通过 googgle 搜索,有人建议 check 一下数据库,fsck-objects 显示,果然有一条错误
error in commit 0c804057994a56a1d649653675365b3ad12d7ad8: invalid author/committer line - bad name
在 history 中找到这条 commit,发现这条 commit 的 Author、Committer 中有特殊字符=> /, 为了验证是否因为这些特殊字符引起,从这条 commit 的上一条建了一个 branch,push 到 github,成功!把之后的 commit merge 过来再次上传,失败!因此可以断定是特殊字符引起。
解决办法,Git Bash 中运行如下命令:
git filter-branch -f --commit-filter '
if [ "$GIT_AUTHOR_EMAIL" = "[email protected]" ];
then
GIT_AUTHOR_NAME="xxxxx";
GIT_COMMITTER_NAME="xxxxxx";
git commit-tree "$@";
else
git commit-tree "$@";
fi
' HEAD
xxxx 为去除特殊字符的新 name。然后 push 到 github(选择 force 选项,强制覆盖),成功!
我使用 git 和 github 时间还不长,有以下一些疑问: