4

master ブランチをリモート target:tmp にプッシュするとき

git push tmp master

私はこのメッセージを受け取ります

warning: Duplicated ref: refs/heads/master

プッシュはまだ成功します。

しかし、このメッセージはどういう意味ですか? これに関する詳細なログ情報を見つけるにはどうすればよいですか?

これは私の .git/config です

[core]
  repositoryformatversion = 0
  filemode = false
  bare = false
  logallrefupdates = true
  symlinks = false
  ignorecase = true
  hideDotFiles = dotGitOnly
[remote "origin"]
  fetch = +refs/heads/*:refs/remotes/origin/*
  url = git@github.com:testuser/myproject.git
[branch "master"]
  remote = origin
  merge = refs/heads/master
[remote "tmp"]
  url = git@192.168.1.44:testuser/myproject.git
  fetch = +refs/heads/*:refs/remotes/tmp/*

私のgitバージョンは1.7.11.msysgit.1


show-refls-remote情報

$ git show-ref
1696d17186db41cc70876f76f943e18ea4708ad3 refs/heads/master
3c51688bf27e712001db1b6e9f316748634643c4 refs/remotes/origin/HEAD
3c51688bf27e712001db1b6e9f316748634643c4 refs/remotes/origin/master
1696d17186db41cc70876f76f943e18ea4708ad3 refs/remotes/tmp/master

$ git ls-remote tmp
warning: Duplicated ref: refs/heads/master
1696d17186db41cc70876f76f943e18ea4708ad3        HEAD
1696d17186db41cc70876f76f943e18ea4708ad3        refs/heads/master

$ git ls-remote origin
3c51688bf27e712001db1b6e9f316748634643c4        HEAD
3c51688bf27e712001db1b6e9f316748634643c4        refs/heads/master

git show-refon tmpの出力

$ git show-ref
warning: Duplicated ref: refs/heads/master
1696d17186db41cc70876f76f943e18ea4708ad3 refs/heads/master

packed-refson tmpの内容

# pack-refs with: peeled 
3c51688bf27e712001db1b6e9f316748634643c4 refs/heads/master
3c51688bf27e712001db1b6e9f316748634643c4 refs/heads/master

find .ベアレポでの出力myproject.git。objects フォルダーにはサブフォルダーが多すぎるため、貼り付けません。

$ find .
.
./branches
./packed-refs
./objects
./HEAD
./info
./info/exclude
./config
./description
./refs
./refs/tags
./refs/heads
./refs/heads/master
./hooks
./hooks/commit-msg.sample
./hooks/update.sample
./hooks/pre-commit.sample
./hooks/prepare-commit-msg.sample
./hooks/post-update.sample
./hooks/pre-rebase.sample
./hooks/post-receive
./hooks/pre-applypatch.sample
./hooks/update
./hooks/applypatch-msg.sample
4

1 に答える 1

5

IIRC さん、master という名前の別の ref の作成が何らかの形で終了したことを意味しますが、通常の場所には存在しません。私がこれを数回見たのは、配管コマンドをいじっていて、コマンドが ref ( refs/heads/master) を予期していたときに ref ( ) へのフルパスを提供しなかったためです。まず、リモートでローカル リポジトリを最新の状態にします。

git fetch --all

最初にローカル リポジトリを確認します。

git show-ref | grep -i master

Windows を使用-iしているため、大文字と小文字の区別が問題になる可能性があるため、そこにあります。リストに次のようなものが表示されると思いますrefs/master。アイデアは、2 つの方法で解決できる名前があるということです。名前空間が適切に設定されているため、問題ありませんrefs/remotes/origin/masterrefs/remotes/tmp/master

それでも何も起こらない場合は、リモコンを確認してください。

git ls-remote url://to/remote/repo.git | grep master

問題はローカル リポジトリにあると思われます。ローカル リポジトリの場合、次の方法で参照を削除できますupdate-ref

git update-ref -m 'remove duplicate ref' -d <duplicate ref>

コマンド <duplicate ref>から見つけた余分なものはどこにありますか。ブランチは の下に格納されます。削除しないようご注意くださいshow-refrefs/headsrefs/heads/master

リモートにある場合は、次の方法で重複を削除できるはずです。

git push origin :<duplicate ref>

上記のコマンド <duplicate ref>で見つかった余分なものはどこにありますか。繰り返しますが、ここで注意してください。またはを使用しないでくださいls-remotemasterrefs/heads/master

可能であれば、 と の出力で質問を更新してgit show-refくださいgit ls-remote。また、データを失わないように、コメントで手順を説明することもできます。

パックされた参照が原因であることがわかりました

問題は、packed-refsマスターを参照する行が複数あることです。それがどのようになったのかは完全にはわかりませんが、スライドできるgitのバージョンがあったのではないかと思います。git gc遺言書packed-refsを書き直さなければならないので、あなたのtmpリモコンでそれを行います。

于 2013-04-28T11:58:40.817 に答える