解决 TortoiseGit 诡异的 Bad file number 问题

转自:http://blog.csdn.net/renfufei/article/details/41648061

问题描述

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

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

[plain] view plaincopy

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

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

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

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

[plain] view plaincopy

  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 plaincopy

  1. git.exe pull -v --no-rebase --progress "origin" master
  2. From https://github.com/renfufei/asynquence
  3. * branch            master     -> FETCH_HEAD
  4. = [up to date]      master     -> origin/master
  5. Already up-to-date.
  6. 成功 (5959 ms @ 2014/11/30 0:11:27)

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

修改后的配置如下:

[plain] view plaincopy

  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 plaincopy

  1. [branch "master"]
  2. remote = origin master
  3. merge = refs/heads/master

如下图所示:

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

[plain] view plaincopy

  1. git.exe pull -v --no-rebase --progress "origin" master
  2. From https://github.com/cncounter/translation
  3. * branch            master     -> FETCH_HEAD
  4. = [up to date]      master     -> origin/master
  5. Already up-to-date.
  6. 成功 (2246 ms @ 2014/11/30 0:19:25)

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

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

总结

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

时间: 2024-07-29 21:44:25

解决 TortoiseGit 诡异的 Bad file number 问题的相关文章

TortoiseGit Bad file number 解决方法

作者:zhanhailiang 日期:2015-01-07 直接使用命令行git pull操作正常,如下: D:\vipshop\mstats\mstats-monitor>git pull Updating 5050c42..e8b3bd9 Fast-forward public/css/app.css | 30 ++++++++++++++++++ public/js/page.counts.js | 68 +++++++++++++++++++++++++++++++++--------

Git报错-/libexec/git-core/git-sh-setup: line 83: /bin/sed: Bad file number

问题: Pull出现:/libexec/git-core/git-sh-setup: line 83: /bin/sed: Bad file number.尝试Revert.Clean Up均没有解决.最后决定重新从服务器Clone,发现还是不行. 解决方法: 修改本地Git配制文件 添加master至图中位置,拉取的同时拉取master的目录

OGG-01224 Bad file number

今天在看OGG的日志时.发现例如以下OGG-01224 Bad file number错误.查阅资料才知道port不可用,看了一下mgr的參数,发现是设置的DYNAMICPORTLIST 动态port.为什么还不可用.看看MOS上面咋说的: OGG GoldenGate Extract | Pump Abends with: "TCP/IP Error 9 (Bad File Number)" (文档 ID 1359087.1) 转究竟部 In this Document _afrLo

解决Error: ENOENT: no such file or directory, scandir 'D:\IdeaWork\code-front-jet\node_modules\.npminstall\node-sass\3.7.0\node-sass\vendor'

在使用npm安装node-sass的时候,可能会出现如下的报错: Error: ENOENT: no such file or directory, scandir 'D:\IdeaWork\code-front-jet\node_modules\.npminstall\node-sass\3.7.0\node-sass\vendor' at Error (native) at Object.fs.readdirSync (fs.js:856:18) at Object.getInstalled

SQLite 解决:Could not load file or assembly 'System.Data.SQLite ... 试图加载格式不正确的程序(转)

错误提示如下: Could not load file or assembly 'System.Data.SQLite,Version=1.0.66.0,Culture=neutral,PublicKeyToken=db937bc2d44ff139' or one of its dependencies. 试图加载格式不正确的程序 原因: System.Data.SQLite分X64和X86版本. 一般来说,在64位系统上就应该使用X64版本的,但是这样一来开发工作似乎就繁琐了许多 如果不区分,

生成JNI的DLL时提示找不到jni.h的解决办法Cannot open include file: 'jni.h': No such file or directory

解决办法: 就是到jdk的安装目录下include下把以下相应的文件,复制到vc目录下的include文件夹下 \jdk\include\jni.h \jdk\include\win32\jawt_md.h \jdk\include\win32\jni_md.h 上面主是jdk安装目录下的三个文件,分别复制它们到vc目录下的include文件夹下.如我的安装位置是: D:\Program Files\Microsoft Visual Studio\VC98\Include 你们可以根据自己的安装

解决Hadoop启动报错:File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1

今天启动hadoop时,发现datanode启动不了,查看日志发现出现以下的错误: java.io.IOException: File /opt/hadoop/tmp/mapred/system/jobtracker.info could only be replicated to 0 nodes, instead of 1 at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem

解决SVN Can’t open file ‘/XXX/xxx/db/txn-current-lock’错误

今天用非root账号,用sudo 命令 添加了两个账号,然后重启服务··· 可以正常取出东西,但是不能提交··· 报的错就是 :  不能打开文件“/var/svn/svnrepos/db/txn-current-lock”: 权限不够 查了半天 找到了解决办法,原文链接:http://blog.sina.com.cn/s/blog_7139569d0100woar.html 在Linux环境下安装好SVN服务器后,在Linux环境下可以正常地检出.提交,在Windows PC上把已有的Repos

解决TortoiseGit下载代码每次要输入用户名、密码

解决办法: 方案1: 右键>ortoiseGit → Settings → Git → Credential 设置为 wincred - this repository only 或者 wincred - current Windows user 方案2:在需要更新目录下打开git bash[还未实践] 进行配置 git config  --global user.name 你的目标用户名: git config  --global user.email 你的目标邮箱名; ps:--global