2012-04-02 16 views
6

Estoy tratando de escribir un script de compilación muy liviano que básicamente obtendrá unos pocos archivos de TF (basado en un número de conjunto de cambios). Luego ejecutaré esos archivos en SQLCMD.Team Foundation Server - TF Obtenga el conjunto de cambios número

estoy usando esto:

tf.exe get c:\tfs\ /version:c2681 /force /recursive 

Sin embargo, esto parece tener todo, no sólo los archivos en el conjunto de cambios # 2681. Me gustaría poder dirigirlo a la raíz del espacio de trabajo de mi tfs, darle un número de conjunto de cambios y hacer que actualice esos pocos archivos específicos. Además, parece estar obteniendo versiones anteriores (tal vez lo que era actual cuando se registró el conjunto de cambios # 2681)?

¿Hay alguna forma de obtener solo esos archivos específicos, SIN necesidad de mencionarlos específicamente en el tf get itemspec?

EDITAR: De hecho, tuve que agregar la opción/force para que hiciera algo. Sin fuerza, ni siquiera parece recuperar del servidor un archivo que eliminé localmente, eso definitivamente está en el conjunto de cambios.

gracias, Sylvia

Respuesta

2

El servidor TFS realiza un seguimiento de lo que cada espacio de trabajo contiene . Cualquier cambio realizado localmente con comandos de cliente que no sean TFS (ya sea tf.exe, Team Explorer u otro cliente) dará lugar a diferencias entre la vista del servidor TFS y lo que realmente existe.

Las opciones de forzar en los distintos clientes simplemente consiguen eliminar todas esas incoherencias (reiniciando de manera efectiva tanto lo que hay en el cliente como lo que el servidor cree que está allí).

Cuando realiza una compilación contra una versión especificada (ya sea fecha, conjunto de cambios o etiqueta), puede obtener todo hasta e incluyendo ese punto en el tiempo, ya sea que no se haya cambiado específicamente en ese punto. Así que obtener

tf get /version:D2012-03-30 

recibirá los cambios realizados en o antes de esa fecha.

Para obtener solo los elementos incluidos en un conjunto de cambios, tendrá que trabajar un poco, usando un comando para obtener una lista del contenido de un conjunto de cambios y analizar que para realizar las acciones correctas (un conjunto de cambios puede incluir más que solo actualizaciones y agrega de archivos).

Me parece que si desea realizar una compilación en cada conjunto de cambios que afecte a una carpeta TFS particular, sería mejor que use TFS Build, que trata de hacer exactamente eso - evite reinventar la rueda - y concéntrese en la parte de compilación (otras soluciones de compilación continua están disponibles).


Esto cambiará con TFS11 espacios de trabajo locales.

Eg. dar el cambio de nombre de una carpeta tomará un trabajo no trivial.

+0

Gracias por los detalles, Richard. Parece que podría necesitar mirar en TFS Build. Pero probablemente por ahora solo haga algo como esto: tf.exe get $/Database/DBEngine/DatabaseName/sp/ProcedureName.sql/version: c2681/force – Sylvia

1

El comando obtendrán todas las fuentes para el conjunto de cambios dado. Por defecto, solo obtendrá los archivos que cree que son diferentes entre su espacio de trabajo y el servidor. Sin embargo, al usar la opción/force le pide que obtenga todo, independientemente del estado en el que cree que está su espacio de trabajo (que es mucho más lento pero tiene el beneficio de garantizar que su espacio de trabajo esté completamente sincronizado con el servidor).

Así que solo eliminar/forzar probablemente logre lo que quiere.

edición Como he dicho anteriormente, TFS se consiguen todos los archivos que se piensa son diferentes desde el servidor. Si elimina manualmente un archivo de su área de trabajo local, TFS no sabrá que falta en su versión local, por lo que no pensará que necesita actualizar el archivo. Hay tres soluciones para esto:

  • Utilice/forzar para asegurarse de que todo esté sincronizado, y aguante el proceso muy lento.
  • No modifique archivos en su espacio de trabajo con herramientas que no sean TFS (tf.exe, Visual Studio, herramienta de poder TFS para el shell del explorador). No solo debe eliminar archivos en su disco duro local, si realmente necesitan ser eliminados, y luego eliminarlos en el control de fuente.
  • Conéctese a TFS antes de realizar cambios manualmente. Luego, cuando se conecte, TFS buscará todos los cambios que haya realizado y los agregará a los cambios pendientes para que TFS los conozca.
+0

Gracias por la respuesta rápida Jason! Por favor, mira editar para preguntar. – Sylvia

4

Todo lo mencionado en las publicaciones anteriores de Jason y Richard es correcto, pero me gustaría agregar una cosa que pueda ayudarlo. El equipo de TFS envía un conjunto de herramientas útiles separadas de VS conocidas como las "herramientas de potencia de Team Foundation". Una de las Herramientas de Poder es una utilidad de línea de comando adicional conocida como tfpt.exe. tfpt.exe contiene un comando "getcs" que es equivalente a "get changeset" que parece ser exactamente lo que está buscando.

Si tiene VS 2010, puede descargar las herramientas here. Si tiene una versión anterior, una búsqueda de bing :) le ayudará a encontrar la versión correcta de las herramientas. Si desea leer más sobre el comando getcs, consulte la publicación de Buck Hodges here.

+0

Muchas gracias Taylor ... Definitivamente verificando la funcionalidad de getcs, suena útil. – Sylvia

Cuestiones relacionadas