¿Existen herramientas de combinación para el control de código fuente que comprendan el código?

StackOverflow https://stackoverflow.com/questions/802504

  •  03-07-2019
  •  | 
  •  

Pregunta

Recientemente he estado trabajando a través de una gran base de código, refactorizando y, en general, mejorando el diseño para aumentar la cobertura. Además, en bastantes archivos, he eliminado el exceso de uso de sentencias, métodos movidos para que una funcionalidad similar esté muy cerca, agregue regiones, etc., pero en realidad no cambié la funcionalidad del código en el archivo.

Mientras tanto, en otros lugares del equipo, otros desarrolladores están corrigiendo errores y cambiando líneas de código aquí y allá. Obviamente, cuando se trata de fusionar esto puede ser un problema ya que los números de línea ya no coinciden y los métodos pueden haberse movido.

Ahora, entiendo la regla general de que en un entorno controlado por una fuente puede ser peligroso mover los métodos, y decidimos que el beneficio era mayor que el costo. Lo que no entiendo, sin embargo, es por qué debería ser así.

Diga que mi archivo inicial era una calculadora simple:

public class Calculator
{
    public int Subtract(int a, int b)
    {
        return a + b;
    }

    public int Add(int a, int b)
    {
        return a + b;
    }
}

Y decidí que quería que los métodos fueran alfabéticos:

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public int Subtract(int a, int b)
    {
        return a + b;
    }        
}

Mientras otro desarrollador solucionó el error en el método de resta

public class Calculator
{
    public int Subtract(int a, int b)
    {
        return a - b;
    }

    public int Add(int a, int b)
    {
        return a + b;
    }
}

Es probable que una herramienta de combinación estándar requiera la combinación manual de estos dos archivos, pero una que comprenda la funcionalidad del código fácilmente podría conciliar estos dos cambios. Lo mismo se aplica a eliminar o agregar otros métodos, comentarios, regiones o declaraciones de uso.

Entonces, para (¡por fin!) llegar a la pregunta: ¿Hay alguna herramienta de combinación por ahí que tenga un entendimiento inteligente de la funcionalidad del código y pueda combinar los dos archivos anteriores sin ninguna intervención humana? ¿Si no, porque no? ¿Hay alguna complicación que haga de esto un problema que no pueda resolverse (por supuesto, entender que no es tan simple como lo insinúo, pero que es imposible por alguna razón que no puedo ver?)

Yo uso C # en mi código fuente y me encantaría algo que funcionara con eso, pero me interesa si esto existe en cualquier parte del mundo de la programación ...


Ya estoy realmente preocupado por la duración de esta pregunta, pero editado para agregar cómo esperaría que funcionara el sistema de origen inteligente:

Cuando se verificó el archivo de la calculadora inicial en el sistema, se analizaría el archivo y se crearía una jerarquía de la clase:

File: Calculator.cs
|
|--Class[0]: Calculator
    |
    |--Method[0]: Subtract
         |
         |--Line[0]: return a + b;
    |
    |--Method[1]: Add
         |
         |--Line[0]: return a +b;

(Con líneas adicionales allí para llaves, etc.)

Cuando verifico mi código (haciendo que los métodos sean alfabéticos), se actualiza la jerarquía anterior para que Restar se convierta en Método [1] y Agregar se convierta en Método [0].

El segundo desarrollador verifica su código (que, obviamente, el sistema de control de origen sabe que se basó en el original) y nota el cambio a la primera línea en la resta. Ahora, en lugar de encontrar ese número de línea por línea en el archivo general, sabe que puede encontrarlo en Calculator.cs / Calculator / Subtract / 0 y que el hecho de que el método haya cambiado de ubicación no importa, aún puede hacer que fusionar trabajo.

¿Fue útil?

Solución

Creo que Código fuente en la base de datos es una posible respuesta a su pregunta. La idea general es que usted no hace versiones de archivos, sino versiones de bloques de código. El sistema de control de versiones conoce el código DOM y le permite consultar el código DOM para verificar funciones, clases, lo que tenga, para editar, compilar, etc.

Dado que el orden de los métodos no es necesariamente importante, no se almacenan en la Base de datos con ningún orden en mente. Cuando verifique la clase, puede especificar el orden que más le guste (alfabético, público / protegido / privado, etc.). Los únicos cambios que importan son aquellos en los que cambia el + a un - . No tendrá un conflicto debido a la reordenación de los métodos.

Desafortunadamente, SCID todavía es MUY joven y no hay muchas herramientas para ello. Sin embargo, es una evolución bastante interesante en la forma en que uno ve y edita el código.

Editar: Aquí hay otra referencia para SCID

Otros consejos

Nuestro enfoque con Plastic SCM aún está lejos de ser " completo " ;, pero ya se lanzó y puede ayudar en este tipo de situaciones. Eche un vistazo a Xmerge . Por supuesto, los comentarios serán más que bienvenidos y otorgarán algunas licencias gratuitas ;-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top