¿Cómo crear un nuevo compromiso fuera de una revisión anterior?

Soy nuevo en el bazar, pero estoy muy familiarizado con Git. Estoy tratando de entender lo básico.

Supongamos que tengo una sucursal cuyo historial se parece a esto:

* 3 bar | * 2 foo | * 1 initial commit 

Tengo una serie de parches que quiero convertir en commits, pero están basados ​​en una revisión anterior. Quiero crear los commits fuera de la revisión anterior y luego fusionar los resultados nuevamente. El gráfico resultante debería verse así:

 * 4 merge |\ | * 2.1.3 apply patch #3 | | | * 2.1.2 apply patch #2 | | | * 2.1.1 apply patch #1 | | * | 3 bar |/ * 2 foo | * 1 initial commit 

¿Cómo hago esto con bzr ?

Con Git, haría algo como esto:

 git checkout -b import-patches master^ for p in 1 2 3; do git apply --index /path/to/"${p}".patch git commit -m "apply patch #${p}" done git checkout master git merge import-patches git branch -d import-patches 

A diferencia de Git, Bzr tiene un model de uso de un directory de trabajo por twig en lugar de utilizar un directory de trabajo por repository (a less que use sucursales ubicadas en forma conjunta). El flujo de trabajo básico para su ejemplo es más o less el mismo:

Primero, ramifique la twig actual a un nuevo directory ../import-patches . Puede usar numbers negativos de revisión o la last:n notación para referirse a revisiones comenzando desde el encabezado de una twig (o use el número de revisión directamente):

 bzr branch . ../import-patches -r last:2 

Luego, vaya al nuevo directory de sucursales y aplique sus parches (el parche bzr puede necesitar la opción de -p/--strip ):

 pushd ../import-patches for p in 1 2 3; do bzr patch /path/to/"${p}".patch bzr commit -m "apply patch #${p}" done 

Ahora, regrese a su directory de sucursal original y fusione. Tendrá que confirmar la fusión en un paso separado:

 popd bzr merge ../import-patches bzr commit 

Tenga en count que cada twig tendrá un repository independiente, a less que configure un repository compartido con bzr init-repo . Un repository compartido es solo un directory con datos de revisión almacenados en su subdirectory .bzr y otros subdirectorys que contienen twigs individuales (incluidos los subdirectorys nesteds); esas twigs almacenarán todas las revisiones comunes en el repository compartido. Si está familiarizado con git-new-workdir , esto es similar al repository principal que es un repository de Git sin un tree de trabajo, y cada subdirectory es un tree de trabajo inicializado con git-new-workdir y asociado a una twig separada.

Las sucursales coubicadas le permiten tener múltiples sucursales en el mismo directory; esto requiere el plugin colo para Bzr 2.5.x; las sucursales coubicadas se supone que son una característica central para 2.6, pero pueden no ser completamente estables todavía.