Cómo usar Visual Studio Code como editor predeterminado para Git MergeTool, incluida la combinación de 3 vías

3 minutos de lectura

avatar de usuario
eric d johnson

Hoy estaba tratando de usar el git mergetool en el símbolo del sistema de Windows y me di cuenta de que estaba predeterminado para usar Empujelo cual es genial, pero prefiero Código VS.

como puedo tener código de estudio visual funcionar como mi GUI para manejar conflictos de fusión (o incluso como una herramienta de diferenciación) para Git?

¿Es posible configurar Código VS para obtener imágenes para un fusión de tres vías?

avatar de usuario
eric d johnson

Actualizar: A partir de Código de estudio visual 1.70 Fusión de tres vías con mejoras fueron añadidas. Visuales y más explicaciones. están disponibles si eso es de su interés 😉.

A partir de Código de estudio visual 1.13 Mejor fusión se integró en el núcleo de Visual Studio Code.

La manera de conectarlos juntos es modificar su .gitconfig y tu tienes dos opciones.

  1. Para hacer esto con las entradas de la línea de comando, ingrese cada uno de estos: (Nota: es posible que deba reemplazar ' con " si no está utilizando Windows Git Bash, macOS o Linux como aclaran Iztok Delfin y e4rache)

    1. git config --global merge.tool vscode
    2. git config --global mergetool.vscode.cmd 'code --wait --merge $REMOTE $LOCAL $BASE $MERGED'
    3. git config --global diff.tool vscode
    4. git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'
  2. Para hacer esto pegando alguna línea en el .gitconfig con el código de Visual Studio.

    • Correr git config --global core.editor "code --wait" desde la línea de comandos.

    • Desde aquí puede ingresar el comando git config --global -e. Deberá pegar el código en el “Bloque adicional” a continuación.

        [user]
            name = EricDJohnson
            email = [email protected]
        [gui]
            recentrepo = E:/src/gitlab/App-Custom/Some-App
        # Comment: You just added this via 'git config --global core.editor "code --wait"'
        [core]
            editor = code --wait
        # Comment: Start of "Extra Block"
        # Comment: This is to unlock Visual Studio Code as your Git diff and Git merge tool
        [merge]
            tool = vscode
        [mergetool "vscode"]
        # Comment: Original way before three-way merge shown commented out
        #    cmd = code --wait $MERGED
        # Comment: For "Three-way merge"
            cmd = code --wait --merge $REMOTE $LOCAL $BASE $MERGED
        [diff]
            tool = vscode
        [difftool "vscode"]
            cmd = code --wait --diff $LOCAL $REMOTE
        # Comment: End of "Extra Block"
      

Ahora desde dentro de su directorio Git con una ejecución de conflicto git mergetool y, tada, ¡tienes Visual Studio Code ayudándote a manejar el conflicto de combinación! (Solo asegúrese de guarda tu archivo antes de cerrar Visual Studio Code).

¿Aceptar cambio entrante a alguien?

Para leer más sobre el lanzamiento code desde la línea de comando, busque en esta documentación.

Para más información en git mergetool verificar esta documentación.

  • ¿Esta integración de Better Merge le permite aceptar y elegir qué parte fusionar? ¿O aún tiene que eliminar a mano los comentarios adicionales del conflicto como <<<< HEAD y >>>> develop?

    – codificación ghis

    29 de agosto de 2017 a las 19:22

  • Hay una línea arriba de <<<< Head, que se inserta y enumera las opciones: "Aceptar cambio actual | Aceptar cambio entrante | Aceptar ambos cambios | Comparar cambios" y creo que inserta esto en cada sección de cambios detectados en el archivo . Pero dentro de una sección, si desea fusionar un poco de esto y un poco de aquello a mano, creo que haría ese cambio en su local y luego iría con la opción "Aceptar cambio actual". Entonces, el flujo de trabajo te obliga a dar un paso atrás para dar un paso adelante. Si otros resuelven esto de una manera diferente, publique aquí para educarnos.

    –Eric D. Johnson

    30 de agosto de 2017 a las 20:03

  • Oh, lo veo en tu pantalla de impresión ahora, muy claro. Muchas gracias por la explicación y la forma de hacerlo. Lo usaré felizmente la próxima vez que los conflictos se interpongan en el camino 🙂

    – codificación ghis

    30 de agosto de 2017 a las 23:31

  • me sale el error unknown tool: vscode… Estoy bastante seguro de llamar a VsCode desde la línea de comandos que tienes que usar code en vez de vscode

    –Kellen Stuart

    5 sep 2018 a las 16:02

  • Además, esto no está funcionando para mí. Simplemente abre VsCode y nunca se muestran archivos.

    –Kellen Stuart

    02/10/2018 a las 22:35

avatar de usuario
e4rache

Tuve que reemplazar las comillas dobles con comillas simples:

  git config --global difftool.vscode.cmd 'code --wait --diff $LOCAL $REMOTE'

para que funcione correctamente (con comillas dobles, $LOCAL y $REMOTE se reemplazan por sus valores).

Esto es necesario si está utilizando Git Bash para Windows en lugar de Símbolo del sistema de Windows.

  • No para mí. Acabo de hacer esto en Windows usando el símbolo del sistema. ¿Quizás estás usando algo diferente? Si es así, le sugiero que agregue el entorno que está usando para que otras personas con el mismo entorno sepan que necesitarán hacer este cambio.

    – Todesengel

    20 de agosto de 2018 a las 21:04

  • @e4rache y @Iztok-Delfin lo que han enumerado aquí es contenido útil, pero accidentalmente lo convirtieron en una respuesta, cuando en realidad es un comentario. Estoy seguro de que tuvo problemas porque no tenía el punto 50 en SO para permitirle comentar, que es una especie de problema de flujo de trabajo del sitio que tal vez debería investigarse. De todos modos, gracias por contribuir, y agregué su consejo en mi respuesta anterior. Gracias por ayudar a los que vienen después y están usando Git Bash :^)

    –Eric D. Johnson

    23 de agosto de 2018 a las 21:12


  • @ eric-d-johnson Tenía la intención de hacer un comentario en lugar de una respuesta. (lo siento, soy nuevo en este sitio) y, por cierto, estaba usando bash en Linux. ¿Hay alguna manera de transformar esta respuesta en un comentario?

    – e4rache

    4 sep 2018 a las 12:34

  • @e4rache No sé cómo convertirlo en un comentario, pero tal vez un moderador vea esto y nos dé algunos consejos (pista, pista). Si tuviera los 50 puntos, podría hacer un comentario sobre la respuesta aceptada y eliminar esta, de modo que una vez que se convierta en una TAN estrella de rock con toneladas de puntos, puede volver aquí y hacer cualquier limpieza que lo haga feliz y le traiga buenos recuerdos de como empezó todo.

    –Eric D. Johnson

    5 sep 2018 a las 18:29

  • @mohamedghonemi Buenos comentarios. Actualicé la explicación en la parte superior para macOS y Linux ahora para recordar usar comillas simples ('s).

    –Eric D. Johnson

    16 ene 2020 a las 20:30


avatar de usuario
mvd

Además de la excelente respuesta existente, debe abrir VS Code en una nueva ventana agregando -n a la línea de comandos.

Entonces tus git config --global --edit se parece a esto.

[merge]
        tool = vscode
[mergetool "vscode"]
        cmd = code --new-window --wait $MERGED
[diff]
        tool = vscode
[difftool "vscode"]
        cmd = code --new-window --wait --diff $LOCAL $REMOTE                                                    

  • Utilicé esta configuración, pero cuando lo hago git diff commit_id1 commit_id2, no abre una ventana del editor de código VS. Todavía está predeterminado en la terminal. ¿Estoy usando el comando incorrecto?

    – usuario5965026

    10 dic 2021 a las 13:33

  • @user5965026 has probado git diftool en vez de git diff?

    – mvd

    13 de diciembre de 2021 a las 15:29

Usando el manual puedes encontrar un argumento interesante:

git difftool --help 
-x <command>, --extcmd=<command>
       Specify a custom command for viewing diffs.  git-difftool ignores the configured defaults and runs $command $LOCAL $REMOTE when this option is specified.
       Additionally, $BASE is set in the environment.

Con esta información, puede usar fácilmente el siguiente comando sin tocar la configuración de git:

git difftool -x "code --wait --diff" 

Pregunta similar aquí

avatar de usuario
daniel b

En caso de que alguien quiera resolverlo en Visual Studio, otra opción sería hacerlo a través de Visual Studio: Team Explorer -> haga clic en el ícono de Inicio => Botón de configuración => expanda la sección Git => haga clic en Configuración global

ingrese la descripción de la imagen aquí
ingrese la descripción de la imagen aquí
ingrese la descripción de la imagen aquí

  • Visual Studio no es equivalente a Visual Studio Code. La forma en que se realizan configuraciones como esta es bastante diferente. Consulte stackoverflow.com/a/33798601 para conocer las diferencias.

    – jwd630

    18/01/2020 a las 21:00


  • @ jwd630 Sé que el código VS es diferente a VS. Tuve este problema en VS pero no pude encontrar una solución para eso, así que pensé que sería mejor publicarlo en caso de que alguien esté experimentando este problema. No hay necesidad de votar negativamente.

    – Daniel B.

    18 de enero de 2020 a las 21:07

  • Esta es una respuesta a una pregunta completamente diferente para un producto diferente.

    – Jörg W. Mittag

    12 de junio de 2021 a las 9:46

  • El uso adecuado de completamente: Windows Medial Player es completamente diferente al código vs.

    – Daniel B.

    12 de junio de 2021 a las 12:52

  • Visual Studio no es equivalente a Visual Studio Code. La forma en que se realizan configuraciones como esta es bastante diferente. Consulte stackoverflow.com/a/33798601 para conocer las diferencias.

    – jwd630

    18/01/2020 a las 21:00


  • @ jwd630 Sé que el código VS es diferente a VS. Tuve este problema en VS pero no pude encontrar una solución para eso, así que pensé que sería mejor publicarlo en caso de que alguien esté experimentando este problema. No hay necesidad de votar negativamente.

    – Daniel B.

    18 de enero de 2020 a las 21:07

  • Esta es una respuesta a una pregunta completamente diferente para un producto diferente.

    – Jörg W. Mittag

    12 de junio de 2021 a las 9:46

  • El uso adecuado de completamente: Windows Medial Player es completamente diferente al código vs.

    – Daniel B.

    12 de junio de 2021 a las 12:52

¿Ha sido útil esta solución?

Esta web utiliza cookies propias y de terceros para su correcto funcionamiento y para fines analíticos y para mostrarte publicidad relacionada con sus preferencias en base a un perfil elaborado a partir de tus hábitos de navegación. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información
Privacidad