Usar Git con TFS 2017 – Funciona en Visual Studio pero no en Command Line

Recientemente hicimos el cambio a Team Foundation Server 2017 usando Git para nuestros proyectos. Nuestro TFS funciona bastante bien si lo usamos a través de la interfaz web oa través de Visual Studio, pero si intentamos utilizar una herramienta de terceros como Sourcetree, extensiones de Git o incluso la command-line, obtenemos un error: Error de fatal: Authentication failed for https://[path_to_repo] . SSH funciona bien, pero queremos usar HTTPS porque SSH todavía no es compatible con Visual Studio.

He desinstalado git de mi máquina y seguí las instrucciones proporcionadas en este enlace https://www.visualstudio.com/en-us/docs/git/share-your-code-in-git-cmdline , que prácticamente solo dice instala la última versión de git y asegúrate de que Enable Git Cnetworkingential Manager esté habilitado (es). He notado que con git desinstalado de mi máquina, git en Visual Studio todavía funciona, lo que me lleva a creer que está usando su propia versión incrustada de git como lo hace Sourcetree.

Intenté desactivar todas las forms de authentication en IIS en nuestro website TFS para que solo acepte la Autenticación de Windows y el único proveedor sea NTLM, y la Protección extendida esté desactivada.

Nos gustaría seguir utilizando nuestras herramientas git de terceros junto al estudio visual lateral. Visual Studio agrega algunas buenas funcionalidades, pero todavía hay algunas operaciones que preferimos hacer en otras herramientas.

EDIT: pongo la versión incorrecta en el título / publicación. Estamos usando TFS 2017. Me disculpo, no estoy seguro de por qué cometí ese error.

La respuesta resultó ser un error de configuration en el lado del cliente. Por alguna razón, aunque hemos marcado la casilla para habilitar el gestor de cnetworkingenciales de git durante la installation de git, la variable global cnetworkingential.helper=wincnetworking no se configuró en ninguno de nuestros files de configuration. Establecer esa variable permitió que git nos avise y recuerde nuestras cnetworkingenciales.

No estoy seguro si está relacionado, pero el instalador autónomo de Git Cnetworkingential Manager también falla para nosotros en nuestras máquinas. No puede copyr ninguno de los files en nuestro directory de installation de git (C: \ Program Files \ Git). Tuve que habilitar el logging del administrador de cnetworkingenciales de git para ver si estaba fallando porque parecía que estaba teniendo éxito. Abriré un problema con el administrador de cnetworkingenciales de git para ver si pueden resolver esto.

EDITAR: Se ha abierto un error en Git Cnetworkingential Manager para Windows con respecto a la propiedad cnetworkingential.helper . Otro problema relacionado con Git ha salido a la luz también.

La propiedad para usar GCM es cnetworkingential.helper=manager not wincnetworking . Sin embargo, el manager no funcionó en Git v 2.11.0. La authentication NTLM parece ser un problema conocido, al less en el lado GCM de las cosas, y se recomienda que intente cambiar a la versión 2.10.1 de Git. Una vez que bajé la calificación, pude establecer la propiedad antes mencionada como manager y funcionó correctamente.

Intenté crear un nuevo repository local de Git en VS, luego uso la línea de command de git para enviarlo a un proyecto de equipo de git vacío en TFS 2015, no se produjo ningún error, puedes comparar tu paso con el mío:

enter image description here

wincnetworking podría ser más robusto con Git 2.15.x / 2.16 (Q1 2018) con una actualización MinGW.

Ver commit 601e1e7 , commit 3c90bda (30 Oct 2017) por Jakub Bereżański (“) .
(Fusionada por Junio ​​C Hamano – gitster – en commit 55b5d92 , 09 nov 2017)

wincnetworking : manejar el nombre de usuario / contraseña vacíos correctamente

Los nombres de usuario y / o passwords vacías (longitud 0), cuando se guardan en el Administrador de cnetworkingenciales de Windows, vuelven como nulos al leer la cnetworkingencial.

Un caso de uso para tales cnetworkingenciales vacías es con la authentication NTLM, donde el nombre de usuario y la contraseña vacíos instruyen a libcurl para que se autentique usando las cnetworkingenciales del usuario actualmente conectado (inicio de session único) .

Al ubicar las cnetworkingenciales relevantes, haga que el nombre de usuario vacío coincida nulo.
Al enviar las cnetworkingenciales, maneje los valores nulos correctamente.