Pergunta

Eu só comecei a usar Git ao lado Mercurial para me familiarizar com o Git.

Eu uso a extensão mq em Mercurial extensivamente para administrar patches locais, e eu estou procurando um Git equivalente.

Eu deveria usar git branch? Ou existem melhores maneiras de gerenciar patches de locais que permitem facilmente aplicar e remover as manchas?

Obrigado,

Foi útil?

Solução

Verifique a seção "-gerenciamento de patches interface camadas" da Interfaces, Frontends e página Ferramentas em Git Wiki. Não são listados duas interfaces de gerenciamento de patches, mais ou menos equivalente a 'mq' mercuriais extensão :

  • StGIT (Stacked Git), mais velho dos dois, escrito em Python, usa dois instantâneos para representam remendo
  • Culpa (anteriormente 'GQ'), escrito como uma série de scripts bash, série arquivo e os patches (um por arquivo) são armazenados como arquivos de texto simples.
  • pg (Patchy Git) é deprecated , e não mais mantida.

Mas se você não precisa de um uso mais avançado, você pode usar em vez " git rebase --interactive " a patches de reordenamento, squash e de divisão. E para gerir a sua filial de encontro a versão atual do upstream, "rebase git" normalmente seria suficiente.

Outras dicas

Disclaimer: Eu não sou um usuário hg, então eu tenho lido sobre hg, mas não tem muita experiência em primeira mão de usá-lo

.

git oferece várias ferramentas muito poderosas e flexíveis para o gerenciamento de filiais em um estilo 'remendo fila' assim por muitos casos básicos (e até mesmo alguns bastante complexos) de uso, git nativo é suficientemente poderosa.

Normalmente, a maioria dos projetos manter um branch master estável central, que só ganha novos commits e nunca é 'rebobinada' tão commits no branch master são fixos.

Além de tudo isso um mantenedor (ou um desenvolvedor) pode manter um ou mais ramos de fluidos de patches de trabalho em andamento (ou seja commits), que são baseados no ramo estável.

atividades

remendo típica gestão incluem:

rebasing a fila de sistema sobre o mais recente estável ramo - git rebase uso,

duplicar a fila de sistema sobre um velho ramo maintentance - utilização git branch e git rebase,

reordenação manchas na fila -. git rebase --interactive uso (aka git rebase -i) usando um editor de texto para reordenar a fila

manchas esmagando - uso git rebase -i com a abóbora directiva

alterando manchas ou patch cometer mensagens - uso git rebase -i (? Detectar um tema) com a directiva edit

.

Qualquer actividade que altera um remendo de qualquer forma (isto é, o seu conteúdo, descrição ou parentesco) vai criar uma nova comprometer com uma nova ID de cometer para que remendo. O fato de que os antigos commits pode ser jogado fora e substituído regularmente antes de serem promovidos para o branch master estável é a única coisa que lhes uma 'fila de remendo' em vez de um ramo faz, mas esta é uma convenção do projeto ao invés de qualquer diferença física nos dados que compõe os commits. Para git eles são objetos idênticos.

Para promover um patch para um 'real' commit é apenas movendo o patch para a frente da fila e fundindo-lo para o branch master. Depois de mover o remendo para a frente da fila, é da mesma forma como uma submissão normal com base no ramo principal, de modo que apenas a fusão rápida para a frente o ponteiro mestre ramo para apontar para o remendo cometer.

A publicação deste comprometer como um 'estável' remendo mestre é o ato que diz:. Esta é agora uma consolidação que não vai mudar e é parte da história imutável do projeto

Basta usar um ramo e rebase-lo contra a sua filial a montante regularmente. Isto é tanto mais fácil de gerenciar e mais seguro do que usar mq (para o qual eu perdi dados no passado).

Git realmente não fornecer esse recurso em si. Dependendo de seus usos, você pode ser capaz de conviver com "git stash" e / ou ramos, mas vai ser bastante básico. Se as pessoas têm necessidades de gerenciamento de patches mais avançados com git, eles parecem voltar-se para Quilt ou StGit: consulte http: // git.or.cz/gitwiki/PatchManagement

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top