2012-11-14 6 views
9

Kolejny problem z git 1,8:Git 1.8: push błąd: dst bibl Ref/heads/master otrzymuje od więcej niż jednego src

$ git push 
error: dst ref refs/heads/master receives from more than one src. 
error: failed to push some refs to '[email protected]:xxx.git' 

sugestie? Pracował przed uaktualnieniem do wersji 1.8.

$ git remote -v 
origin [email protected]:xxx.git (fetch) 
origin [email protected]:xxx.git (push) 

Po googling wokół Próbowałem ten pierwszy:

$ git push origin :refs/heads/refs/heads/master 
remote: warning: Allowing deletion of corrupt ref. 
To [email protected]:xxx.git 
- [deleted]   refs/heads/master 

Nie mam pojęcia co to jest i dlaczego jest uszkodzony.

$ git pull 
Already up-to-date. 

$ git push 
error: dst ref refs/heads/master receives from more than one src. 
error: failed to push some refs to '[email protected]:xxx.git' 

nadal nie działa, ale origin master nie działa co najmniej:

$ git push origin master 
Counting objects: 42, done. 
To [email protected]:xxx.git 
3e3fc87..6e11d2a master -> master 

Dobrze, że niby naprawił ale co było przyczyną problemu zacząć? Dlaczego pochodzenie/mistrz nagle został uszkodzony? Co zrobiłem z git push origin :refs/heads/refs/heads/master?

.git/config:

[core] 
repositoryformatversion = 0 
filemode = false 
bare = false 
logallrefupdates = true 
ignorecase = true 
precomposeunicode = false 
[remote "origin"] 
fetch = +refs/heads/*:refs/remotes/origin/* 
url = [email protected]:xx.git 
push = HEAD 
[branch "master"] 
remote = origin 
merge = refs/heads/master 

ls .git/refs/remotes/origin: 

HEAD master refs 

W końcu teraz mam zrobić git push origin master za każdym razem. A najbardziej irytujące jest to, że niektóre repo działają z git push, ale na większości z nich muszę dodać origin master, ale nie rozumiem dlaczego i nie może być tak, że jestem sam mając ten problem.

+0

Czy możesz pokazać zawartość twoich sekcji '.git/config'' [zdalnego "pochodzenia"] 'i' [branch "master"] '? Ponadto, 'ls.git/refs/remote/origin ". –

+0

Proszę bardzo, ale to jest po tym, jak go "naprawiłem" – firedev

+0

Mam ten sam problem, z wyjątkiem tego, że nigdy nie miałem refs/heads/refs/heads/anywhere (wyglądało to zarówno po stronie .git /, jak i po stronie serwera). Mam je w globalnej konfiguracji, jak mi zasugerowano: push.default = dopasowanie remote.origin.push = HEAD – mirabilos

Odpowiedz

0

Po co wyjaśniono w this git old patch (2007!)

Some refs go stale, e.g. when the forkee rebased and lost some objects needed by the fork.
The quick & dirty way to deal with those refs is to delete them and push them again.

However, git-push first would first fetch the current commit name for the ref, would receive a null sha1 since the ref does not point to a valid object, then tell receive-pack that it should delete the ref with this commit name.
delete_ref() would be subsequently be called, and check that resolve_ref() (which does not check for validity of the object) returns the same commit name. Which would fail.

refs/heads/refs/heads/master wygląda oddział niewłaściwie nazwany "bibl/heads/master" (używając nazw dla defining hierachical branch name), a punkty do niczego.
Usunięcie go było właściwym posunięciem.

+0

Nie rozumiem - być może miałem kilka oddziałów, ale po prostu zobowiązuję się do własnego repozytorium, pracując sam na temat projektu. Czy to jakiś błąd przenoszący 1.8? – firedev

+0

@Nick no, Przypuszczam, że był to bardziej niepoprawny stan w zdalnym repo, które wyciągnąłeś i który wprowadził niepoprawną nazwę oddziału '' refs/heads/master' '. Stąd kwestia następnego pchnięcia. – VonC

+0

Kilka dni później wprowadziłem pewne zmiany i nie mogę ponownie naciskać. – firedev

1

Wygląda na to, że masz dodatkową kopię drzewa refs w obrębie refs/remotes/origin. Zauważ, jak w ramach refs/remotes/origin masz dodatkowy katalog refs? Nie wiem, jak do tego doszło, ale to prawdopodobnie powoduje twoje problemy. Ze względu na sposób, w jaki Git obsługuje skróty refs (pozwalając ci zrzucić prefiks, używając tylko przyrostka, takiego jak origin/master), prawdopodobnie jest on zdezorientowany przez posiadanie zarówno refs/remotes/origin/master jak i refs/remotes/refs/remotes/origin/master.

Nie wiem, jak doszło do tego stanu; prawdopodobnie błąd w narzędziu Git, być może błąd literowy, który popełniłeś w pewnym momencie. Poprawiono połowę problemu, usuwając zdalną gałąź, która śledziła tę zduplikowaną gałąź. Byłbym skłonny założyć się, że możesz naprawić drugą połowę problemu i znów możesz zrobić git push, jeśli usuniesz katalog refs/remotes/origin/refs.

+0

Teraz dokonałem pewnych zmian i znów mam ten sam problem. – firedev

+0

@Nick Jakie zmiany wprowadziłeś? Czy usunąłeś '.git/refs/remote/origin/refs', o czym wspomniałem? Pamiętaj, że będziesz musiał zrobić na nim 'rm -r', ponieważ jest to katalog i chcesz usunąć wszystkie jego podkatalogi. –

+0

Mam na myśli, że zmieniłem kod i chciałem naciskać. Nawet 'rm -r' nie pomaga, ale mogę naciskać z git' push origin master': '$ rm -r .git/refs/remote/origin/refs/ $ git push error: dst ref refs/heads/master odbiera z więcej niż jednego src. Błąd : nie udało się przesłać niektórych odwołań do "[email protected]: xx.git" " – firedev

9

Innym sposobem uzyskania tego błędu jest, jeśli przypadkowo wpisać nazwę oddziału, który próbujesz wcisnąć dwukrotnie, tj .:

git push master otherBranch master moreBranches 

Daje ten błąd. Naprawa jest oczywista, gdy już wiesz, że to zrobiłeś:

git push master otherBranch moreBranches 
Powiązane problemy