Zrozumienie różnicy między gałęziami SVN i Git

44

Jestem użytkownikiem SVN, a teraz uczę się Git.

W SVN zazwyczaj kasuję na moim komputerze lokalnym repozytorium, które obejmuje wszystkie gałęzie w moim projekcie i wybrałem folder dla mojej gałęzi, którą jestem zainteresowany i tam pracuję.

Widzę różnicę przy użyciu Git.

Obecnie klonuję repozytorium i klonuję konkretną gałąź za pomocą gitk.

Folder projektu zawiera tylko treść dla tej gałęzi i nie widzę wszystkich gałęzi jak w SVN, co jest dla mnie trochę mylące.

Nie mogę znaleźć łatwego sposobu, aby zobaczyć wszystkie gałęzie w moim lokalnym repozytorium za pomocą Git.

  • Chciałbym wiedzieć, czy proces Git, który opisałem, jest „standardowy”, a niektórzy, jak poprawny lub coś mi brakuje.

  • Chciałbym również wiedzieć, jak obsługiwać proces, w którym muszę pracować jednocześnie na dwóch gałęziach, na przykład, jeśli muszę na przykład wykonać poprawkę w systemie głównym, ale zachować zawartość innej gałęzi.

  • Jakie są zalecane konwencje nazw, aby na przykład foldery zawierające gałąź były klonowane z repozytorium w Git myproject-branchname?

Radex
źródło
8
Ciekawe - zwykle za pomocą SVN sprawdzasz tylko pień lub gałąź, nad którą pracujesz, ale rozumiem, co masz na myśli.
HorusKol,
20
Masz przerwany przepływ pracy w SVN, teraz próbujesz wykonać kopię lustrzaną w Git (podczas gdy nawet dobry przepływ pracy SVN dotyczy tylko częściowo Git). Najlepsze rozwiązanie - zapomnij o wszystkich nawykach SVN i zacznij od Git od zera
Lazy Badger
6
git clonejest bardziej podobny svnadmin hotcopylub svnrdump+ svnadmin loadniż to jest svn checkout. Dzięki git, nie żądać kawałki z tym repozytorium; kopiujesz całe repozytorium i pracujesz z nim lokalnie, wypychając zmiany z powrotem do repozytorium „źródłowego”, kiedy tylko masz na to ochotę. Git i Subversion używają dwóch całkowicie różnych modeli do kontroli źródła.
chepner
1
odnośnie poprawki, rozważ użyciegit-flow
Bakuriu,
5
@LazyBadger nie jest uszkodzony przepływ pracy, jeśli ułatwia rozwój i zapewnia wartość. Nie ma jednego właściwego sposobu korzystania z oddziałów.
dietbuddha

Odpowiedzi:

67

Jestem użytkownikiem SVN, a teraz uczę się GIT.

Witaj w gangu!

Reedukacja SVN

W SVN I zwykle [...]

Poczekaj chwilę. Podczas gdy CVS i SVN oraz inny tradycyjny (tj. Scentralizowany) system kontroli wersji spełniają (głównie) ten sam cel, co nowoczesne (tj. Rozproszone) systemy kontroli wersji, takie jak mercurial i Git, znacznie lepiej będzie uczyć się Git od podstaw zamiast próba przeniesienia przepływu pracy SVN do Git.

http://hginit.com ( widok na archive.org ) autorstwa Joela Spolsky'ego (jednego z założycieli Stack Exchange) to tutorial dla mercurial, nie Git, ale jest to zerowy rozdział, „Ponowna edukacja Subversion” to przydatne dla osób zmieniających się od SVN do dowolnego rozproszonego systemu kontroli wersji, jak to mówi, co SVN koncepcje trzeba (tymczasowo) un -learn (lub stashz dala , jak użytkownicy Git może powiedzieć), aby być w stanie owinąć wokół głowy rozproszonych koncepcje systemu kontroli wersji i idiomatyczne przepływy pracy ustanowione do pracy z nimi.

Możesz więc przeczytać ten zerowy rozdział i przeważnie po prostu zastąpić słowo „merkurial” słowem „Git”, a tym samym odpowiednio przygotować siebie i swój umysł na Git.

Drobnym drukiem

(Można pominąć ten na razie). Podczas Mercurial i Git są znacznie bardziej podobne do siebie niż do SVN, nie pewne różnice koncepcyjne między nimi, więc niektóre z wypowiedzi i rady w „Subversion reedukacji” staną się technicznie źle przy zamianie „merkurial” na „Git”:

  • Podczas gdy mercurial wewnętrznie śledzi i przechowuje zestawy zmian, Git wewnętrznie śledzi i przechowuje wersje (tj. Stany zawartości drzewa katalogów), tak jak robi to Subversion. Ale oprócz Subversion Git wykonuje scalenia, analizując odpowiednio różnice między każdą zaangażowaną gałęzią i wspólną rewizję przodka (prawdziwe scalenie 3-punktowe), więc wynik jest bardzo podobny do mercurial: Scalanie jest znacznie łatwiejsze i mniej błędów - podatne niż w SVN.
  • Podczas może rozgałęziać w Git przez klonowanie repozytorium (jak to ma w zwyczaju w Mercurial), to jest o wiele bardziej powszechne, aby utworzyć nowy oddział repozytorium Git. (Jest tak, ponieważ gałęzie Git po prostu (przenoszą) wskaźniki do wersji, podczas gdy gałęzie rtęciowe są trwałymi etykietami stosowanymi do każdej wersji. Te stałe etykiety są zwykle niepożądane, więc przepływy pracy rtęci zwykle działają poprzez klonowanie pełnego repozytorium w celu rozbieżnego rozwoju).

W SVN wszystko jest katalogiem (ale niekoniecznie należy traktować go jako taki)

Ale przeszkadzałem ci. Mówiłeś?

W SVN zazwyczaj kasuję na moim komputerze lokalnym repozytorium, które obejmuje wszystkie gałęzie w moim projekcie i wybrałem folder dla mojej gałęzi, którą jestem zainteresowany i tam pracuję.

Jeśli przez to masz na myśli, że sprawdziłeś folder główny repozytorium SVN (lub jakikolwiek inny folder odpowiadający więcej niż trunkjednemu oddziałowi, np. W tradycyjnym układzie repozytorium SVN branchesfolder zawierający wszystkie gałęzie inne niż trunk) Śmiem twierdzić, że prawdopodobnie użyłeś SVN źle (ish), a przynajmniej trochę nadużyłeś faktu, że pień, gałęzie i znaczniki są złożone w jedną (choć hierarchiczną) przestrzeń nazw wraz z katalogami w ramach wersji / bazy kodu.

Chociaż może być kuszące, aby zmienić kilka gałęzi SVN równolegle, to AFAIK, a nie sposób, w jaki SVN ma być używany. (Nie jestem jednak pewien, jakie mogą mieć wady tego rodzaju.)

W Git tylko katalogi są katalogami

Każdy klon repozytorium Git jest repozytorium Git: domyślnie pobiera pełną kopię historii repozytorium źródłowego, w tym wszystkie wersje, gałęzie i znaczniki. Ale to wszystko po naszej stronie: Git przechowuje go w pewnego rodzaju bazie danych opartej na plikach, znajdującej się w ukrytym .git/podfolderze folderu głównego repozytorium .

Ale jakie są nie ukryte pliki widoczne w folderze repozytorium?

Kiedy jesteś git clonerepozytorium, Git robi kilka rzeczy. W przybliżeniu:

  1. Tworzy folder docelowy , aw nim .git/podfolder z „bazą danych”
  2. Przesyła odniesienia (tagi, gałęzie itp.) Do bazy danych repozytorium pochodzenia i tworzy ich kopię w nowej bazie danych, nadając im nieco zmodyfikowaną nazwę, która oznacza je jako „zdalne” odniesienia.
  3. Przenosi wszystkie wersje (tj. Stany drzewa plików), na które wskazują te odniesienia, a także wszystkie wersje, na które te zmiany wskazują bezpośrednio lub tranzytowo (ich rodzice i przodkowie), do nowej bazy danych i przechowuje je, dzięki czemu nowe zdalne odwołania faktycznie wskaż coś, co jest dostępne w nowym repozytorium.
  4. Tworzy lokalny oddział śledzący zdalną wersję odpowiadającą domyślnej gałęzi repozytorium pochodzenia (zwykle master).
  5. Sprawdza ten lokalny oddział.

Ten ostatni krok oznacza, że ​​Git sprawdza poprawkę wskazaną przez tę gałąź i rozpakowuje zapisane tam drzewo plików (baza danych używa pewnych metod kompresji i usuwania duplikatów) do folderu głównego repozytorium. Ten folder główny i wszystkie jego podfoldery (z wyjątkiem specjalnego .gitpodfolderu) są znane jako „kopia robocza” repozytorium. Tam wchodzisz w interakcję z zawartością aktualnie sprawdzonej wersji / oddziału. To tylko zwykłe foldery i pliki. Jednak do interakcji z repozytorium per se („bazą danych” wersji i referencji) używasz gitpoleceń.

Wyświetlanie gałęzi Git i interakcja z gałęziami Git

Obecnie klonuję repozytorium i klonuję konkretną gałąź za pomocą gitk.

Wersja, gitkktórą otrzymałem, nie może klonować repozytoriów. Może tylko przeglądać historię repo i tworzyć oddziały oraz sprawdzać oddziały. Ponadto nie ma „klonowania” gałęzi. Możesz klonować tylko repozytoria.

Czy chodziło Ci o klonowanie repozytorium za pomocą, git clone ...a następnie za pomocą gitk, sprawdzenie oddziału?

Folder projektu zawiera tylko treść dla tej gałęzi i nie widzę wszystkich gałęzi jak w SVN, co jest dla mnie trochę mylące.

[...]

  • Chciałbym wiedzieć, czy proces git, który opisałem, jest „standardowy”, a niektórzy jak poprawny [...]

Tak, to dość standardowe:

  • Sklonuj repozytorium za pomocą git clone ...
  • Sprawdź gałąź, z którą chcesz pracować git checkout ...lub używając narzędzia graficznego, takiego jakgikt

Nie mogę znaleźć łatwego sposobu, aby zobaczyć wszystkie gałęzie w moim lokalnym repozytorium za pomocą GIT.

  • [...] lub brakuje mi smt.

Może:

  • możesz wymienić lokalne oddziały za pomocą git branch
  • możesz wyświetlić zdalne gałęzie z git branch -rlub wszystkie gałęzie zgit branch -a
  • możesz użyć, gitkaby wyświetlić pełną historię (wszystkie tagi oddziałów itp., o których wie Twoje lokalne repozytorium), wywołując ją

    gitk --all
    

Jak pracować z wieloma gałęziami równolegle

  • Chciałbym również wiedzieć, jak obsługiwać proces, w którym muszę pracować jednocześnie na dwóch gałęziach, na przykład, jeśli muszę na przykład wykonać poprawkę w systemie głównym, ale zachować zawartość innej gałęzi.

Istnieją różne scenariusze:

Nowa (jeszcze nie utworzona) zmiana musi zostać zastosowana do wielu gałęzi

Użyj tego przepływu pracy:

  1. Utwórz nową gałąź cz wersji, która już jest w przodkach wszystkich tych gałęzi (np. Wersja, która wprowadziła błąd, gdy zmiana będzie poprawką) lub z wersji, która (w tym wszyscy jego przodkowie) jest dopuszczalna do wprowadzenia w wszystkie te gałęzie.
  2. Wprowadź i zatwierdź zmianę w tym nowym oddziale c.
  3. Dla każdej gałęzi, bktóra wymaga zmiany:

    1. Sprawdź b:

      git checkout b
      
    2. Scal cw b:

      git merge c
      
  4. Usuń oddział c:

    git branch --delete c
    

Konieczna jest istniejąca zmiana w innym oddziale

(... ale bez innych zmian dokonanych w miejscu, w którym ta zmiana się znajduje)

  1. Sprawdź oddział, w którym zmiana jest potrzebna
  2. Wybierz poprawki, które wprowadzają zmiany, w kolejności

W jednej gałęzi achcesz zmienić jeden lub kilka plików do dokładnego stanu, jaki mają w innej gałęzib

  1. Sprawdzić a
  2. Pobierz zawartość pliku z oddziału b:

    git checkout b -- path/to/a/file.txt path/to/another/file.cpp or/even/a/complete/directory/ ...
    

    (Inaczej niż git checkoutbez podania ścieżek, to nie przełączy się na gałąź b, tylko stamtąd pobierze żądaną zawartość pliku. Te pliki mogą lub nie mogą już istnieć a. Jeśli tak, to zostaną zastąpione zawartością b.)

Pracując nad jedną gałęzią, chcesz sprawdzić, jak się sprawy mają w innej gałęzi

Sprawdź oddział, nad którym chcesz pracować.

Następnie, patrząc na drugą gałąź,

  • albo użyj narzędzi graficznych, które pozwalają zobaczyć zawartość aktualnie nie sprawdzonych wersji (np. gitkspróbuj zmienić przyciski opcji z „łatki” na „drzewo”)
  • lub sklonuj repozytorium do katalogu tymczasowego i sprawdź tam drugi oddział
  • lub użyj, git worktreeaby utworzyć oddzielny katalog roboczy tego samego repozytorium (tj. również korzystając z bazy danych w .git/katalogu bieżącego lokalnego repozytorium), w którym możesz sprawdzić tę inną gałąź
das-g
źródło
Do ostatniego przepływu pracy stashjest idealny.
97 CAD
@ CAD97 nie, jeśli chcesz kontynuować pracę nad pierwszym odgałęzieniem, patrząc równolegle na drugi . git stashdobrze jest odsunąć niedokończone prace, np. zmienić gałęzie, a później wrócić.
das-g
1
„przepływy pracy rtęci zwykle działają poprzez klonowanie pełnego repozytorium dla rozbieżnego rozwoju” - Ech, słyszałem o tym, ale większość ludzi, którzy chcą oddziałów Git, po prostu używają zakładek zamiast klonowania całego repozytorium. To o wiele łatwiejsze.
Kevin
@Kevin To może być. Jakiś czas temu ostatnio używałem rtęci, więc może wtedy było inaczej. (A może były to tylko przepływy pracy w społeczności, z której korzystałem.)
das-g
Być może tekst Hg Init „[…], ponieważ naprawdę powinieneś był rozgałęziać się w sposób Mercurial, poprzez klonowanie repozytoriów […]” również powinien zostać zaktualizowany w tym zakresie.
das-g
31

W SVN zazwyczaj kasuję na moim komputerze lokalnym repozytorium, które obejmuje wszystkie gałęzie w moim projekcie i wybrałem folder dla mojej gałęzi, którą jestem zainteresowany i tam pracuję.

O ile nie przejrzysz katalogu powyżej pnia, w Subversion na ogół nie masz wszystkich gałęzi dostępnych lokalnie. W Git wszystkie treści (zatwierdzenia, wiadomości, gałęzie itp.) Są zawsze klonowane do każdej kopii.

Obecnie klonuję repozytorium i klonuję konkretną gałąź za pomocą gitk.

Niemożliwe, patrz wyżej. Możesz git checkout branch-name, ale nie możesz git clone something branch-name. W Subversion gałęzie są folderami. W Git gałęzie są wskaźnikami do zatwierdzenia.

Nie mogę znaleźć łatwego sposobu, aby zobaczyć wszystkie gałęzie w moim lokalnym repozytorium za pomocą GIT.

Uruchom git branch. Domyślnie pokazuje tylko oddziały lokalne. Służy git branch --remotedo wyświetlania zdalnych oddziałów.

10b0
źródło
4
Hm „Domyślnie pokazuje tylko oddziały lokalne”. wygląda na to, że istnieją inne rodzaje oddziałów, które nie są lokalne. Ale mówisz także: „W Git cała zawartość (zatwierdzenia, wiadomości, gałęzie itp.) Są zawsze klonowane do każdej kopii”. . Uważam to za nieco mylące, ponieważ jeśli wszystkie gałęzie są klonowane do twojej kopii, jakie są te tajemnicze nielokalne gałęzie? Być może zbyt skomplikowane jest udzielanie odpowiedzi w polu komentarza.
rura
2
@pipe Kiedy zatwierdzasz zmiany, robisz to poprzez utworzenie lokalnego zatwierdzenia, które zmienia zatwierdzenie, na które wskazuje gałąź. Jeśli chcesz, aby inni otrzymali te zmiany, musisz je przekazać do zdalnego repozytorium. Powoduje to, że gałąź zdalna wskazuje ten nowy zatwierdzenie. Teraz wszyscy inni mogą stamtąd wyciągnąć te zmiany, w wyniku czego wszyscy otrzymają pełną kopię repozytorium
Frozn
9
@pipe Po pierwsze, możesz w rzeczywistości sklonować tylko gałąź, używając --single-branch(nawet tylko końcówkę z --depth 1). Różnica między lokalnymi i odległymi gałęziami znanymi z git jest jedynie rodzajem etykiety. Zdalne gałęzie są poprzedzone nazwą zdalnego źródła (często origin). Lokalne oddziały nie mają tego prefiksu. Ale w końcu dane są dostępne lokalnie (chyba że zrobiłeś to --single-branchlub coś podobnego). Kiedy biegniesz git checkout $branchnamez gałęzią, dla której nie istnieje gałąź lokalna, ale gałąź zdalna, git automatycznie konfiguruje gałąź lokalną „śledzącą” zdalną.
Jonas Schäfer
„Chyba że przejrzysz katalog powyżej pnia” - z mojego doświadczenia wynika, że ​​jest to dość powszechne, ponieważ znacznie ułatwia scalanie. (Chociaż używamy pojedynczej gałęzi „
aktywnej
1
@Izkata „znacznie ułatwia scalanie”, prawda?
HorusKol,
3

Ponieważ jest to oznaczone tagiem mam nadzieję, że mój brak wiedzy na temat SVN jest pomijalny.

Obecnie klonuję repozytorium i klonuję konkretną gałąź za pomocą gitk.

Klonujesz całe zdalne repozytorium nie tylko określoną gałąź.

Repozytorium najlepiej wyobrażać sobie jako bazę danych, więc tworzysz klon bieżącego stanu zdalnej bazy danych. Ale potem pracujesz nad własną kopią tej bazy danych; jeśli się zgodzisz, zmienisz lokalną bazę danych.

fetchPolecenie służy do utrzymania lokalnej bazy danych w synchronizacji ze zdalnym jeden.

Zwykle z tej lokalnej bazy danych pobierasz oddział do pracy. To nic innego jak wewnętrzny znacznik git, od którego zaczęła się twoja obecna praca.

Załóżmy, że pracujesz nad prostym repozytorium, w którym nie ma żadnej gałęzi master, możesz zajrzeć do .gitfolderu, aby odsłonić „magię”:

Załóżmy, że twoje ostatnie zatwierdzenie (wł. master) Było 182e8220b404437b9e43eb78149d31af79040c66, znajdziesz dokładnie to pod cat .git/refs/heads/master.

Od tego, że rozgałęziasz nową gałąź git checkout -b mybranch, znajdziesz dokładnie ten sam wskaźnik w pliku cat .git/refs/heads/mybranch.

Oddziały są niczym więcej jak „wskaźnikami”. Znacznik „pracujący” nazywa się a HEAD.

Jeśli chcesz wiedzieć, gdzie jesteś HEAD:

cat .git/HEADktóra mówi np. ref: refs/heads/mybranch, która z kolei wskazuje ( cat .git/refs/heads/mybranch) na wartość skrótu zatwierdzenia78a8a6eb6f82eae21b156b68d553dd143c6d3e6f

Rzeczywiste zatwierdzenia są przechowywane w objectsfolderze (sposób, w jaki sam jest tematem).

Folder projektu zawiera tylko treść dla tej gałęzi i nie widzę wszystkich gałęzi jak w SVN, co jest dla mnie trochę mylące.

Nie myl tego working directoryz „bazą danych git” jako całością. Jak powiedziałem powyżej, twój katalog roboczy jest jedynie migawką (być może) podzbioru.

Załóżmy, że masz różne gałęzie, twój katalog roboczy jest przeznaczony do pracy tylko w tej gałęzi (chociaż możesz umieścić pracę stamtąd gdzie indziej).

Zwykle, jeśli chcesz zobaczyć, jakie gałęzie są zdefiniowane dla projektu, masz taką możliwość

  • git branch dla lokalnych oddziałów
  • git branch --remote dla zdalnych oddziałów
  • git branch -a dla obu

(lub git branch -v)

Ponieważ git jest rozproszonym systemem kontroli wersji, nie tylko możliwe, ale i zachęcane jest tworzenie różnych gałęzi lokalnie / zdalnie.

Mój typowy przepływ pracy to:

  • rozgałęzić gałąź funkcji
  • rozgałęziaj z tego gałąź WIP (praca w toku)
  • działaj tak, jak chcesz - nawet jeśli popełniasz po jednej linii; to nie ma znaczenia

Po zakończeniu funkcji:

  • squash / WIPprzerób gałąź (z interaktywnym rebasingiem) = wykonaj z tego pojedynczy zatwierdzenie
  • połącz WIPgałąź z gałęzią funkcji i zaoferuj, że (jeśli pracujesz z github, ta oferta będzie nazywana „żądaniem ściągania”) w celu zintegrowania z gałęzią stabilną (główną).

Chciałbym również wiedzieć, jak obsługiwać proces, w którym muszę wprl na dwóch gałęziach jednocześnie, na przykład, jeśli muszę na przykład wykonać poprawkę na masterie, ale zachować zawartość innej gałęzi.

To zależy od struktury twojego projektu:

Powiedz, że masz stabilnego mistrza. A funkcje są rozwijane tylko z tej stabilnej gałęzi - więc zwykle znajduje się za gałęzią funkcji. Wtedy miałbyś ostatnie zatwierdzenie na masterie, które byłoby rdzeniem gałęzi funkcji.

Następnie dokonałeś zatwierdzenia w gałęzi master i możesz zdecydować, czy połączyć obie gałęzie razem, czy też dokonać zmiany bazy (co jest rodzajem scalenia dla użytkowników z zaawansowanymi potrzebami, że tak powiem).

Lub zawsze możesz wprowadzać zmiany w oddziałach (np. master) I wybierać je w innych oddziałach.

Jakie są zalecane konwencje nazw, aby foldery zawierające gałąź były klonowane z repozytorium w GIT, na przykład myproject-branchname

To zależy od Ciebie.

Zazwyczaj kończy się na nazwie repozytoriów.

Ale zdarzają się sytuacje, gdy nie jest to pożądane:

np. sklonujesz oh-my-zsh z git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zsh Here .oh-my-zshjest wyraźnie nazwany jako cel.

Thomas Junk
źródło
2

Git clone faktycznie klonuje całe repozytorium, ale ustawia katalog roboczy na domyślny (zazwyczaj główny).

Możesz zobaczyć inne gałęzie, git branchaby zobaczyć gałęzie lokalne lub git branch -rzdalne, a następnie git checkoutprzełączyć się na istniejącą gałąź lub utworzyć nową na podstawie bieżącej gałęzi.

Powinieneś przeczytać dokumentację git, aby uzyskać więcej informacji, a Atlassian ma również kilka dobrych artykułów na jej temat.

HorusKol
źródło
0

Gałęzie w git i svn to zasadniczo różne rzeczy.

W svn gałąź (lub tag) to katalog repo.

W git gałąź (lub znacznik) jest wskaźnikiem do zatwierdzenia.

Z svn możesz, jeśli chcesz wykupić katalog główny repo. Oznacza to, że wszystkie gałęzie i znaczniki są sprawdzane jednocześnie. Uważaj, że to nie jest normalny sposób korzystania z SVN.

Git nie jest katalogiem, więc nie ma odpowiednika „sprawdzania katalogu głównego repo”. Istnieje wsparcie dla wielu działających drzew, więc wydaje mi się, że możesz połączyć skrypt, aby sprawdzić każdą gałąź w tym samym czasie, jeśli naprawdę tego chciałeś, ale byłoby to raczej niezwykłe.

Ponadto z SVN istnieje dokładnie jedno repo. Z git każdy programista ma swoje własne repo. Oznacza to, że programiści mogą pracować offline, ale oznacza to również, że różni programiści mogą mieć inne wyobrażenie o tym, co znajduje się w każdej gałęzi.

Ze względu na to, że są katalogami i na podstawie prostego modelu historii liniowej svn, gałęzie svn mają solidne historie. Jeśli chcesz wiedzieć, co było na oddziale x w dniu y, możesz łatwo zadać to pytanie.

Z drugiej strony gałęzie Git tak naprawdę nie mają historii. Istnieje „reflog”, ale ma on na celu raczej mechanizm odzyskiwania po awarii niż długą historię. W szczególności reflog nie może być odczytany zdalnie i jest domyślnie wyłączony dla zwykłych repozytoriów.

Zatwierdzenia mają oczywiście historie, ale te historie nie są wystarczające, aby odpowiedzieć na pytanie „co było na gałęzi x repozytorium w dniu z”.

Nie mogę znaleźć łatwego sposobu, aby zobaczyć wszystkie gałęzie w moim lokalnym repozytorium za pomocą Git.

Możesz wyświetlić listę wszystkich lokalnych oddziałów, wpisując „git branch”.

Możesz wyświetlić listę wszystkich gałęzi, zarówno lokalnych, jak i zdalnych, używając „git branch -a”

Chciałbym również wiedzieć, jak obsługiwać proces, w którym muszę pracować jednocześnie na dwóch gałęziach, na przykład, jeśli muszę na przykład wykonać poprawkę w systemie głównym, ale zachować zawartość innej gałęzi.

Kilka opcji.

Możesz zatwierdzić zmiany w „innej gałęzi”, przełączyć się na master, aby wykonać tam swoją pracę, a następnie wrócić.

Możesz także utworzyć dodatkowe działające drzewo. Google „git-worktree”, aby uzyskać szczegółowe informacje na temat składni.

Jakie są zalecane konwencje nazw, aby foldery zawierające gałąź były klonowane z repozytorium w Git, na przykład myproject-branchname?

Nie sądzę, że istnieje ustalona konwencja. Wyewidencjonowanie wielu pracujących drzew jednocześnie nie jest regułą.

Peter Green
źródło
2
ta odpowiedź wygląda na niepełną, dlaczego?
komara