GIT:不能推(奇怪的configuration问题)

我正在重新安装Linux Mint。

尝试从任何存储库中推送时出现以下错误:

error: Malformed value for push.default: simple error: Must be one of nothing, matching, tracking or current. fatal: bad config file line 8 in /home/leng/.gitconfig fatal: Could not read from remote repository. 

这很奇怪,因为我肯定有一个支持简单推送行为的版本。

git --version的输出是git version 1.8.3.2

~/.gitconfig的内容:

 [user] name = My Name email = MyEmail@website.com [color] ui = true [push] default = simple 

这是令人毛骨悚然的地方。

如果我将行为更改为matching (或者nothingtrackingcurrent ,那么尝试推送),我会得到相同的错误消息。 这怎么可能? 它以某种方式cachingconfiguration? 我甚至尝试重新启动。 我甚至尝试从系统中彻底清除GIT(并删除~/.gitconfig ),然后重新安装它。

如果我完全从.gitconfig文件中删除[push]部分(或者如果我完全删除文件),然后尝试推送,那么我得到这个:

 Git 2.0 from 'matching' to 'simple'. To squelch this message and maintain the current behavior after the default changes, use: git config --global push.default matching To squelch this message and adopt the new behavior now, use: git config --global push.default simple See 'git help config' and search for 'push.default' for further information. (the 'simple' mode was introduced in Git 1.7.11. Use the similar mode 'current' instead of 'simple' if you sometimes use older versions of Git) error: Malformed value for push.default: simple error: Must be one of nothing, matching, tracking or current. fatal: bad config file line 8 in /home/leng/.gitconfig fatal: Could not read from remote repository. 

…所以它似乎承认我没有select推动行为,但也说我select了不支持的行为。 这到底是怎么回事?

我甚至得到错误,如果我完全删除~/.gitconfig

任何人都可以帮助我与这个巫术吗?

谢谢!

编辑:

这里是一个.git/config文件请求:

 [core] repositoryformatversion = 0 filemode = true bare = false logallrefupdates = true [remote "origin"] url = ssh://{my remote repo} fetch = +refs/heads/*:refs/remotes/origin/* [branch "master"] remote = origin merge = refs/heads/master 

Solutions Collecting From Web of "GIT:不能推(奇怪的configuration问题)"

好吧,我修好了,但是这个方法是绝对的巫术

我尝试通过清除GIT,删除配置文件,重新安装GIT,然后创建本地裸存储库,然后克隆它,然后尝试从那里推入来隔离问题。 非常像这样:

 sudo apt-get purge git-core rm -f ~/.gitconfig sudo apt-get install git-core cd /git mkdir foo cd foo git init --bare cd /var/www git clone /git/foo cd foo touch blah.txt git add -A git config --global user.name "Name" git config --global user.email "user@email.com" git commit -m "Blah" git push 

…相同的确切的错误消息,没有改变那里。 (还有一些严重的巫术。)

然后,我删除了一个没有本地来源的储存库(通过SSH连接到它的原始地址),并在删除之后重新克隆储存库(使用新的git clone ssh://...命令)。

我从克隆命令中得到一个错误:

 remote: Malformed value for push.default: simple remote: Must be one of nothing, matching, tracking or current. 

啊哈! 现在它说remote而不是error 。 所以远程不支持这种行为。 (尽管如此,这并不能解释为什么错误仍然存​​在于只有本地的存储库中。)

于是我用SSH连接到远程服务器,并将git-core更新到最新版本,重新尝试从我的本地机器上克隆版本库,然后运行。

现在,我终于可以git push 。 疯狂地, 这也解决了这个问题,所以我可以完全本地的/var/www/foo git push同样完全本地的 /git/foo (本地原始裸仓库)。 SSH到这个远程服务器,并以某种方式更新它 – WITCHCRAFT – 修复我的本地机器的错误。

为什么地球上完全不同的机器的GIT版本是关于我的。 彻底疯狂。

我有相同的错误消息在git push

对我来说,事实证明,远程用户的混帐是一个旧版本(1.7.2.5),我最近更新了远程~/.gitconfig包括:

 [push] default = simple 

解决方法是从远程的配置中删除这个设置。

由于看起来其他人有这个问题,我在这里找到了一个解决方案,我想我会发布解决方案,为我工作。

简而言之:我找到的解决方案就是在这个页面上 。 显然,最好的解决方案是升级到更新版本的Git(如果可能的话)。 但是,这不是我的选择。 在本地机器上,输入以下命令:

git config -–global push.default upstream

这摆脱Malformed value for push.default: simple我得到了Malformed value for push.default: simple错误。 但是,我不完全确定upstream是做什么的。

我的语境(作比较):我在远程计算机上有一个空的( bare )存储库,在几个“本地”工作站上有几个存储库。 我从远程存储库中取出,做一些工作,然后push我的工作push送到远程存储库。 推/拉是通过SSH完成的。 大多数情况下,在本地机器上工作时,推/拉将导致上述错误。

总之,在修复之前,我在远程机器上有~/.gitconfig文件:

 [user] name = Foo Bar email = FooBarPerson@email.com [diff] external = /Users/foobar/bin/git-diff-cmd.sh [color] diff = auto status = auto branch = auto [push] default = simple 

进入上述命令后,远程机器上的~/.gitconfig文件变为:

 [user] name = Foo Bar email = FooBarPerson@email.com [diff] external = /Users/foobar/bin/git-diff-cmd.sh [color] diff = auto status = auto branch = auto [push] default = upstream 

版本信息:

  • 远程机器(存储库位置):1.9.4
  • 我的笔记本电脑:1.8.5.2(Apple Git-48)
  • 我工作的其他电脑:1.7.7.4

以下是另一个可能对某些人有用的网站: http : //www.lorrin.org/blog/2011/10/03/argumentless-git-pull-and-git-push/comment-page-1/