解决 TortoiseGit 诡异的 Bad file number 问题

此问题,请不要使用 rebase, 下载最新的 TortoiseGit 即可;

TortoiseGit-2.3中文版与Git安装包_手册: http://download.csdn.net/detail/renfufei/9738152

问题描述

昨天,以及今天(2014-11-29),使用 TortoiseGit 时碰到了一个诡异的问题. 卸载,清理注册表,重装,重启,各种折腾以后,还是不能解决. 但是23.45分一过,突然灵光一闪,解决了.

问题是这样的. 使用命令行的 git pushgit fetchgit pull 什么的都没问题. 但是使用 TortoiseGit 执行拉取(pull ...) 命令时, 就给报错, 报错信息如下:

git.exe pull -v --no-rebase --progress "origin"

/libexec/git-core/git-sh-setup: line 83: /bin/sed: Bad file number
From https://github.com/cncounter/translation
= [up to date]      master     -> origin/master
D:\Develop\Git/libexec/git-core\git-pull: line 268: /bin/tr: Bad file number
Your configuration specifies to merge with the ref 'master'
from the remote, but no such ref was fetched.


git 未能顺利结束 (退出码 1) (3510 ms @ 2014/11/29 23:51:56)

死活各种折腾,根据提示,说: 你的配置指定了去合并(merge)远端的'master',但没有获取(fetch)到这个引用(ref).

然后各种测试,各种折腾,总算发现了一点规律. 如果 GitHub 在线仓库只有一个分支, 也就是 master 时, Pull 拉取就不报错, 如果在线的远端仓库有多个分支,如 master 加上 gh-pages 时,一拉取就报这个错. 但使用 git 命令行就没有这个问题. 那么问题来了, 肯定是 TortoiseGit 的哪里配置不对.

想去想来,突然想在 局部仓库的配置文件中修改下, 先看看会报错的这种配置:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = https://github.com/cncounter/translation.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin
    merge = refs/heads/master
[remote]
    pushdefault = origin
[credential]
    helper = store

查看方法:

  • 打开Git项目根目录, 找到 .git 文件夹,进去里面编辑 config 这个文件,注意此文件没有后缀.
  • 还可以在项目根目录下点击鼠标右键, 选择 TortoiseGit --> Settings(设置 S), 然后选择左边的 Git --> 右边的 编辑本地.git/config 按钮,即可打开这个文件,如下图所示:

那么,看看一个正常的pull拉取操作会有哪些日志输出呢?

git.exe pull -v --no-rebase --progress "origin" master

From https://github.com/renfufei/asynquence
* branch            master     -> FETCH_HEAD
= [up to date]      master     -> origin/master
Already up-to-date.

成功 (5959 ms @ 2014/11/30 0:11:27)

一对比就发现第一行 git pull ..... 最后面少了一个 master. 于是想着在 config 文件里面加上这个 master 看看行不行.

修改后的配置如下:

[core]
    repositoryformatversion = 0
    filemode = false
    bare = false
    logallrefupdates = true
    symlinks = false
    ignorecase = true
    hideDotFiles = dotGitOnly
[remote "origin"]
    url = https://github.com/cncounter/translation.git
    fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
    remote = origin master
    merge = refs/heads/master
[remote]
    pushdefault = origin
[credential]
    helper = store

需要注意的是,因为远端有多个分支,所以这个配置文件里,相应的就多了一个小节 [branch "master"],而 这个小节下面的 remote = origion, 现在加上 master 变为:

    [branch "master"]
    remote = origin master
    merge = refs/heads/master 

如下图所示:

保存,再次测试,OK,可以正常拉取:

git.exe pull -v --no-rebase --progress "origin" master

From https://github.com/cncounter/translation
* branch            master     -> FETCH_HEAD
= [up to date]      master     -> origin/master
Already up-to-date.

成功 (2246 ms @ 2014/11/30 0:19:25)

注意看到, 在第一行 git.exe pull .... 最后面多出了一个 master:

好了,问题完美解决.[这可能是 TortoiseGit 当前版本的一个 BUG]

总结

有些日子,不适合写代码,也不适合调程序, 但适合填坑, 也许坑填的多了,时间一转,问题就解决了。

补充说明

问题应该是特定版本的Git与TortoiseGit不兼容导致的。我使用的版本信息是:

TortoiseGit 1.8.12.0 (D:\Develop\TortoiseGit\bin\)
git version 1.9.4.msysgit.2 (D:\Develop\Git\bin)

这个就会出问题。好像跟分支多少没关系。

我的办公室电脑的Git版本好像是 1.9.2 还是什么,反正不是1.9.4,就没有问题,也不需要特殊处理。

具体的软件,你可以到这里下载:

http://download.csdn.net/detail/renfufei/9738152

相关文章

  1. 目录
  2. 安装及配置Git
  3. 安装及配置TortoiseGit
  4. Git与TortoiseGit基本操作
  5. MarkDown示例
  6. 解决 TortoiseGit 诡异的 Bad file number 问题
  7. 加入QQ群GitHub家园: 225932282

日期: 2014-11-27

作者: 铁锚: http://blog.csdn.net/renfufei

  • 7
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 14
    评论
TortoiseGit 是一个基于 Windows 系统的 Git 客户端软件,用于在本地管理 Git 仓库。在使用 TortoiseGit 进行分支合并时,有时会出现分支合并冲突,需要解决。 分支合并冲突是指在合并分支时,Git 无法自动合并两个分支的更改,需要手动解决冲突。解决冲突的过程如下: 首先,通过右键点击项目文件夹,选择 TortoiseGit -> Switch/Checkout 进入到所需的合并分支。 然后,右键点击需要合并的分支,选择 TortoiseGit -> Merge 进行分支合并。如果存在冲突,TortoiseGit 会提示合并失败,并生成一个包含冲突的文件。 接下来,双击打开包含冲突的文件,在文件中会显示具体的冲突内容。冲突的部分会被包裹在类似 <<<<<<< HEAD,=======,>>>>>>> feature_branch 的标记中,其中 HEAD 表示当前分支,feature_branch 表示要合并的分支。 在解决冲突时,需要根据自己的需求对冲突内容进行修改。可以选择保留某个分支的修改,或者手动编写新的代码。修改完成后,保存文件。 最后,右键点击文件,在弹出的菜单中选择 TortoiseGit -> Resolve 进行冲突解决TortoiseGit 会弹出解决冲突的确认对话框,点击 OK 完成解决冲突过程。 解决完所有冲突后,可以继续进行其他操作,如提交合并后的代码或者继续合并其他分支。 总之,TortoiseGit 是一个易于使用的 Git 客户端,可用于实现分支的合并操作。当出现分支合并冲突时,可以按照上述步骤解决冲突,保证代码的统一和正确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值