(轉)解決 TortoiseGit 詭異的 Bad file number 問題

  此問題,請不要使用 rebase, 下載最新的 TortoiseGit 便可;git

  TortoiseGit-2.3中文版與Git安裝包_手冊: http://download.csdn.net/detail/renfufei/9738152github

問題描述

  昨天,以及今天(2014-11-29),使用 TortoiseGit 時碰到了一個詭異的問題. 卸載,清理註冊表,重裝,重啓,各類折騰之後,仍是不能解決. 可是23.45分一過,忽然靈光一閃,解決了.ide

問題是這樣的. 使用命令行的 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).fetch

  而後各類測試,各類折騰,總算髮現了一點規律. 若是 GitHub 在線倉庫只有一個分支, 也就是 master 時, Pull 拉取就不報錯, 若是在線的遠端倉庫有多個分支,如 master 加上 gh-pages 時,一拉取就報這個錯. 但使用 git 命令行就沒有這個問題. 那麼問題來了, 確定是 TortoiseGit 的哪裏配置不對.url

  想去想來,忽然想在 局部倉庫的配置文件中修改下, 先看看會報錯的這種配置:.net

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

  修改後的配置以下:日誌

[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

相關文章
相關標籤/搜索