3

個人の git サーバーから空のリポジトリを複製しました。最初のプッシュ ( push -u origin master) の後、エラーが発生しましたが、中にプッシュしました。

使用しようとするとgit push、次のように表示されます。

共通の参照はなく、指定もありません。何もしない。おそらく、'master' などのブランチを指定する必要があります。致命的: リモート エンドが予期せずハングアップしました エラー: 一部の参照を 'link-top-repository' にプッシュできませんでした

それから私は試しましたgit push origin master

Counting objects: 3, done.
Writing objects: 100% (3/3), 218 bytes, done.
Total 3 (delta 0), 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 inconsistent
remote: error: with what you pushed, and will require 'git reset --hard' to match
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'.

を使用すると問題が発生しgit pullます:

構成では、リモートから ref 'master' とマージするように指定されていますが、そのような ref は取得されませんでした。

.git/config を確認しようとしましたが、正しいようです。

[core]
        repositoryformatversion = 0
        filemode = true
        bare = false
        logallrefupdates = true
        ignorecase = true
[remote "origin"]
        fetch = +refs/heads/*:refs/remotes/origin/*
        url = junior@54blue.com:/repository/regulator
[branch "master"]
        remote = origin
        merge = refs/heads/master
[branc "master"]
        remote = origin

助言がありますか?

4

3 に答える 3

5

個人の git サーバーへの書き込みアクセス権を持っていると仮定すると、現在作業ディレクトリとしてチェックアウトされている非裸のリポジトリとブランチに変更をプッシュしています。

現在の一般的なグッド プラクティスは、常にベア リポジトリにプッシュすることです。それを作成するには、次のようにします。

git init --bare SomeRepo.git

非裸のリポジトリにプッシュすることを主張する場合 (推奨されません)、プッシュ先のブランチが現在チェックアウトされているブランチまたは現在の作業ディレクトリでないことを確認してください。Linux のターミナルや Windows の git bash などのコマンド ライン ツールを開き、リポジトリ ディレクトリ (フォルダ .git があるディレクトリ) に移動して、次のコマンドを実行します。

git branch -v

そのリポジトリの利用可能なすべてのブランチが表示され、現在チェックアウトされているブランチには「*」のマークが付けられます。次に例を示します。

* master        b0bb0b1 some commit message
  development   babbab2 some other commit message
  experimental  bebbeb3 some commit message in experiment

上記の例は、 master が現在チェックアウトされているブランチであることを示しているため、プッシュできませんでした。ただし、開発や実験など、他のブランチにプッシュすることもできます。マスターにプッシュする必要がある場合は、次のコマンドを使用して、現在のディレクトリを他のブランチに変更することで実行できます。

git checkout the_branch_name

これで、現在チェックアウトされているのは上記コマンドで指定したブランチになり、マスターへのプッシュが可能になります。

于 2012-12-06T15:47:29.147 に答える
0

これをファイルの末尾から削除します。

[branc "master"]
        remote = origin

また、開発者が必要とする中央の Git リポジトリはpush、裸のリポジトリである必要があります。エラーログは、あなたのものではないことを示しています。

于 2012-12-06T15:21:12.927 に答える