git trabalhando em dois ramos simultaneamente


168

Eu tenho um projeto com muitos ramos.

Eu gostaria de trabalhar em vários ramos simultaneamente sem alternar entre eles git checkout.

Existe alguma maneira de fazer isso além de copiar todo o repositório em outro lugar?



1
O Git 2.5+ (Q2 2015) apoiará oficialmente isso com o novo comando git checkout --to=<path>. Veja minha resposta abaixo .
VonC

2
Na verdade, a ordem será: git worktree add <path> [<branch>](GIT 2,5 RC2)
VonC

Respostas:


156

O Git 2.5+ (Q2 2015) suporta esse recurso!

Se você possui um repositório git cool-app, cd para root ( cd cool-app), execute git worktree add ../cool-app-feature-A feature/A. Isso verifica a ramificação feature/Aem seu próprio diretório dedicado,cool-app-feature-A ,.

Isso substitui um script mais antigo contrib/workdir/git-new-workdir, por um mecanismo mais robusto no qual essas árvores de trabalho "vinculadas" são realmente registradas na nova $GIT_DIR/worktreespasta principal do repositório (para que funcione em qualquer sistema operacional, incluindo o Windows).

Novamente, depois de clonar um repo (em uma pasta como /path/to/myrepo), você pode adicionar ruas de trabalho para diferentes ramos em diferentes caminhos independentes ( /path/to/br1, /path/to/br2), mantendo essas árvores de trabalho vinculadas ao histórico principal do repo (não é mais necessário usar uma --git-diropção)

Veja mais em " Vários diretórios de trabalho com o Git? ".

E depois de criar uma árvore de trabalho, você pode movê-la ou removê-la (com Git 2.17+, segundo trimestre de 2018).


2
Esta deve ser a nova resposta aceita, desde 2.5.x agora é a versão recomendada, mesmo para janelas i.imgur.com/oQvUhVl.png git-scm.com/download/win
RAnders00

40

Dê uma olhada em $ GIT_SRC_DIR / contrib / workdir / git-new-workdir .

um script simples para criar um diretório de trabalho que usa links simbólicos para apontar para um repositório existente. Isso permite ter ramificações diferentes em diretórios de trabalho diferentes, mas todas do mesmo repositório.



2
Eu sei que isso é antigo, mas você poderia fornecer alguma explicação, por favor.
Dav_i

@dav_i: Gosta dessa ?
Stefan Näwe

@ StefanNäwe Ah, eu estava confuso - cedo demais ... atualizei sua resposta com o link.
Dav_i


0

Como nosso amigo VonC disse há cinco meses, agora há um novo recurso desde a versão 2.5.x que faz o trabalho. git worktree .


Não é o mesmo que mencionei há 5 meses na minha resposta acima ?
VonC

Ops. Agora estou me sentindo péssimo. Eu não prestei a devida atenção a isso. Foi mal.

0

O Git suporta várias árvores de trabalho ao mesmo tempo. Para mais informações, veja:

No entanto, é muito difícil oferecer suporte a várias árvores de trabalho com IDs. Por exemplo, esta é uma solicitação de aprimoramento no JGet (eclipse ID) para suportar a árvore de trabalho.

Portanto, você precisa gerenciar o projeto manualmente (linha de comando) com muitos problemas ou trabalhar com uma única árvore de trabalho em um IDE.


A partir de agora, esta resposta não está correta. Atualize a resposta.
Narendra-choudhary 02/0318

-2

Na verdade, o Git não suporta apenas uma cópia de trabalho dos dados do repositório dentro do diretório do repositório.

Se você quer se comprometer / puxar para o mesmo repositório com duas cópias diferentes de trabalho, você pode criar um bare repositório e clone-lo para duas cópias de trabalho .

Sempre que você terminar alguma coisa, basta acessar o repositório básico "principal" .

Algumas dicas:

man git-clone

git clone --bare


3
"O Git suporta apenas ter uma cópia de trabalho dos dados do repositório" -1 Não é verdade, veja a resposta sobre git-new-workdir.
Sleske

Que boa ideia. Apenas clone duas vezes.
Serge Vinogradoff
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.