2

これまでに行ったことは次のとおりです。

リモート リポジトリをローカル マシンの新しいディレクトリに正常に複製しました。

次に、作業コピーのファイルを編集してコミットし、リモート リポジトリにプッシュしようとしました。これが私が得たエラーです:

$ git push origin master
root@gohyperspace.com's password:
Counting objects: 9, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (5/5), 456 bytes | 0 bytes/s, done.
Total 5 (delta 4), reused 0 (delta 0)
remote: error: refusing to update checked out branch: refs/heads/master
remote: error: By default, updating the current branch in a non-bare repository
remote: error: is denied, because it will make the index and work tree inconsist
ent
remote: error: with what you pushed, and will require 'git reset --hard' to matc
h
remote: error: the work tree to HEAD.
remote: error:
remote: error: You can set 'receive.denyCurrentBranch' configuration variable to

remote: error: 'ignore' or 'warn' in the remote repository to allow pushing into

remote: error: its current branch; however, this is not recommended unless you
remote: error: arranged to update its work tree to match what you pushed in some

remote: error: other way.
remote: error:
remote: error: To squelch this message and still keep the default behaviour, set

remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'.
To root@gohyperspace.com:/var/www/html
 ! [remote rejected] master -> master (branch is currently checked out)
error: failed to push some refs to 'root@gohyperspace.com:/var/www/html'

これを解決する方法について何かアイデアはありますか? ありがとう。

これが私のローカル Git 構成です。

$ git config -l
core.symlinks=false
core.autocrlf=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
pack.packsizelimit=2g
help.format=html
http.sslcainfo=/bin/curl-ca-bundle.crt
sendemail.smtpserver=/bin/msmtp.exe
diff.astextplain.textconv=astextplain
rebase.autosquash=true
merge.tool=tortoisemerge
gui.recentrepo=C:/Users/Chris/Dev/Projects/html
user.email=JazzcatCB@gmail.com
user.name=CBarnhill
core.repositoryformatversion=0
core.filemode=false
core.bare=false
core.logallrefupdates=true
core.symlinks=false
core.ignorecase=true
core.hidedotfiles=dotGitOnly
remote.origin.url=root@gohyperspace.com:var/www/html
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
user.name=Chris Barnhill
user.email=JazzcatCB@gmail.com
gui.wmstate=normal
gui.geometry=887x427+26+26 171 192
4

2 に答える 2

4

メッセージの長い説明は十分に明確ではありませんか?

次の 3 つのことを行うことができます。

  • 元のレポをむき出しにして、好きなものをプッシュします
  • チェックアウトされたブランチへのプッシュを許可するように config で receive.denyCurrentBranch を設定し、不一致に対処します。
  • ターゲット リポジトリの別のブランチをチェックアウトする

強制プッシュでも機能する可能性がありますが、それはお勧めしません。

于 2013-06-24T13:48:56.443 に答える
4

リモートの master-branch は明らかに裸の状態ではありません。つまり、このブランチにプッシュすると、チェックアウトされた作業コピー (HEAD への参照) の既存のステータスが上書きされます。これは良いことではありません。

これを解決するには、ベア リポジトリを「共同」リポジトリとして使用するか ('git init --bare' でこれを実行)、ブランチを使用します。

git チェックアウト -b myBranch

このブランチで作業を行い、コミットしてください。次に、何も破棄せずに「git push origin myBranch」でブランチをプッシュします。その後、リモート リポジトリのブランチを master にマージまたはリベースできます。

于 2013-06-24T13:49:22.103 に答える