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.
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.
Odpowiedzi:
Jeśli chcesz zduplikować wszystkie obiekty z głównego repozytorium, zrób to wewnątrz głównego repozytorium:
git push --all <url-of-bare-repo>
Alternatywnie, wykonaj pobieranie wewnątrz samego repozytorium:
git fetch <url-of-main-repo>
Nie możesz zrobić pull, ponieważ pull chce się połączyć, z HEADczym nie ma gołe repozytorium.
Możesz dodać je jako piloty, aby zaoszczędzić sobie pisania w przyszłości:
git remote add <whatever-name> <url-of-other-repo>
Wtedy możesz po prostu to zrobić
git push --all <whatever-name>
lub
git fetch <whatever-name>
w zależności od tego, w jakim repozytorium się znajdujesz. Jeśli <whatever-name>tak origin, 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!
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ć?
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.
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.
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!
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:
git clone --mirror <remote_repo>
Następnie mogłem uruchomić następującą komendę w repozytorium lustrzanym, aby pobrać aktualizacje głównego repozytorium:
git fetch --all
Natknąłem się na to rozwiązanie, czytając Mirror a Git Repository By Pulling
[remote "origin"]sekcji dodaj fetch = +refs/*:refs/*imirror = true
Jedyne rozwiązanie poza odtworzeniem z pomocą git clone --mirrorpochodzi od Gregora :
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
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.
git remote updatewykonanie zadania.
--forcei --pruneodpowiednio do git fetchlinii.
Zarozumiały:
$ git clone --bare https://github.com/.../foo.git
Pobierz za pomocą:
$ git --git-dir=foo.git fetch origin +refs/heads/*:refs/heads/* --prune
Uwaga: --git-dir=foo.gitnie jest wymagane, jeśli najpierw przejdziesz cddo katalogu.
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/*
Po wielu zabawach stwierdziłem, że to działa dla mnie.
Pewnego razu:
git clone --mirror ssh://git@source.address:2000/repo
git remote add remote_site ssh://git@remote_site.address/repo
git config remote.origin.fetch 'refs/heads/*:refs/heads/*'
Za każdym razem, gdy chcę zsynchronizować:
cd /home/myhome/repo.git
git --bare fetch ssh://git@source.address:2000/repo
git fetch ssh://git@source.address:2000/repo
git push --mirror remote_site
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 prostu git fetchi repozytorium zsynchronizuje się ze zdalnym.
Dodaj czyste repozytorium jako repozytorium zdalne, a następnie użyj git push.
U mnie ta kombinacja zadziałała:
git remote add remote_site https://github.com/project/repo.git
git fetch -u remote_site +refs/heads/*:refs/heads/*
git fetch -u remote_site +refs/tags/*:refs/tags/*
git push --mirror
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 )