¿Existe una forma gráfica de git stash/unstash archivos individuales?

5 minutos de lectura

Avatar de usuario de Chance
Oportunidad

Estoy buscando una GUI para guardar y ocultar archivos en git, con la capacidad de hacerlo para archivos modificados individuales. Sé que hay una forma de línea de comando para hacerlo, que se ve aquí, pero estoy buscando una forma gráfica. No me importa tanto esconder archivos individuales, sino más bien hacer estallar/aplicar. Estoy ejecutando en Windows 7.

  • Desafortunadamente, su pregunta está fuera de tema. Stack Overflow no se trata de recomendaciones de software.

    – jub0bs

    14/04/2015 a las 19:31

  • @Jubobs, está bien, lo pensé como “Necesito una forma de resolver mi problema específico”, no como “qué cliente de git gui es el mejor”.

    – Oportunidad

    14/04/2015 a las 19:39

  • ¿Tu sistema operativo? En Windows, GitExtensions podría hacer eso…

    – Felipe

    14/04/2015 a las 20:33

  • Tienes un problema pero buscas la solución en la dirección equivocada. git stash fue diseñado para otra cosa (se explica en el primer párrafo de su documentación). Puede hacer lo que quiera (y de una manera más flexible que ocultar) si crea una nueva rama y confirma los cambios en ella (en cualquier cantidad de combinación que desee) hasta que alcance el estado que desea. Luego solo revisa la rama anterior y listo.

    – axiac

    15 de abril de 2015 a las 8:36

  • @axiac, creo que tienes razón. Estoy usando git proveniente de Perforce, así que estoy tratando de hacer que Stash encaje en el molde ‘dejar de lado’, pero creo que la bifurcación es la mejor manera de hacerlo. Relacionado con esto, las extensiones de git hacen una especie de rama a partir de mis escondites, por lo que es posible que pueda ocultarlos, pero tratarlos como una rama cuando tomo archivos individuales.

    – Oportunidad

    15 de abril de 2015 a las 13:09

Avatar de usuario de Brett Zamir
Brett Zamir

vi una recomendacion aquí para agregar los comandos Stash como un menú a “Git GUI” en su <USER HOME directory>\.gitconfig.

[guitool "Stash/show"]
  cmd = git stash show -p
[guitool "Stash/list"]
  cmd = git stash list
[guitool "Stash/pop"]
  cmd = git stash pop
[guitool "Stash/drop"]
  cmd = git stash drop
  confirm = yes

También agregué un comando más para hacer el ocultamiento (para usarlo, primero debe organizar, pero no confirmar, los archivos que desea ocultar para que Git realice el “agregar” requerido):

[guitool "Stash"]
  cmd = git stash

(Tenga en cuenta que elegí que “alijo” no aparezca como un submenú, pero podría hacerlo).

También puede agregar comandos a través de Git GUI a través de Tools->Add.

El ocultamiento puede ser útil si solo desea olvidar los archivos rápidamente sin molestarse en pensar en un nombre de rama.

avatar de usuario de axiac
axiac

la documentacion de git stash dice:

Usar git stash cuando desea registrar el estado actual del directorio de trabajo y el índice, pero desea volver a un directorio de trabajo limpio. El comando guarda sus modificaciones locales y revierte el directorio de trabajo para que coincida con el HEAD comprometerse.

Ofrece muy poco apoyo.1 para manejar archivos individuales porque su propósito es almacenar de forma segura sus cambios actuales y llevar rápidamente su árbol de trabajo a un estado limpio (es decir, como estaba inmediatamente después de su última confirmación en la rama actual).

Puede hacer lo que quiera (y de una manera más flexible que ocultar) si crea una nueva rama y confirma los cambios en ella (en cualquier cantidad o combinación que desee) hasta que alcance el estado que desea. Luego solo revisa la rama anterior y listo.

Este enfoque le permite fusionar los cambios en la rama actual más tarde, para seleccionar solo algunas confirmaciones o incluso algunos archivos de ellos.


1 git stash save proporciona la opción --patch que permite al usuario seleccionar de forma interactiva fragmentos de la diferencia entre HEAD y el árbol de trabajo para ser escondido. Permite un control preciso sobre lo que se agrega al alijo.

Discusión adicional

Tu dices:

Estoy usando git procedente de Perforce, por lo que estoy tratando de hacer que Stash encaje en el molde de ‘estantería’, pero creo que ramificar es la mejor manera de hacerlo. Atado a esto es que gitextensions hace una especie de rama de mis escondites, por lo que es posible que pueda esconderlos, pero tratarlos como una rama cuando tomo archivos individuales.

Internamente, cada alijo es almacenado como una confirmación vinculado al compromiso que fue el HEAD en el momento en que se creó el alijo, pero no vinculado al alijo anterior (si lo hay). La lista de alijos se almacena como metadatos; los alijos son No enlazado en una rama (oculta).

Más, git stash create permite la creación de un alijo sin añadirlo a la lista de alijos. Se proporciona para secuencias de comandos y “probablemente no sea el comando que quieres usar” (Cité de la documentación).

  • Gracias. Para aclarar, no creo que el alijo sea realmente como una rama, pero las extensiones de git lo hacen parecer, lo que puede ser bueno o malo. git extensions proporciona una capa de abstracciones y, a veces, no está exactamente claro lo que estoy haciendo.

    – Oportunidad

    28 de abril de 2015 a las 14:34

  • Por cierto, extensiones hace que la lista de escondites parezca una rama; mientras que esto puede ayudar a los principiantes a acomodarse con git más fácil, los engaña más tarde. Árbol de origen presenta los alijos como objetos independientes, del mismo modo que muestra las ramas, las etiquetas y los mandos a distancia. Pruébalo (es gratis), tal vez te guste. También es cliente de Mercurial.

    – axiac

    28 de abril de 2015 a las 14:51

  • “La lista de alijos se almacena como metadatos”, por lo que puedo ver en refs/logs/stash básicamente. Que es git save te refieres?

    – Sr_y_Sra_D

    5 de junio de 2017 a las 10:43

  • @Mr_and_Mrs_D debería haber sido git stash savese me olvidó el stash cuando escribí la respuesta. Lo arreglé ahora. Gracias por señalarlo.

    – axiac

    5 de junio de 2017 a las 11:07

Probaste Sourcetree:
http://www.sourcetreeapp.com/

Podría resolver tu problema.

  • SourceTree es un buen Git Cliente GUI pero no puede ocultar archivos individuales. Tal vez esto se deba a que el stash comando no fue diseñado para funcionar de esta manera?

    – axiac

    15 de abril de 2015 a las 8:33

¿Ha sido útil esta solución?