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?



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).


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.



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

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.


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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.