git pracuje na dwóch gałęziach jednocześnie

168

Mam projekt z wieloma gałęziami.

Chciałbym pracować na kilku gałęziach jednocześnie bez przełączania się z git checkout.

Czy jest jakiś sposób, żebym mógł to zrobić poza skopiowaniem całego repozytorium gdzie indziej?

imię
źródło
możliwy duplikat wielu katalogów roboczych z Gitem?
meagar
1
Git 2.5+ (Q2 2015) będzie to oficjalnie wspierać dzięki nowej komendzie git checkout --to=<path>. Zobacz moją odpowiedź poniżej .
VonC
2
W rzeczywistości polecenie będzie git worktree add <path> [<branch>](Git 2.5 rc2)
VonC

Odpowiedzi:

156

Git 2.5+ (drugi kwartał 2015) obsługuje tę funkcję!

Jeśli masz repozytorium git cool-app, przejdź do root ( cd cool-app), uruchom git worktree add ../cool-app-feature-A feature/A. To sprawdza oddział feature/Aw nim własnego nowego katalogu dedykowanego, cool-app-feature-A.

Zastępuje to starszy skrypt contrib/workdir/git-new-workdir, bardziej niezawodnym mechanizmem, w którym te „połączone” drzewa robocze są w rzeczywistości zapisywane w nowym $GIT_DIR/worktreesfolderze głównego repozytorium (dzięki czemu działają na każdym systemie operacyjnym, w tym Windows).

Ponownie, po sklonowaniu repozytorium (w folderze takim jak /path/to/myrepo), możesz dodać drzewa robocze dla różnych gałęzi w różnych niezależnych ścieżkach ( /path/to/br1, /path/to/br2), jednocześnie mając te drzewa robocze połączone z historią głównego repozytorium (nie ma już potrzeby korzystania z --git-diropcji)

Zobacz więcej w „ Wiele katalogów roboczych z Gitem? ”.

Po utworzeniu drzewa roboczego możesz go przenieść lub usunąć (z Git 2.17+, Q2 2018).

VonC
źródło
2
To powinna być nowa zaakceptowana odpowiedź, ponieważ 2.5.X jest teraz zalecaną wersją, nawet dla Windows i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00
40

Spójrz na $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

prosty skrypt do tworzenia katalogu roboczego, który używa dowiązań symbolicznych do wskazywania istniejącego repozytorium. Pozwala to na posiadanie różnych gałęzi w różnych katalogach roboczych, ale wszystkie z tego samego repozytorium.

Stefan Näwe
źródło
2
Wiem, że to stare, ale czy mógłbyś podać jakieś wyjaśnienie.
dav_i,
@dav_i: Podoba Ci się to ?
Stefan Näwe,
@ StefanNäwe Ah, byłem zdezorientowany - zbyt wcześnie rano ... zaktualizowałem Twoją odpowiedź linkiem.
dav_i,
0

Jak powiedział nasz przyjaciel VonC pięć miesięcy temu, teraz od wersji 2.5.x pojawiła się nowa funkcja, która spełnia swoje zadanie. git workktree .

Społeczność
źródło
Czy to nie to samo, o czym wspomniałem 5 miesięcy temu w mojej odpowiedzi powyżej ?
VonC
Ops. Teraz czuję się okropnie. Nie zwróciłem na to właściwej uwagi. Mój błąd.
0

Git obsługuje wiele drzew roboczych w tym samym czasie. Więcej informacji:

Jednak bardzo trudno jest obsługiwać wiele drzew roboczych za pomocą identyfikatorów. Na przykład jest to żądanie rozszerzenia w JGet (identyfikator zaćmienia) w celu obsługi drzewa roboczego.

Musisz więc ręcznie zarządzać projektem (wiersz poleceń) z wieloma problemami lub pracować z jednym drzewem roboczym w środowisku IDE.

Mostafa
źródło
Na razie ta odpowiedź jest nieprawidłowa. Zaktualizuj odpowiedź.
narendra-choudhary
-2

Niezupełnie, ponieważ Git obsługuje tylko jedną kopię roboczą danych repozytorium w katalogu repozytorium.

Jeśli chcesz zatwierdzać / ściągać do tego samego repozytorium z dwiema różnymi kopiami roboczymi, możesz utworzyć czyste repozytorium i sklonować je do dwóch kopii roboczych .

Za każdym razem, gdy coś skończyłeś, po prostu wypychasz do „głównego” czystego repozytorium.

Kilka wskazówek:

man git-clone

git clone --bare

BastiBen
źródło
3
„Git obsługuje tylko jedną kopię roboczą danych repozytorium” -1 Nieprawda, zobacz odpowiedź na temat git-new-workdir.
sleske
To niezły pomysł. Po prostu sklonuj go dwukrotnie.
Serge Vinogradoff