Komunikat o błędzie pochodzi z builtin/fetch.c#check_not_current_branch()
.
To funkcja przechodzi przez całą drogę z powrotem do commit 8ee5d73, Oct. 2008, git 1.6.0.4
komentarz jest pouczająca:
Niektóre mylące tutoriale zasugerował, że byłby to dobry pomysł, aby sprowadzić do bieżącego oddziału z czymś takim:
git fetch origin master:master
(lub nawet gorzej: ten sam wiersz poleceń z "pull" inste reklama "pobrania").
Chociaż przechowywanie tego, co ma być ciągiem, może być logiczne, zwykle jest to nieprawidłowe, gdy bieżącą gałęzią jest "master
".
To powinno być dozwolone tylko wtedy, gdy (niepoprawne) "git pull origin master:master
" próbuje obejść, podając --update-head-ok
do leżących pod "git fetch
", w przeciwnym razie powinniśmy odmówić, ale gdzieś wzdłuż linii straciliśmy to zachowanie.
Sprawdzanie bieżącego oddziału jest teraz wykonywane tylko w postaci wykonanej w niezarejestrowanych repozytoriach , co stanowi ulepszenie w stosunku do oryginalnego zachowania.
Biorąc pod uwagę, że funkcja check_not_current_branch()
jest called with:
if (!update_head_ok)
check_not_current_branch(ref_map);
Oznacza to git fetch -u origin develop:develop
powinno działać.
-u
--update-head-ok
Domyślnie git sprowadzić odmawia zaktualizować głowę, która odpowiada aktualnej gałęzi. Ta flaga wyłącza czek.
To jest wyłącznie do użytku wewnętrznego do git pull
do komunikowania się z git fetch
i chyba, że wdrażasz własną Porcelanę, której nie powinieneś używać.
Nawet jeśli nie mają używać tej opcji, to jest odpowiedź na swoje początkowe wymagania, dzięki czemu „git fetch origin branch:branch
” pracę na bieżącym gałęzi.
Jeśli chodzi o pochodzenie tej poprawki, follow the discussion there.
Chociaż może to sensu przechowywać co chcesz ciągnąć
czyli fetch
część: przechowuje historię zdalną z zaktualizowanym origin/master
.
Ale jest to szczególnie uszkodzone, gdy bieżący oddział lokalny jest również master
.
Jak wspomniano in this answer:
myślę "git fetch url side:master
" kiedy master
jest obecny oddział i pominęliśmy --update-head-ok
jest zepsuty.
Test kończy się niepowodzeniem przy bieżącym numerze master
.
Nie zaktualizuje również katalogu roboczego i pozostawi indeks tak, jakby usunąć wszystkie elementy.
Czy możesz uczynić jaśniejszym _why_ git, który zapobiega domyślnie 'git fetch origin master: master'? Czuję, że kluczem do zrozumienia tego może być cytat, ale jego znaczenie jest dla mnie niejasne: _ "Chociaż może być sens przechowywanie tego, co chcesz przeciągnąć, zwykle jest ono niepoprawne, gdy bieżąca gałąź jest" master "." _ Co autor ma na myśli przez "przechowywanie tego, co chcesz ciągnąć"? – sleeparrow
@sleeparrow Musiałem wrócić do oryginalnego wątku dla tej poprawki: https://www.spinics.net/lists/git/msg82242.html. Zaktualizowałem odpowiedź. – VonC