2011-12-19 39 views
14

Estoy usando git-tfs, y me preguntaba si es posible fusionar dos ramas TFS usando git-tfs. Tengo dos sucursales $/MyCompany/Dev & $/MyCompany/Release-3.3. Release-3.3 se origina en la rama Dev. Ambos se comprueban como diferentes repositorios git usando git tfs.Fusiona dos ramas TFS con git tfs

Me gustaría volver a incorporar los cambios a la rama Dev. ¿Se puede lograr esto con git-tfs o tendré que recurrir a tratar de hacerlo con las herramientas TFS?

+0

¿Por qué con git tfs? –

+2

Preferiría usar el algoritmo de combinación git, ya que parece resolver más conflictos automáticamente. – Ceilingfish

Respuesta

6

me encontré con una impresionante, si hacky manera de hacer esto. Git tfs gestiona su conocimiento de las áreas de TFS utilizando git config. Específicamente 3 atributos por remote; url, repositorio y buscar, por ejemplo:

tfs-remote.default.url=http://tfsserver:8080/tfs/collection 
tfs-remote.default.repository=$/Product/Branch/Component 
tfs-remote.default.fetch=refs/remotes/default/master 

puede agregar otro remote mediante el establecimiento de estas 3 propiedades de nuevo con un nombre diferente a default. Por ejemplo:

tfs-remote.feature_branch.url=http://tfsserver:8080/tfs/collection 
tfs-remote.feature_branch.repository=$/Product/FeatureBranch/Component 
tfs-remote.feature_branch.fetch=refs/remotes/default/feature_branch 

Es posible que deba emitir git tfs bootstrap ahora.

Puede ejecuta:

git tfs fetch -i feature_branch 

Luego fusionar las confirmaciones usando:

git merge tfs/feature_branch 
+1

¿Esto realmente crea una fusión pendiente de cambio en TFS? Si no es así, está ordenando a la siguiente persona que desea realizar una fusión desde un cliente TFS, porque TFS no habrá registrado la fusión como realizada. Por lo tanto, intentará fusionar esos conjuntos de cambios nuevamente. (Es cierto que los conflictos serán bastante triviales, pero aún así podrían ser molestos). –

+0

Tiene razón, este mecanismo causaría problemas si hubiera más de un usuario fusionando sucursales. Pude haber encontrado una mejor solución aquí: http://stackoverflow.com/a/7334268/58991 – Ceilingfish

+0

¿Alguien sabe si git-tf (no git-tfs) permite este tipo de fusión? ¿El checkin ocurre como una fusión o simplemente como un código nuevo? –

-1

No soy un usuario de git-tfs, pero he hecho esto con git-svn en el pasado (que creo que tiene un enfoque similar). Creo que su principal problema es que tiene dos repositorios. Si agrega ambas ramas remotas al mismo repositorio git, entonces debería poder hacer una fusión local, hacer una confirmación local y luego enviar esa confirmación a TFS.

HTH

10

Desde git-TFS 0.16, se pueden manejar ramas TFS (con branch comandos) por lo que ahora puede fácilmente ¡inicie una sucursal existente, cree una y fusione las sucursales de TFS!

https://github.com/git-tfs/git-tfs/blob/master/doc/commands/branch.md#initialize-an-existing-tfs-branch

Y desde el lanzamiento de 0,19, se puede hacer un git merge de 2 ramas TFS y el registro en TFS (con rcheckin) y se comprobará en el que un conjunto de cambios de combinación: https://github.com/git-tfs/git-tfs/blob/master/doc/commands/rcheckin.md#checkin-a-merge-changeset

La única limitación (debido a TFS) es que todas las confirmaciones ya deberían haber sido verificadas en TFS antes de realizar su fusión con git y verificarlo en TFS.

Así que ahora puede fusionarse más fácilmente que con las ramas 2TFS y verificarlas ...

+0

Tenga en cuenta que a partir del 30-Sep-2013, la documentación indica que 'init-branch' está en desuso en favor de' branch --init' –

+0

@DavidGardiner su derecho, pero los 2 son equivalentes (el uno es un envoltorio para el otro) y el comando no se eliminará hasta 0.20 (y el 0.19 aún no se libera). – Philippe

+0

Sin preocupaciones ... Creo que podemos suponer que eres una buena fuente de información de git-tfs :-) –