【发布时间】:2014-03-18 22:03:43
【问题描述】:
设置
我编写了一个小脚本来自动提取/提交/推送一些个人数据。该脚本在我的笔记本电脑(版本 1.8.3.2-1)上运行良好,但在我的服务器上,git pull 命令因信号 13 而失败。我正在运行版本 1.7.9.5-1(它们都是 ubuntu,但服务器是12.04.4 LTS vs 13.10 在笔记本电脑上),我使用 ppa:git-core repo 将 git 更新到 1.9.0-1~ppa0~precise1。这仍然给我的脚本带来了同样的问题。复杂的可能是,笔记本电脑通过 ssh 从服务器上的裸仓库拉取,而服务器从同一个裸仓库拉取(到其他地方的工作副本)但不使用 ssh,它只有本地路径。
问题
我可以使用以下命令在终端中重现该问题:
> git pull origin master | read msg; echo ${msg}
First, rewinding head to replay your work on top of it...
error: git-pull died of signal 13
这似乎是获取提交并检查它,但不会更新主分支并将 repo 离开分支:
> git status
# Not currently on any branch.
nothing to commit (working directory clean)
切换回 master 会发出警告:
> git checkout master
Warning: you are leaving 1 commit behind, not connected to
any of your branches:
7220b8f Commit message
If you want to keep them by creating a new branch, this may be a good time
to do so with:
git branch new_branch_name 7220b8f5e2648ae49d3e3095e8bf942dfc41421c
Switched to branch 'master'
我的修复尝试
认为问题是由于 stdout 是管道而 stderr 是 tty,我尝试了:
> git pull origin master 2>&1 | read msg; echo ${msg}
但这根本不做任何事情,并且将${msg}留空。
起作用的是:
> git pull --quiet origin master 2>&1 | read msg; echo ${msg}
> git pull --quiet origin master
> git pull origin master
所有这些都获取提交和更新主机。在某些情况下,我想从 git-pull 捕获输出,这样虽然我可以修复 repo,但我想知道为什么会这样。
那么为什么我不能捕获 git-pull 的输出,为什么它会崩溃,让 repo 处于这种状态?
【问题讨论】: