問題描述
昨天,以及今天(2014-11-29),使用 TortoiseGit 時碰到了一個詭異的問題. 卸載,清理註冊表,重裝,重啓,各類折騰之後,仍是不能解決. 可是23.45分一過,忽然靈光一閃,解決了.git
問題是這樣的. 使用命令行的 git push
, git fetch
, git pull
什麼的都沒問題. 可是使用 TortoiseGit 執行拉取(pull ...) 命令時, 就給報錯, 報錯信息以下:github
- 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).ide
而後各類測試,各類折騰,總算髮現了一點規律. 若是 GitHub 在線倉庫只有一個分支, 也就是 master 時, Pull 拉取就不報錯, 若是在線的遠端倉庫有多個分支,如 master
加上 gh-pages
時,一拉取就報這個錯. 但使用 git 命令行就沒有這個問題. 那麼問題來了, 確定是 TortoiseGit 的哪裏配置不對.測試
想去想來,忽然想在 局部倉庫的配置文件中修改下, 先看看會報錯的這種配置:fetch
- [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拉取操做會有哪些日誌輸出呢?url
- 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 看看行不行..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 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
以下圖所示:code
保存,再次測試,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
- Git與TortoiseGit基本操做
- MarkDown示例
- 解決 TortoiseGit 詭異的 Bad file number 問題
- 加入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