Czy bezpieczne jest płytkie klonowanie za pomocą --depth 1, Tworzenie commitów i ponowne pobieranie aktualizacji?
Opcja --depth 1
W git clone
:
Utwórz klonshallow z historią skróconą do określonej liczby wersji. Płytkie repozytorium ma wiele ograniczeń (nie można z niego klonować ani pobierać, ani z niego pchać), ale jest odpowiednie, jeśli interesuje Cię Tylko najnowsza Historia dużego projektu o długiej historii i chciałbyś wysyłać poprawki jako łaty.
Ale udało mi się zrobić płytkiego klona, zaangażowanego niektóre zmiany i przesunęły te zmiany z powrotem do (gołego klonu) pochodzenia.
Dla mnie to ma sens-dlaczego nie? kiedy sklonowana głowa jest identyfikowalna w pochodzeniu, a mój commit pojawia się na szczycie, wydaje się, że nie ma powodu. Ale instrukcja mówi co innego.Podoba mi się pomysł płytkiego klonu - np. Drupala core: nie ma mowy, żebym musiał wiedzieć, co się działo w Drupalu 4, gdy zaczynałem od 7. - ale nie chcę strzelić sobie w stopę.
Więc jest to bezpieczne do płytki klon, rozwijać commity w nim, ciągnąć ponownie, aby nadążyć za aktualizacjami z origin?
2 answers
Zauważ, że Git 1.9/2.0 (Q1 2014) usunął to ograniczenie.
Zobacz commit 82fba2b, from (pclouds
):
Teraz, gdy git obsługuje transfer danych z lub do płytkiego klonu, te ograniczenia nie są już prawdziwe.
--depth <depth>::
Utwórz 'płytki' klon z historią skróconą do określonej liczby wersji.
Że wynika z commitów jak 0d7d285, f2c681c i c29a7b8 które wspierają klon, send-pack /receive-pack Z/Z płytkich klonów.
smart-http obsługuje teraz również shallow fetch / clone .
Wszystkie szczegóły są w "shallow.c
: 8 kroków, aby wybrać nowe commity dla .git/shallow
".
Aktualizacja czerwiec 2015: Git 2.5 pozwoli nawet na pobranie pojedynczego commita !
(Ultimate shallow case)
Update Styczeń 2016: Git 2.8 (Mach 2016) oficjalnie dokumentuje praktykę uzyskiwania minimalnej historii.
Zobacz commit 99487cf, commit 9cfde9e (30 Dec 2015), commit 9cfde9e (30 Dec 2015), commit bac5874 (29 Dec 2015) i commit 1de2e44 (28 Dec 2015) by Stephen P. Smith ("`.
(dodany przez Junio C Hamano -- gitster
-- in commit 7e3e80a, 20 Jan 2016)
To jest "Documentation/user-manual.txt
"
A
<<def_shallow_clone,shallow clone>>
tworzy się przez podaniegit-clone --depth
Zamiana.
Głębokość można później zmienić za pomocągit-fetch --depth
switch, lub pełna historia przywrócona za pomocą--unshallow
.Scalanie wewnątrz
<<def_shallow_clone,shallow clone>>
będzie działać tak długo, jak Baza scalania jest w najnowszej historii.
W przeciwnym razie będzie to jak łączenie niepowiązanych historii i może doprowadzić do ogromnych konfliktów.
Ograniczenie to może sprawić, że takie repozytorium nie będzie nadawało się do użycia w scalanie przepływów pracy.
Aby dowiedzieć się więcej o procesie aktualizacji shallow clone, zobacz "Jak zaktualizować git shallow clone?".
Jak skomentował Richard Michael :
Aby uzupełnić historię:
git pull --unshallow
I Olle Härstedt dodaje w komentarzach :
Do zasypania części historii:
git fetch --depth=100
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-28 14:58:28
Zobacz kilka odpowiedzi na moje podobne pytanie why-cant-I-push-from-a-shallow-clone oraz link do ostatniego wątku na liście Gita.
Ostatecznie, pomiar głębokości nie jest spójny między repozytoriami, ponieważ mierzą one na podstawie poszczególnych głowic, a nie (a) twojej głowy, lub (b) zmian, które sklonowałeś/pobrałeś, lub(C) czegoś innego, co miałeś na myśli.
Twardym bitem jest poprawienie własnego przypadku użycia (tj. samokontroli), tak aby rozproszone i dlatego prawdopodobnie rozbieżne transakcje repo nadal będą ze sobą szczęśliwie współpracować.
Wygląda na to, że checkout --orphan
jest właściwym etapem 'set-up' , ale nadal brakuje czystych (tj. prostych, zrozumiałych poleceń jednowierszowych) wskazówek dotyczących kroku "clone". Raczej wygląda na to, że musisz init
repo, skonfigurować remote
gałąź śledzącą (chcesz tylko jedną gałąź?), a następnie fetch
tę pojedynczą gałąź, która wydaje się być długa z większą szansą na błędy.
Edit: dla kroku 'klon' zobacz ta ODPOWIEDŹ
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:53