Czy nie jest możliwe utworzenie somme podfolderu w repozytorium na serwerze?
Jeśli zrobię:
git push origin dev/master
wszystko praca znaleźć
ale jeśli to zrobię
git push origin dev/sub/master
mam to:
error: 'refs/heads/dev/sub' exists; cannot create 'refs/heads/dev/sub/master'
sprawdziłem za pomocą "git branch -r" i bezpośrednio przez ssh, nie ma już utworzonego folderu dev / sub.
Co jest nie tak?
Odpowiedzi:
To nie jest folder, który istnieje, to gałąź . (Cóż, może gdzieś być zaangażowany folder / katalog - a może nie, ponieważ odniesienia są „pakowane” i przestają istnieć jako pliki w katalogach).
b
istnieje, nieb/anything
można utworzyć żadnej gałęzi o nazwie .dev/b
istnieje gałąź ,dev/b/c
nie można jej utworzyć.To jest wewnętrzne ograniczenie gita. W tym konkretnym przypadku zdalny
origin
ma nazwaną gałąźdev/sub
(niezależnie od tego, czy ją masz, czy nie, ważne jest, czy ma ją zdalny). Aby utworzyćorigin
gałąź o nazwiedev/sub/master
, musisz najpierw usunąć gałąź nazwanądev/sub
naorigin
:(Oczywiście usunięcie tej gałęzi może usunąć coś ważnego w tym miejscu, więc upewnij się, że wiesz, co robisz. Ogólnie rzecz biorąc, możesz
git fetch origin
najpierw chcieć przechwycić ichdev/sub
jako swojeorigin/dev/sub
. Możesz wtedy utworzyć lokalną gałąź o nazwiedev/renamed-sub
wskazującej na to samo zatwierdzenie , utwórzdev/renamed-sub
na pilocie, usuń pilotadev/sub
, a następnie utwórzdev/sub/master
na pilocie.)Jeśli możesz zalogować się na zdalnym (systemie, który
origin
jest hostowany), możesz przejść do repozytorium tam i po prostu zmienić nazwę lokalnegodev/sub
oddziału. (Opierając się na komentarzach poniżej, podejrzewam, że istnieje również uszkodzony skrypt do automatycznego wdrażania, który prawdopodobnie powinien zostać naprawiony, aby wdrażać tylko gałęzie „do wdrożenia”, a nie wszystko, co jest przekazywane. Ale zgaduję tutaj.)źródło
release/1.1
irelease/1.2
zrelease/1.1/hofix/prevent-upload-bork
&release/1.1/hotfix/assure-user-of-competence
itp a przewody komunikatów o błędzie tu nikogo (dziękuję), zamiast określeń ograniczenie! Ale dziękuję za proste i jasne wyjaśnienie.refs/tags/foo
irefs/tags/foo/2
, na przykład, nie byłby w stanie tego zrobić: musiałby zaimplementować własny magazyn klucz-wartość. Myślę, że Git i tak będzie zmuszony do implementacji własnego magazynu klucz-wartość, ale nie wiem, czy wtedy usunie to ograniczenie.git checkout -- master
oznacza wyewidencjonowanie plik o nazwiemaster
, a nie nazwa oddziału).Byłem w stanie, w którym nie mogłem nawet pobrać, ponieważ moje repozytorium zawierało informacje o nieistniejących zdalnych oddziałach, których nawet nie sprawdziłem. Rozwiązałem to uruchamiając kombinację (dzięki @torek):
git branch -r
lista lokalnych kopii zdalnych oddziałówgit ls-remote
lista zdalnych oddziałówgit fetch --prune origin
zaktualizować lokalne kopie zdalnych oddziałów ( to właściwie mi nie pomogło )git remote prune origin
usuń informacje o usuniętych oddziałach zdalnych ( to zrobiło )źródło
git remote prune origin
było jedynym poleceniem, które uruchomiłem, aby rozwiązać ten stan błędu. Rzeczywiście myląca wiadomość - w moim przypadku próbowałem wcisnąć "release / 2.6.0" i usunąłem cały katalog 'refs / remotes / origin / release *' - ale git narzekałerror: update_ref failed for ref 'refs/remotes/origin/release/2.6.0': cannot lock ref 'refs/remotes/origin/release/2.6.0': 'refs/remotes/origin/release' exists; cannot create 'refs/remotes/origin/release/2.6.0'
za każdym razem, gdy próbowałem push / pull / fetchDla mnie ->
Błąd =
Rozwiązanie =
źródło
Obecnie akceptowane odpowiedź nie może mi pomóc, bo nie mają ref na pilocie zdalnego repo usunąć - to było czysto na mój lokalny! Więc jeśli jesteś w takiej sytuacji, oto co zrobić:
Oto problem, z którym miałem do czynienia:
Wypróbowałem sugestię zaakceptowanej odpowiedzi, ale otrzymałem to:
Więc ref nawet nie istniał
origin
- najwyraźniej kręcił się gdzieś w moim lokalnym repozytorium. Więc uciekłem$ git remote show me
, który wyprodukował:Który następnie wyjaśnił rozwiązanie:
Dzięki temu problem zniknął:
źródło
git remote prune origin
naprawiłeś. Dzięki!Wypróbuj to polecenie, aby to naprawić:
aby uruchomić szereg zadań porządkowych w bieżącym repozytorium i usunąć niedostępne obiekty (przez wywołanie
git prune
igit fsck --unreachable
).Czytaj więcej:
git help gc
igit help prune
źródło
Jeśli wszystko inne zawiedzie, sprawdź, czy Twój system repozytoriów nie ma ograniczeń dotyczących nazw gałęzi. W moim przypadku można było tworzyć tylko gałęzie zaczynające się od
SD-<number>
. Każde inne nazewnictwo dałoby tylko ogólny:źródło
Powyższy skrypt zarejestruje błędy w XXX-errors.log i naprawi je, generując i automatycznie uruchamiając plik XXX-exist-tags-delete.sh z pliku XXX-errors.log za pomocą następujących poleceń:
źródło
git remote prune origin
naprawił problem dla mnieźródło
Jako użytkownik systemu Windows żadne z dotychczasowych rozwiązań nie rozwiązało problemu. Powodem, dla którego widziałem ten błąd, było to, że (używając nazw gałęzi OP) próbowałem utworzyć oddział,
dev/sub
ale ktoś inny utworzył gałąź o nazwieDev
i jak wszyscy wiemy, system plików Windows nie rozróżnia wielkości liter.Kiedy więc system Windows próbował się rozebrać,
dev/sub
najpierw próbował utworzyć folderdev
, ale nie mógł, ponieważDev
już istniał.Rozwiązaniem było usunięcie
Dev
oddziału lokalnie i zdalnie za pomocągit branch -d Dev && git push origin :Dev
. ZAgit pull
po tym działało dobrze.Kolejna lekcja, nazwy gałęzi powinny zawsze być pisane małymi literami, aby uniknąć tego rodzaju problemów.
źródło
Rozumiem, że to już odpowiedział, ale to nie zadziałało. Nie przejmowałem się lokalnymi zmianami, ponieważ były już przyspieszone, ale miałem problemy z wycofaniem. W moim przypadku zmieniliśmy się w połowie drogi między posiadaniem „poprawki” jako gałęzi na system folderów z folderem nadrzędnym jako „poprawką”.
- poprawka ---- poprawka / 1234_bug ---- poprawka / 3456_bug
Więc otrzymywałem następujący błąd:
Po wyszukaniu podobnych błędów w końcu znalazłem rozwiązanie w wątku dyskusyjnym tutaj .
źródło
źródło
Zmień nazwę
dev/sub
nadev/sub/something
, a następnie możesz utworzyć gałąźdev/sub/master
.źródło