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.

Dokumentacja teraz czyta :

--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 podanie git-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.

 254
Author: VonC,
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Ź

 4
Author: Philip Oakley,
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