Utworzyłem czyste repozytorium, aby opublikować moje repozytorium, ale nie mogę dowiedzieć się, jak zaktualizować gołe repozytorium o bieżący stan głównego repozytorium.
Kiedy zrobiłem git-fetch --allwewnątrz czystego repozytorium, nie widziałem aktualizacji, które wprowadziłem do głównego repozytorium, ale kiedy wypycham je z głównego repozytorium git push --all <url-of-bare-repo>, widzę aktualizacje git log. Przypuszczalnie jest na to proste wytłumaczenie - czy ktoś może to wyjaśnić?
pho79
2
@Thomas - Tak, przez „nie widziałem”, mam na myśli, git logże nie pokazuje tych aktualizacji w samym repozytorium. (Ani też git log --all, ani działające repozytorium utworzone przez sklonowanie samego repozytorium - albo przez, git log --allalbo po prostu patrząc na nowe pliki, które powinny się tam pojawić). To dość szybki test, aby przekonać się sam. Przeważnie jestem po prostu ciekawy, czego mi brakuje.
pho79
73
Jeśli Twoje najdalsze repozytorium to coś w rodzaju github, gdzie nie masz dostępu, nie możesz uruchomić push itp., Możesz to zrobić git fetch -q origin master:masterw swoim lokalnym gołym repozytorium. Spowoduje to pobranie nowych rzeczy z głównej gałęzi githuba i zaktualizowanie do niej lokalnej gałęzi głównej.
Altreus,
4
@Altreus Rzeczywiście master:masterjest to, co jest wymagane, aby przejść HEAD do przodu do zdalnego repozytorium. W moim przypadku z powodu problemu nie mogłem już połączyć się z naszym gołym repozytorium, ponieważ brakowało gita. Dopóki to nie zostanie rozwiązane, wykonuję tunel zwrotny i pobieram do centralnego repozytorium za pomocą: git fetch ssh://localhost:8765/... master:masteri działa to jak urok. Dzięki!
estani
4
@Altreus Jeśli chcesz mieć wszystkie gałęzie, możesz to zrobićgit fetch origin *:*
JBert
71
Utworzyłem repozytorium za pomocą następującego polecenia
git clone --bare <remote_repo>
Następnie próbowałem zaktualizować nagiego klona, używając odpowiedzi Thomasa, ale to nie zadziałało. Aby zaktualizować gołe repozytorium (o co chyba pytał Let_Me_Be), musiałem utworzyć repozytorium lustrzane:
git clone --mirror <remote_repo>
Następnie mogłem uruchomić następującą komendę w repozytorium lustrzanym, aby pobrać aktualizacje głównego repozytorium:
wtedy możesz git fetchi zobaczysz aktualizacje. Dziwne jest to, że przedtem, mimo że jest remoteskonfigurowany, nie ma żadnych gałęzi wymienionych w git branch -a.
To naprawdę mi pomogło! Projekt / repozytorium Capistrano również korzysta z tego ustawienia, aby umożliwić jednostronne git remote updatewykonanie zadania.
Minqi Pan
1
Jeśli pilot ma zaktualizowane lub usunięte gałęzie (i chcesz odzwierciedlić te zmiany), może być konieczne dodanie --forcei --pruneodpowiednio do git fetchlinii.
Chociaż nie jestem świadomy, kiedy to nastąpi, jeśli originnie jest zdefiniowane, zawsze możesz zastąpić originczęść ścieżką / adresem URL do oryginalnego repozytorium. na przykład$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
antak
To jest dokładnie to, czego szukałem. To działało doskonale.
Maxime Rouiller
13
Po wielu zabawach stwierdziłem, że to działa dla mnie.
Trzecia linia ( git config remote.origin.fetch 'refs/heads/*:refs/heads/*') to klucz. Dobra odpowiedź, dzięki!
peterh - Przywróć Monikę
2
Jak powiedział @peterh, linia git config remote.origin.fetch 'refs/heads/*:refs/heads/*'jest odpowiedzią. Po naciśnięciu tego polecenia mogę po prostu git fetchi repozytorium zsynchronizuje się ze zdalnym.
joker
3
Dodaj czyste repozytorium jako repozytorium zdalne, a następnie użyj git push.
Parametr -u do pobierania był konieczny, w przeciwnym razie otrzymuję komunikat o błędzie: „Odmowa pobrania do aktualnej gałęzi refs / heads / master of non-bare repository” (zobacz też https://stackoverflow.com/a/19205680/4807875 )
Odpowiedzi:
Jeśli chcesz zduplikować wszystkie obiekty z głównego repozytorium, zrób to wewnątrz głównego repozytorium:
Alternatywnie, wykonaj pobieranie wewnątrz samego repozytorium:
Nie możesz zrobić pull, ponieważ pull chce się połączyć, z
HEAD
czym nie ma gołe repozytorium.Możesz dodać je jako piloty, aby zaoszczędzić sobie pisania w przyszłości:
Wtedy możesz po prostu to zrobić
lub
w zależności od tego, w jakim repozytorium się znajdujesz. Jeśli
<whatever-name>
takorigin
, możesz to nawet całkowicie pominąć.Zastrzeżenie: nie jestem guru gita. Gdybym powiedział coś złego, chciałbym zostać oświecony!
Aktualizacja: przeczytaj komentarze!
źródło
git-fetch --all
wewnątrz czystego repozytorium, nie widziałem aktualizacji, które wprowadziłem do głównego repozytorium, ale kiedy wypycham je z głównego repozytoriumgit push --all <url-of-bare-repo>
, widzę aktualizacjegit log
. Przypuszczalnie jest na to proste wytłumaczenie - czy ktoś może to wyjaśnić?git log
że nie pokazuje tych aktualizacji w samym repozytorium. (Ani teżgit log --all
, ani działające repozytorium utworzone przez sklonowanie samego repozytorium - albo przez,git log --all
albo po prostu patrząc na nowe pliki, które powinny się tam pojawić). To dość szybki test, aby przekonać się sam. Przeważnie jestem po prostu ciekawy, czego mi brakuje.git fetch -q origin master:master
w swoim lokalnym gołym repozytorium. Spowoduje to pobranie nowych rzeczy z głównej gałęzi githuba i zaktualizowanie do niej lokalnej gałęzi głównej.master:master
jest to, co jest wymagane, aby przejść HEAD do przodu do zdalnego repozytorium. W moim przypadku z powodu problemu nie mogłem już połączyć się z naszym gołym repozytorium, ponieważ brakowało gita. Dopóki to nie zostanie rozwiązane, wykonuję tunel zwrotny i pobieram do centralnego repozytorium za pomocą:git fetch ssh://localhost:8765/... master:master
i działa to jak urok. Dzięki!git fetch origin *:*
Utworzyłem repozytorium za pomocą następującego polecenia
git clone --bare <remote_repo>
Następnie próbowałem zaktualizować nagiego klona, używając odpowiedzi Thomasa, ale to nie zadziałało. Aby zaktualizować gołe repozytorium (o co chyba pytał Let_Me_Be), musiałem utworzyć repozytorium lustrzane:
Następnie mogłem uruchomić następującą komendę w repozytorium lustrzanym, aby pobrać aktualizacje głównego repozytorium:
Natknąłem się na to rozwiązanie, czytając Mirror a Git Repository By Pulling
źródło
[remote "origin"]
sekcji dodajfetch = +refs/*:refs/*
imirror = true
Jedyne rozwiązanie poza odtworzeniem z pomocą
git clone --mirror
pochodzi od Gregora :wtedy możesz
git fetch
i zobaczysz aktualizacje. Dziwne jest to, że przedtem, mimo że jestremote
skonfigurowany, nie ma żadnych gałęzi wymienionych wgit branch -a
.źródło
git remote update
wykonanie zadania.--force
i--prune
odpowiednio dogit fetch
linii.Zarozumiały:
Pobierz za pomocą:
Uwaga:
--git-dir=foo.git
nie jest wymagane, jeśli najpierw przejdzieszcd
do katalogu.źródło
origin
nie jest zdefiniowane, zawsze możesz zastąpićorigin
część ścieżką / adresem URL do oryginalnego repozytorium. na przykład$ git --git-dir=foo.git fetch https://github.com/.../foo.git +refs/heads/*:refs/heads/*
Po wielu zabawach stwierdziłem, że to działa dla mnie.
Pewnego razu:
Za każdym razem, gdy chcę zsynchronizować:
źródło
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
) to klucz. Dobra odpowiedź, dzięki!git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
jest odpowiedzią. Po naciśnięciu tego polecenia mogę po prostugit fetch
i repozytorium zsynchronizuje się ze zdalnym.Dodaj czyste repozytorium jako repozytorium zdalne, a następnie użyj
git push
.źródło
U mnie ta kombinacja zadziałała:
Parametr -u do pobierania był konieczny, w przeciwnym razie otrzymuję komunikat o błędzie: „Odmowa pobrania do aktualnej gałęzi refs / heads / master of non-bare repository” (zobacz też https://stackoverflow.com/a/19205680/4807875 )
źródło