此問題,請不要使用 rebase, 下載最新的 TortoiseGit 便可;git
TortoiseGit-2.3中文版與Git安裝包_手冊: http://download.csdn.net/detail/renfufei/9738152github
昨天,以及今天(2014-11-29),使用 TortoiseGit 時碰到了一個詭異的問題. 卸載,清理註冊表,重裝,重啓,各類折騰之後,仍是不能解決. 可是23.45分一過,忽然靈光一閃,解決了.ide
問題是這樣的. 使用命令行的 git push
, git fetch
, git 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
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,就沒有問題,也不須要特殊處理。
具體的軟件,你能夠到這裏下載: