4

将主分支推送到远程目标时:tmp

git push tmp master

我收到这条消息

warning: Duplicated ref: refs/heads/master

push 还是可以成功的。

但这条消息是什么意思?我怎样才能找到有关此的更多详细日志信息?

这是我的 .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-ref在 tmp 上的输出

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

packed-refstmp 上的内容

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

find .裸回购中的输出myproject.git。对象文件夹有太多子文件夹,所以我不粘贴它们。

$ 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,但不在正常位置。有几次我看到这个是因为我弄乱了一个管道命令,并且refs/heads/master在命令需要一个时没有提供到 ref ( ) 的完整路径。首先,让我们使用远程更新您的本地存储库:

git fetch --all

首先检查您的本地存储库:

git show-ref | grep -i master

因为你在 Windows 上,-i所以在那里,区分大小写可能是一个问题。refs/master我怀疑您可能会在列表中看到类似的内容。这个想法是有一个可以通过两种方式解析的名称。refs/remotes/origin/master并且refs/remotes/tmp/master没关系,因为它们的命名空间正确。

如果没有出现任何问题,请检查遥控器:

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

我怀疑问题出在您的本地存储库中。对于本地存储库,您可以通过以下方式删除 ref update-ref

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

<duplicate ref>您从show-ref命令中 找到的多余的在哪里。分支存储在refs/heads. 注意不要删除refs/heads/master

如果它在遥控器上,您应该能够通过以下方式删除重复项:

git push origin :<duplicate ref>

上面的命令 <duplicate ref>找到的多余的在哪里。再次,在这里要小心。不要使用ls-remotemasterrefs/heads/master

git show-ref如果可能,请使用和的输出更新您的问题git ls-remote。此外,我可以在评论中引导您完成它,以帮助确保您不会丢失任何数据。

现在我们看到 packed-refs 是罪魁祸首

所以问题是packed-refs有不止一行提到master。我不完全确定这是怎么回事,但我怀疑有一个版本的 git 允许它滑过。git gc遗嘱packed-refs被重写,所以我就在你的遥控tmp器上做。

于 2013-04-28T11:58:40.817 回答