sobre - Git vs Team Foundation Server
tfvc vs git (9)
Después de una investigación entre los profesionales y los contras, la compañía con la que estaba involucrado también decidió ir a TFS. No porque GIT no sea un buen sistema de control de versiones, sino lo más importante para la solución ALM totalmente integrada que ofrece TFS. Si solo la función de control de versión fuera importante, la opción probablemente haya sido GIT. Sin embargo, la curva de aprendizaje GIT empinada para desarrolladores regulares no puede ser subestimada.
Vea una explicación detallada en la entrada de mi blog TFS como una verdadera plataforma de tecnología cruzada .
Presenté a Git a mi equipo de desarrollo, y todos lo odian, excepto yo. Quieren reemplazarlo con Team Foundation Server. Siento que este es un gran paso hacia atrás, aunque no estoy muy familiarizado con TFS. ¿Puede alguien con experiencia comparar el soporte de bifurcación en TFS a Git bifurcado? Además, en general, ¿cuáles son los pros y los contras de TFS? ¿Voy a odiarlo después de usar Git durante unos años?
Encima de todo lo que se ha dicho (
https://.com/a/4416666/172109
https://.com/a/4894099/172109
https://.com/a/4415234/172109
), lo cual es correcto, TFS no es solo un VCS. Una característica importante que proporciona TFS es la funcionalidad de seguimiento de errores integrada de forma nativa. Los conjuntos de cambios están vinculados a problemas y podrían ser rastreados. Se admiten varias políticas para los registros, así como la integración con el dominio de Windows, que es lo que tienen las personas que ejecutan TFS. La interfaz gráfica de usuario estrechamente integrada con Visual Studio es otro punto de venta, que atrae a un desarrollador de mouse y clic inferior al promedio y su administrador.
Por lo tanto, comparar Git con TFS no es una pregunta adecuada. La pregunta correcta, aunque poco práctica, es comparar Git con solo la funcionalidad VCS de TFS. En eso, Git sopla TFS fuera del agua. Sin embargo, cualquier equipo serio necesita otras herramientas y aquí es donde TFS proporciona un destino único.
La diferencia clave entre los dos sistemas es que TFS es un sistema de control de versiones centralizado y Git es un sistema de control de versiones distribuido.
Con TFS, los repositorios se almacenan en un servidor central y los desarrolladores extraen una copia de trabajo, que es una instantánea del código en un momento específico. Con Git, los desarrolladores clonan todo el repositorio en sus máquinas, incluida toda la historia.
Uno de los beneficios de tener el repositorio completo en las máquinas de su desarrollador es la redundancia en caso de que el servidor muera. Otra buena ventaja es que puede mover su copia de trabajo entre revisiones sin tener que hablar con el servidor, lo que puede ser útil si el servidor está inactivo o simplemente no está disponible.
Para mí, la verdadera ventaja es que puede enviar conjuntos de cambios a su repositorio local sin tener que hablar con el servidor o infligir cambios potencialmente inestables en su equipo (es decir, romper la compilación).
Por ejemplo, si estoy trabajando en una gran función, me puede llevar una semana codificarla y probarla por completo. No quiero revisar el código inestable a mitad de semana y romper la compilación, pero ¿qué sucede si me estoy acercando al final de la semana y accidentalmente coloco toda mi copia de trabajo? Si no he estado cometiendo todo el tiempo, corro el riesgo de perder mi trabajo. Eso no es un control de versión efectivo, y TFS es susceptible a esto.
Con DVCS, puedo comprometerme constantemente sin preocuparme por romper la compilación, porque estoy realizando mis cambios localmente . En TFS y otros sistemas centralizados no hay concepto de un check-in local.
Ni siquiera he analizado cuánto mejor es la ramificación y la fusión en DVCS, pero puedes encontrar un montón de explicaciones aquí en SO o a través de Google. Puedo decirle por experiencia que la ramificación y la fusión en TFS no es buena.
Si el argumento de TFS en su organización es que funciona mejor en Windows que en Git, sugeriría Mercurial, que funciona muy bien en Windows: hay integración con Windows Explorer (TortoiseHg) y Visual Studio (VisualHg).
La gente necesita bajar el arma, alejarse de la cornisa y pensar por un minuto. Resulta que hay ventajas objetivas, concretas e innegables para DVCS que harán una GRAN diferencia en la productividad de un equipo.
Todo se reduce a ramificación y fusión.
Antes de DVCS, el principio rector era "Ruega a Dios que no tengas que entrar en la ramificación y la fusión. Y si lo haces, ruega al menos que lo deje ser muy, muy simple".
Ahora, con DVCS, la ramificación ( y la fusión ) ha mejorado mucho, el principio guía es: "Hágalo en un abrir y cerrar de ojos. Le dará muchos beneficios y no le causará ningún problema".
Y eso es un gran refuerzo de productividad para cualquier equipo.
El problema es que, para que la gente entienda lo que acabo de decir y se convenza de que es verdad, primero tienen que invertir en una pequeña curva de aprendizaje. No tienen que aprender Git ni ningún otro DVCS en sí mismo ... solo necesitan aprender cómo Git se ramifica y fusiona. Lea y vuelva a leer algunos artículos y publicaciones de blog, tómelo con calma y siga trabajando hasta que lo vea. Eso podría tomar la mayor parte de 2 o 3 días completos.
Pero una vez que vea eso, ni siquiera considerará elegir un no DVCS. Porque realmente hay ventajas claras, objetivas y concretas para DVCS, y las mayores ganancias están en el área de ramificación y fusión.
Para mí, la principal diferencia es que todos los archivos auxiliares que TFS agregará a su solución (.vssscc) para ''soportar'' a TFS. Hemos tenido problemas recientes con estos archivos que se asignaron a la rama incorrecta, lo que lleva a una depuración interesante ...
Pienso, la afirmación
todos lo odian excepto yo
hace que cualquier discusión sea un desperdicio: cuando continúe usando Git, lo culparán si algo sale mal.
Aparte de esto, para mí, Git tiene dos ventajas sobre un VCS centralizado que aprecio más (como lo describe en parte Rob Sobers ):
- Copia de seguridad automática de todo el repositorio: cada vez que alguien extrae del repositorio central, obtiene un historial completo de los cambios. Cuando se pierde un repositorio: no se preocupe, tome uno de los presentes en cada estación de trabajo.
- Acceso de repositorio fuera de línea: cuando trabajo en casa (o en un avión o tren), puedo ver el historial completo del proyecto, cada registro, sin iniciar mi conexión VPN para trabajar y puedo trabajar como si estuviera trabajando. : checkin, checkout, sucursal, cualquier cosa.
Pero como dije: creo que estás luchando en una batalla perdida: cuando todos odian a Git, no uses Git. Podría ayudarte más saber por qué odian a Git en lugar de intentar convencerlos.
Si simplemente no lo quieren porque es nuevo para ellos y no están dispuestos a aprender algo nuevo: ¿está seguro de que logrará un desarrollo exitoso con ese personal?
¿Realmente todas las personas odian a Git o están influenciadas por algunos líderes de opinión? Encuentra a los líderes y pregúntales cuál es el problema. Convéncelos y convencerás al resto del equipo.
Si no puedes convencer a los líderes: olvídate de usar Git, toma el TFS. Te hará la vida más fácil.
Si su equipo utiliza TFS y usted desea usar Git, es posible que desee considerar un puente "git a tfs". Esencialmente, trabaja día a día con Git en su computadora, luego, cuando desea impulsar sus cambios, los envía al servidor TFS.
Hay una pareja ahí fuera (en github). Usé uno en mi último lugar (junto con otro desarrollador) con cierto éxito. Ver:
Todo lo distribuido de Git es realmente genial. proporciona algunas características que los conjuntos de estantes no tienen (en el producto actual), como las opciones de restauración y confirmación locales (como la función de historia local de Eclipse ). Podría aliviar esto utilizando ramas de desarrollador, pero seamos honestos, a muchos desarrolladores no les gusta bifurcarse y fusionarse un poco. Me han pedido que active la característica de "pago y envío exclusivo" de estilo antiguo en TFS con demasiada frecuencia (y lo negué cada vez).
Creo que muchas empresas grandes están bastante asustadas de permitir que un desarrollador simplemente lleve toda la historia a un lugar de trabajo local y se la lleve (a un nuevo empleador, por ejemplo) ... Robar una instantánea es malo, pero quitar una historia completa es aún más problemático. (No es que no pudieras obtener un historial completo de TFS de lo que querías) ...
Se menciona que es una excelente manera de realizar copias de seguridad, lo cual es excelente para el código abierto nuevamente, donde el mantenedor original podría dejar de preocuparse y elimina su versión, pero para un plan empresarial, esto no es suficiente para muchas empresas, ya que no hay una asignación clara de responsabilidades. para mantener copias de seguridad. Y sería difícil averiguar qué versión usar si el ''proyecto'' principal se desvanece de alguna manera. Lo que tendería a nombrar un repositorio como líder / central.
Lo que más me gusta de Git es la opción Push / Pull, donde puedes contribuir fácilmente con código a un proyecto sin la necesidad de tener derechos de compromiso. Supongo que podrías usar usuarios y estantes muy limitados en TFS para imitar esto, pero no es tan poderoso como la opción Git. La ramificación entre proyectos de equipo también podría funcionar, pero desde una perspectiva administrativa no es realmente factible para muchas organizaciones, ya que agregar proyectos de equipo agrega una gran cantidad de gastos administrativos administrativos.
También me gustaría agregar a las cosas que se mencionan en el área de control de fuente no. Las características tales como el seguimiento de elementos de trabajo, la generación de informes y la automatización de la construcción (incluida la gestión de laboratorio) se benefician enormemente de un repositorio central. Se vuelven mucho más difíciles cuando usa un modelo distribuido puro, a menos que haga que uno de los nodos sea el primero (y, por lo tanto, regrese a un modelo menos distribuido).
Con TFS Basic con TFS 11, es posible que no esté muy lejos de esperar un TFS distribuido que le permita sincronizar su TFS básico local con un TFS central en la era TFS 12+. ¡Pondré mi voto para eso en la uservicia !
Original : @Rob, TFS tiene algo llamado " Shelving " que aborda su preocupación acerca de cometer trabajos en curso sin que esto afecte a la versión oficial. Me doy cuenta de que ve el control de la versión central como un obstáculo, pero con respecto a TFS, ver su código en el estante puede verse como una fortaleza b / c, entonces el servidor central tiene una copia de su trabajo en progreso en el raro evento su máquina local se estrella o se pierde / es robada o necesita cambiar de velocidad rápidamente. Mi punto es que TFS debe recibir los elogios adecuados en esta área. Además, la bifurcación y fusión en TFS2010 se ha mejorado con respecto a las versiones anteriores, y no está claro a qué versión se refiere cuando dice "... por experiencia que la bifurcación y fusión en TFS no es buena". Descargo de responsabilidad: soy un usuario moderado de TFS2010.
Edición del 5 de diciembre de 2011 : para el OP, una cosa que me molesta de TFS es que insiste en configurar todos los archivos locales en "solo lectura" cuando no está trabajando en ellos. Si desea realizar un cambio, el flujo es que debe "desproteger" el archivo, que simplemente borra el atributo de solo lectura en el archivo para que TFS sepa cómo vigilarlo. Eso es un flujo de trabajo inconveniente. La forma en que preferiría que funcionara es que simplemente detecta automáticamente si he realizado un cambio y no me preocupa ni me preocupan los atributos del archivo. De esa manera, puedo modificar el archivo en Visual Studio, Notepad o con cualquier herramienta que desee. El sistema de control de versiones debe ser lo más transparente posible a este respecto. Existe una extensión del Explorador de Windows ( TFS PowerTools ) que le permite trabajar con sus archivos en el Explorador de Windows, pero no simplifica mucho el flujo de trabajo.