我正在全新安装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
(或nothing
,tracking
或current
,那么就尝试推送,我也会这样做确切的错误信息。怎么可能?是以某种方式缓存配置?我甚至试过重启。我甚至尝试从系统中彻底清除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.
...所以它似乎都承认我没有选择推送行为,但后来也说我选择了不受支持的行为。到底是怎么回事?
如果我完全删除~/.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
答案 0 :(得分:4)
好的,所以我修复了它,但这个方法绝对是巫术。
我尝试通过清除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
了。疯狂地,这也修复了它,所以我可以 git push
从完全本地/var/www/foo
到也完全是本地的 { {1}}(本地原始裸存储库)。 SSH进入这个远程服务器并以某种方式更新它 - WITCHCRAFT - 修复了我本地计算机的错误。
为什么到目前为止,完全不同的机器GIT版本的完全本地回购关注是......超越我。怎么完全疯了。
答案 1 :(得分:2)
由于其他人似乎遇到了这个问题,我找到了解决方案HERE,我认为我发布了适用于我的解决方案。
简而言之: 我找到的解决方案是this page。显然,最好的解决方案是升级到更新版本的Git(如果可能的话)。但是,这对我来说不是一个选择。在本地计算机上,我输入以下命令:
git config -–global push.default upstream
这摆脱了我遇到的Malformed value for push.default: simple
错误。但是,我并不完全确定upstream
的作用。
我的上下文(为了比较):我在远程计算机上有一个空的(bare
)存储库,我在一对"本地"上有一些存储库。工作站。来自远程存储库的pull
,做一些工作,然后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
版本信息:
这是另一个可能对某些人有用的网站: http://www.lorrin.org/blog/2011/10/03/argumentless-git-pull-and-git-push/comment-page-1/
答案 2 :(得分:2)
我在git push
上收到了相同的错误消息。
对我来说,事实证明远程用户的git是旧版本(1.7.2.5),
我最近更新了远程~/.gitconfig
以包含:
[push]
default = simple
解决方案是从远程配置中删除此设置。