Mam nagie repozytorium, które służy jako centralny sklep dla mojego projektu. Wszyscy programiści robią to, git clone <repo>
aby się z tym podzielić. Kiedy robią klon, otrzymują kasę gałęzi master (chyba że robią git clone -n
), ponieważ repo.git/HEAD
zawiera ref: refs/heads/master
, co czyni ją gałęzią aktywną .
Pytanie brzmi: jak poprawnie zmienić Active Branch ? Mógłbym po prostu zhakować repo.git/HEAD
plik bezpośrednio, ale wydaje się to nieprzyjemne i, no cóż, hakujące.
Próbowałem zrobić git checkout <otherbranch>
w .git
katalogu repo , ale to nie powiodło się, ponieważ nie byłem w drzewie roboczym.
Próbowałem, git update-ref HEAD refs/heads/otherbranch
ale właśnie zaktualizowałem refs / heads / master tak, aby były takie same jak refs / heads / otherbranch (dobra, zrobiłem to w repozytorium fikcyjnym, a nie moim produkcyjnym!)
Próbowałem git update-ref --no-deref HEAD refs/heads/otherbranch
i to prawie działało. Zaktualizował HEAD
plik, ale ustawił go na SHA1 zatwierdzenia wskazanego przez refs/heads/otherbranch
.
Testuję z wersją git 1.7.0.2.msysgit.0
.
Domyślam się, że nie ma sposobu, aby to zrobić git push
, ponieważ zezwolenie wszystkim na zmianę domyślnej gałęzi wydaje się nieco niebezpieczne (!), Ale na pewno jest lepszy sposób na zrobienie tego w .git
katalogu repo niż bezpośrednie włamanie się do HEAD
pliku.
Odpowiedzi:
Jeśli masz dostęp do zdalnego nagiego repozytorium, ten artykuł sugeruje :
jak udokumentowano w
git-symbolic-ref
Jeśli nie masz dostępu do zdalnego repozytorium, zobacz moją poprzednią odpowiedź .
Pamiętaj, że polecenie takie jak
git remote set-head
:nie zmienia domyślnej gałęzi zdalnego repozytorium.
Zmienia tylko oddział zdalnego śledzenia przechowywany w lokalnym repozytorium jako
refs/remotes/<name>/HEAD
nie zmienia
HEAD
się (tylko, tylkorefs/remotes/<name>/HEAD
), stąd potrzebagit symbolic-ref
.Więc
git remote set-head
nie ma tutaj odpowiedzi.git symbolic-ref HEAD
jest, jeśli masz bezpośredni dostęp do zdalnego repozytorium.źródło
git symbolic-ref HEAD refs/heads/mybranch
działało dobrze dla mnie! DZIĘKI! ;)Aby zmienić gałąź, musisz zmienić odniesienie HEAD na gałąź, której chcesz użyć.
Najpierw wypisz wszystkie referencje w czystym repozytorium, wykonując
Następnie znajdź odniesienie dla swojego oddziału, format będzie następujący
refs/heads/<my_branch>
. Następnym krokiem jest sprawdzenie bieżącej referencji, po prostu wpisz:więc wiesz, który jest obecny oddział, a następnie zaktualizuj go w razie potrzeby.
To wszystko. Cieszyć się.
źródło
Jak poprawnie zmienić Active Branch?
status: git checkout w katalogu repozytorium .git zwraca błąd: Operację tę należy uruchomić w drzewie roboczym
wskazówki: po prostu dodaj argument --work-tree
szczegółowy przykład: założenia: goły git na zdalnym serwerze:
na serwerze lokalnym: utwórz oddział w wersji 1.7 (nasz inny oddział)
wersja oddziału git 1.7
Wersja git push origin 1.7
na zdalnym serwerze z repozytorium git bare:
$ cd ~ / bare_git_repository.git
$ git branch
wersja główna 1.7
Jak stwierdzono, następujące polecenie
git Checkout wersja 1.7
powrót
fatal: Ta operacja musi być uruchomiona w drzewie roboczym
Za pomocą następującego polecenia
z powodzeniem zmień aktywnie oddział
$ git branch
mistrz
sprawdź wyniki w następujący sposób
mam nadzieję, że to pomoże
źródło
Ponadto, jeśli nie masz dostępu do samego repozytorium, wykonując polecenie
git remote set-head
i gotoweZobacz poprzednią odpowiedź
źródło
Mam też nagie repozytorium na naszym serwerze i udało mi się z powodzeniem pobrać pliki
do nowego lokalnego repozytorium, mimo że strona zawiera informację, że dotyczy to tylko repozytoriów innych niż zwykłe.
źródło
Porównałem dwa katalogi przed i po złożeniu wniosku
git symbolic-ref HEAD refs/heads/mybranch
i wygląda na to, że zmieniono tylko plik repo.git / HEAD, więc prawdopodobnie bezpieczne jest „zhakowanie” pliku.
źródło