2011-02-16 9 views
20

Estoy acostumbrado a Mercurial mq extension para mantener un conjunto de parches personalizados en la parte superior. Se pueden publicar como un repositorio separado aparte del upstream. Ahora en git uso ramas privadas y rebase, y funciona bien hasta que quiera compartir mis parches con otra persona.¿Cuál es el enfoque de Git para publicar una cola de parches?

En Mercurial, la cola de parches es un repositorio independiente y se puede publicar como de costumbre. Bitbucket incluso ofrece una función de cola de parches para vincularla al repositorio principal. En Git, si publico una rama privada con mis parches, pierdo la capacidad de volver a establecer una base de ellos (a menos que rompa las fusiones), sin embargo, los parches deben actualizarse de vez en cuando.

De another SO question he encontrado, que en el mundo Git StGit se propone como un equivalente para mq. Es similar en uso al mq, pero ¿cómo publico una cola de parches con StGit?

(stg publish parece estar indentado para crear un sólo un nuevo “fusionar amigable” rama, no publicar los parches mismos)

¿Cuáles son otros enfoques para publicar colas de parche en Git?

+6

¿Hay alguna razón por la que no puede simplemente publicar la rama en el entendido de que no está finalizada y puede volver a basarse? – Cascabel

+0

Bueno, romperá las fusiones para cualquiera que intente sacarlo de él, ¿verdad? Entonces, ¿qué sentido tiene publicarlo como un repositorio controlado por la versión, si no permite actualizar sin problemas a la última versión? – sastanin

+2

@jetxee: Ese es el punto: si se puede volver a establecer, no * fusionarlo en ninguna rama importante. Usted busca y trabaja en forma aislada. – Cascabel

Respuesta

7

Resumir las respuestas y los comentarios. Con git hay dos enfoques para publicar pequeñas modificaciones personalizadas sobre aguas arriba del mando a distancia:

  • olvidan rebase, publicar una rama y nuevas fusiones como sea necesario
  • declarar que una rama es rebasado, simplemente rebase y publicar (pro: historial limpio, Contra: puede ser un dolor para ser utilizado continuamente por otra persona, ejemplo: linux-lado)

hasta el momento no parece el flujo de trabajo de cola de parche puro para ser factible con git, pero parece guilt estar muy cerca de mq, incluso nam es de los comandos. No permite una cola de parches controlada por la versión (y publicable).

-1

AFAICT del enlace provisto acerca de Mq, tiene aproximadamente los mismos problemas de publicación que git rebase?

All-in-all Creo que publicar su sucursal, con la advertencia de que es una sucursal de rebase es su mejor opción. Por ejemplo, así es como se mantiene la rama linux-next.

+1

Permite poner parches bajo control de versión en un repositorio _separate_, por lo que el repositorio principal no se ve afectado y el repositorio con parches se puede publicar independientemente por sí mismo. Por lo tanto, no tiene los mismos problemas que 'git rebase', porque no reescribe el historial (de hecho, no lo cambia en absoluto). – sastanin

+0

@jetxee, ok entonces es una manera de anotar la rama "inestable", advirtiendo que es inestable y se está volviendo a basar? Suena como algo bueno tener. – Rawler

+1

es una forma de administrar un conjunto de parches que aún no están comprometidos con la línea principal; es posible aplicar rápidamente (qpush) e inaplicar (qpop), reordenar y cambiarlos. Los parches mismos se administran como archivos simples. Cuando se aplican, toda la cola de parches se ve como una rama al mercurial, cuando no se aplican el repositorio parece que no existían. Es bueno mantener personalizaciones privadas, desarrollar funciones complejas (como con rebase) o experimentar. Stit y culpa parecen hacer lo mismo para Git. – sastanin

1

Considerando los comentarios dados, parece que un enfoque más o menos equivalente al mq de Mercurial estaría usando culpabilidad. A diferencia de mq, la culpabilidad no proporciona directamente una interfaz para un "repositorio de parches", pero puede convertir manualmente el .git/patches/<branch> en un repositorio .git.

0

Hay una extensión git llamada git-series que usa git para mantener una cola de parches versionada. Permite una funcionalidad similar a mq en que puede mantener múltiples series (equivalentes a múltiples colas de hg), parches de refactorización basados ​​en comentarios y comprometer la serie a git. Es el más cercano a mq, pero es lo suficientemente diferente como para que esperes disparar un pie.

Cuestiones relacionadas