with git tfs interop git-tfs git-tf

with - install git tf



Asociar git se compromete con los elementos de trabajo de Team Foundation (4)

Contexto

Una instalación de GitHub Enterprise utilizada para el desarrollo. Cada desarrollador tiene su propio repositorio público, y la organización tiene el repositorio autorativo. Las solicitudes de extracción se utilizan para las revisiones de código, y seguimos el modelo de ramificación git flow de nvie.

Una instalación de TFS utilizada para el seguimiento y la implementación de problemas (la rama de la versión). Reflejamos la rama de lanzamiento en un repositorio de TFS.

Artículos de trabajo

Ahora, la parte difícil es: ¿Cómo asociamos los git commit (que se pueden hacer originalmente en las sucursales públicas de los desarrolladores) con los elementos de trabajo de TF?

Lo que hice

He mirado los siguientes proyectos en busca de ayuda:

He leído referencias para asociar compromisos con elementos de trabajo en ambos proyectos de Git-TF, pero no estoy seguro de qué herramienta usar y cómo hacerlo exactamente.

Estaría bien si tuviera que ejecutar una secuencia de comandos en la rama de la versión. Se compromete a extraer las referencias de elementos de trabajo del mensaje de confirmación y asociarlas a los conjuntos de cambios enviados a TFS. Sin embargo, se preferiría una solución que permita la asociación en metadatos (en lugar de mensajes de confirmación).

¿Cuáles son mis opciones para asociar elementos de trabajo en TFS con confirmaciones de git?


Con Git-TFS , puede asociar elementos de trabajo en un mensaje de confirmación utilizando metadatas (¡e incluso forzar la política de confirmación!).

Se asocian automáticamente cuando la confirmación se realiza en el servidor TFS (si utiliza el comando rcheckin )

¡Y hasta hay un git-note creado en el git commit para tener el título del workitem y un enlace hacia el workitem!

Pero para usar rcheckin en un proceso de sincronización entre git y TFS, ¡antes debes (de manera absoluta) entender cómo funciona!

Cuando vuelva a verificar las confirmaciones de git en TFS, git-tfs, para cada confirmación, cree el conjunto de cambios correspondiente en tfs y obtenga el contenido de este conjunto de cambios para volver a crear una confirmación de git. Por lo tanto, incluso si es (casi) invisible para usted en un flujo de trabajo normal, tiene los git confirmados después del chequeo que no son los mismos que los originales (¡hay una modificación de la historia!).

Eso podría ser un gran problema si se supone que este informe de git sea el repositorio central porque todos los comentaristas tendrán que hacer una rebase. De lo contrario, no debería ser un problema porque es completamente transparente, excepto en casos especiales pero de fácil solución.

No es una solución perfecta ...


Deberías poder hacerlo en el ms git tf:

git tf checkin --associate=27631,27637

Ayuda dice:

usage: git-tf checkin [--help] [--quiet|-q|--verbose] [--message|-m=<msg>] [--metadata|--no-metadata] [--renamemode=<all|justFiles|none>] [--deep|--shallow] [--squash=<commit id>|--autosquash] [--resolve=<workitem id>] [--associate=<workitem id>] [--mentions] [--no-lock] [--preview|-p] [--bypass|--gated|-g=<definition>] [--keep-author|--ignore-author] [--user-map=[<file path>]] Arguments: --help Displays usage information --quiet, -q, --verbose Determines the output detail level --message, -m=<msg> Use the given <msg> as the changeset comment --metadata, --no-metadata Determine whether to include git commit meta data in the changeset comment when checking in deep. If omitted, value provided during configure is used. --renamemode=<all|justFiles|none> The rename mode to use when pending changes. Specify either "all", "justFiles" or "none" (default: justFiles) --deep, --shallow Creates a "deep" check-in, checking in a TFS changeset for each git commit since the latest TFS changeset(requires linear history or "--squash" or "--autosquash"), or "shallow", checking in a single changeset for all commits.If omitted, the depth value provided during clone or configure is used. --squash=< commit id>, --autosquash Specifies how check in should operate in the deep mode if one commit has more than one parent --resolve=< workitem id> ID of the TFS work item to resolve during check-in --associate=< workitem id> ID of the TFS work item to associate during check-in --mentions Add references in the commit comments for any work items linked to the corresponding changeset. --no-lock Does not take a lock on the server path before committing (dangerous) --preview, -p Displays a preview of the commits that will be checked in TFS --bypass, --gated, -g=<definition> Bypass gated check-in or specify a gated build<definition> to use --keep-author Use the commit author as the changeset owner when checking in deep.The commit author should be known to TFS either by his name or e-mail address.To use this option you should be either a TFS project administrator or have the "Check in other users'' changes" permission. --ignore-author Use the current authenticated user as the changeset owner. --user-map=[< file path >] Specifies an absolute or relative path to a file providing mapping between Git repository commit authors and TFS user identities. (default: ./USERMAP) To generate a template mapping file, run the checkin command in preview mode with the --keep-author and --deep options specified. Creates a check-in of the changes in the current master branch head, provided it is parented off a commit converted from a TFS changeset.


Si usa # en su mensaje de confirmación de git como en git commit -m''fixes # 123 ''TFS agregará automáticamente la confirmación como un elemento vinculado en el artículo de trabajo especificado.


Sin tener mucha información sobre esas herramientas de Git-TFS, tenga en cuenta que puede agregar metadatos en cualquier momento ( sin cambiar el historial / SHA1 del repositorio) agregando notas.

Ver git notes (o Consejo de la semana de Git: Notas de Git ).

Al agregar esa información en un "espacio de nombres de nota" dedicado, puede almacenar / recuperar rápidamente una información como una referencia de elemento de trabajo de la nota asociada a un compromiso Git.