2011-05-01 21 views
10

A veces trabajo en un sistema sin X Window instalado y no puedo usar la GUI de Git.Mejor git add -p?

¿Cuáles son las alternativas de consola existentes al git add -p?

Me gusta casi todo lo que hace (más que la GUI de Git en realidad), pero odio que no me permita ver toda la imagen y elegir el orden en el que quiero revisar los fragmentos. Esa es la única ventaja real de Git GUI sobre git add -p para mí, pero es bastante crucial.

Intenté tig, pero no me gusta la experiencia del usuario que ofrece.

¿Alguna sugerencia?

+0

¿Conoce el comando 'g'? Sin duda es menos que ideal, pero te da una lista de todos los tipos y la capacidad de pasar a un pedazo en particular (de hecho, te permite elegir el orden). –

+0

Lo sé, pero no es lo suficientemente bueno, necesito ver todos los trozos en un archivo como un todo para decidir si deseo comprometerlos ahora. –

Respuesta

19

Vim tiene un plugin 'fugitivo'

Editar: la linked vimcast (comments) es excelente y lo recomiendo. Me gustaría añadir el indicio de que normalmente no habrá una necesidad de escribir :diffget y :diffput en escritura a mano, porque se puede hacer él mismo directamente en el modo normal/visual mediante la pression do y dp .

La mejor comando para comenzar con esta característica parece ser :Gstatus


Vim es un editor de terminales (que por lo que pasa a tener un puerto de interfaz gráfica de usuario también)

El plugin fugitivo simplemente dejar Edite las versiones del índice y del árbol de trabajo de los archivos uno al lado del otro y le permite diferir/diffobtain hasta que esté satisfecho. El modo diff de Vim es sofisticado y mucho más flexible/intuitivo que git add --patch.

  • scrollbinding
  • resaltado de sintaxis y intra-line diff (wordlevel) destacando simultáneamente
  • diff automático de plegado (de las regiones sin cambios)

Puede get fugitive here

de fragmentos de :he fugitive:

Edite un archivo en el árbol de trabajo y realice algunos cambios. Uso |: Gdiff | para abrir la versión indexada. Use | do | y | dp | en varios trozos para traer los archivos en sincronización, o use |: Gread | para obtener todos los cambios Escriba la versión indexada en etapa del archivo.

+0

Supongo que emacs debería tener algo en la misma línea ... –

+0

¿Alguna vez has mirado a un fugitivo? - Dicho esto, estoy bastante seguro de que Emacs tendrá un modo diff, siendo un editor de propósito general – sehe

+3

También hay un reciente [Vimcast que demuestra los equivalentes 'git add --patch' del fugitivo] (http://vimcasts.org/ episodios/fugitive-vim-working-with-the-git-index /). –

0

¿qué pasa con un simple

git diff 

a "ver la imagen completa" y luego un

git add -i 
5 

para elegir el primer archivo que desee confirmar y organizar los trozos, y luego repita el proceso con los próximos archivos?

+1

¿El '5' tiene un significado allí? – sehe

+1

Me gustaría poder hacer todo esto simultáneamente. A menudo tengo varias series de tíos sin compromiso sentados en varios archivos diferentes (que serían una serie por commit). Correr a través del bucle 'git add -p' cada vez es bastante tedioso. También este uso de 'git add -i' es lo mismo que usar el nombre real del archivo en la invocación' git add -p', no hay mucha mejoría. –

+0

@sehe: es un número de elemento del menú de la lista de archivos. –

0

Si estuviera en la misma situación que usted (una mezcla de tíos donde algunos tíos son "más importantes" que otros), comprometería a los tíos menores en sus propios compromisos con mensajes de compromiso fácilmente distinguibles y dejo solo aquellos trozos 'más importantes' para que no se interpongan en el camino de diffs, o git add -i.

Con los mensajes de compromiso fácilmente distinguibles para los tits "menos privilegiados" debería ser fácil tratarlos más adelante.