Code Bye

TortoiseGit 执行拉取Pull时 Bad file number 问题

使用命令行的 git push, git fetch, git pull 什么的都没问题. 但是使用 TortoiseGit 执行拉取(pull …) 命令时, 就给报错, 报错信息 Bad file number  ,详细如下:

  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 的哪里配置不对.

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

  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

 

查看方法:

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

  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 看看行不行.

修改后的配置如下:

  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

 Bad file number 解决方法:

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

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

如下图所示:

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

  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]

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


CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明TortoiseGit 执行拉取Pull时 Bad file number 问题