解决 TortoiseGit 诡异的 Bad file number 问题(转)

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

问题描述

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

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

 

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. git.exe pull -v --no-rebase --progress "origin"  
  2.   
  3. /libexec/git-core/git-sh-setup: line 83: /bin/sed: Bad file number  
  4. From https://github.com/cncounter/translation  
  5. = [up to date]      master     -> origin/master  
  6. D:\Develop\Git/libexec/git-core\git-pull: line 268: /bin/tr: Bad file number  
  7. Your configuration specifies to merge with the ref 'master'  
  8. from the remote, but no such ref was fetched.  
  9.   
  10. git 未能顺利结束 (退出码 1) (3510 ms @ 2014/11/29 23:51:56)  


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

 

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

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

 

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. [core]  
  2.     repositoryformatversion = 0  
  3.     filemode = false  
  4.     bare = false  
  5.     logallrefupdates = true  
  6.     symlinks = false  
  7.     ignorecase = true  
  8.     hideDotFiles = dotGitOnly  
  9. [remote "origin"]  
  10.     url = https://github.com/cncounter/translation.git  
  11.     fetch = +refs/heads/*:refs/remotes/origin/*  
  12. [branch "master"]  
  13.     remote = origin  
  14.     merge = refs/heads/master  
  15. [remote]  
  16.     pushdefault = origin  
  17. [credential]  
  18.     helper = store  

 

 

查看方法:

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

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

 

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. git.exe pull -v --no-rebase --progress "origin" master  
  2.   
  3. From https://github.com/renfufei/asynquence  
  4. * branch            master     -> FETCH_HEAD  
  5. = [up to date]      master     -> origin/master  
  6. Already up-to-date.  
  7.   
  8. 成功 (5959 ms @ 2014/11/30 0:11:27)  


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

 

修改后的配置如下:

 

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. [core]  
  2.     repositoryformatversion = 0  
  3.     filemode = false  
  4.     bare = false  
  5.     logallrefupdates = true  
  6.     symlinks = false  
  7.     ignorecase = true  
  8.     hideDotFiles = dotGitOnly  
  9. [remote "origin"]  
  10.     url = https://github.com/cncounter/translation.git  
  11.     fetch = +refs/heads/*:refs/remotes/origin/*  
  12. [branch "master"]  
  13.     remote = origin master  
  14.     merge = refs/heads/master  
  15. [remote]  
  16.     pushdefault = origin  
  17. [credential]  
  18.     helper = store  

 

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

 

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. [branch "master"]  
  2.     remote = origin master  
  3.     merge = refs/heads/master   


如下图所示:

 

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

 

[plain]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. git.exe pull -v --no-rebase --progress "origin" master  
  2.   
  3. From https://github.com/cncounter/translation  
  4. * branch            master     -> FETCH_HEAD  
  5. = [up to date]      master     -> origin/master  
  6. Already up-to-date.  
  7.   
  8. 成功 (2246 ms @ 2014/11/30 0:19:25)  


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

 

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

总结

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

 

相关文章

 

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

 

日期: 2014-11-29
作者: 铁锚: http://blog.csdn.net/renfufei

 

GitHub版本: https://github.com/cncounter/translation/blob/master/tiemao_2014/GitHelp/05_BadFileNumber.md

 

相关文章
|
10月前
|
API Android开发
Flutter导入第三方包后报错The number of method references in a .dex file cannot exceed 64K
Flutter导入第三方包后报错The number of method references in a .dex file cannot exceed 64K
|
Java 应用服务中间件 Android开发
|
开发工具 git Perl
解决 TortoiseGit 诡异的 Bad file number 问题
此问题,请不要使用 rebase, 下载最新的 TortoiseGit 即可; TortoiseGit-2.3中文版与Git安装包_手册: http://download.csdn.net/detail/renfufei/9738152 问题描述 昨天,以及今天(2014-11-29),使用 TortoiseGit 时碰到了一个诡异的问题.
1258 0
|
5月前
|
算法
Leetcode 313. Super Ugly Number
题目翻译成中文是『超级丑数』,啥叫丑数?丑数就是素因子只有2,3,5的数,7 14 21不是丑数,因为他们都有7这个素数。 这里的超级丑数只是对丑数的一个扩展,超级丑数的素因子不再仅限于2 3 5,而是由题目给定一个素数数组。与朴素丑数算法相比,只是将素因子变了而已,解法还是和朴素丑数一致的。
64 1
|
5月前
|
存储
Leetcode Single Number II (面试题推荐)
给你一个整数数组,每个元素出现了三次,但只有一个元素出现了一次,让你找出这个数,要求线性的时间复杂度,不使用额外空间。
21 0
LeetCode 136. 只出现一次的数字 Single Number
LeetCode 136. 只出现一次的数字 Single Number