¿Por qué aprender git cuando hay aplicaciones GUI para GitHub?

84

Dado que GitHub proporciona aplicaciones GUI para Mac y Windows , ¿cuáles son los beneficios de aprender a usar git desde la línea de comandos?

Actualmente estoy usando su aplicación mac para actualizar mis repositorios, y hasta ahora parece cubrir mis necesidades. ¿Qué podría estar perdiendo?

Histelheim
fuente
15
No olvides gitk, que es una interfaz gráfica de usuario para Linux.
DesarrolladorDon
14
Te estás perdiendo todos los scripts.
SK-logic
3
@KChaloux, sí, hay una muy buena razón por la cual la mayoría de las aplicaciones GUI no son programables en absoluto. Y aquellos que son programables son simplemente horribles (piense en COM y abominaciones similares).
SK-logic
2
@ KChaloux, no, la razón no es una cualidad. Es realmente difícil hacer que una aplicación GUI pura sea programable. Básicamente, todos los enfoques razonables que conozco se basan en la introducción de alguna forma de interfaz de línea de comandos: una CLI de estilo Unix o un lenguaje de comandos basado en texto o algún protocolo binario que es esencialmente lo mismo que un lenguaje de comandos , ver COM. Pero el mejor enfoque, por supuesto, es tener un núcleo común al que se pueda acceder a través de varias herramientas de CLI y desde GUI. Este último también se puede construir sobre CLI para simplificar.
SK-logic
13
Usted no De la misma manera, no necesita aprender HTML / CSS porque Dreamweaver y Frontpage (o lo que sea ahora) existen. Tal vez funcione para usted para algunas cosas, pero cuando no lo haga, alguien mejor sabrá cómo funciona realmente.
DorkRawk

Respuestas:

116

Creo que esta pregunta es solo un caso especial de "¿Por qué debería aprender cualquier CLI para la cual existe una alternativa GUI?". Sospecho que la última pregunta es tan antigua como las GUI, y supongo que hubo muchos intentos de responderla a lo largo de los años. Podría tratar de encontrar mi propia respuesta a esta pregunta, pero Neal Stephenson articuló lo que estoy de acuerdo como la 'respuesta final' hace más de diez años en su notable ensayo In the Beginning ... Was the Command Line .

Si bien el ensayo toca muchos aspectos de la informática, e incluso si el mismo Stephenson cree que gran parte de esto ahora está obsoleto, el ensayo explica de qué manera las CLI son mejores GUI de una manera extremadamente convincente que literalmente cambió mi vida. Es una lectura larga (~ 40 páginas), pero no puedo recomendarla lo suficiente a cualquiera que haga preguntas como las que usted hizo aquí.

Finalmente, aunque respondería cualquier tipo de pregunta CLI vs GUI en una línea similar, creo que mi respuesta es especialmente cierta para su pregunta específica ya que de todas las cosas de la computadora que eligió preguntar git. gitpodría decirse que es la última herramienta en una lista no tan larga de herramientas informáticas que realmente son dignas de la metáfora del agujero como la descrita en el ensayo de Stephenson. git, como muchas otras cosas de Unix-ish, es una razón para conocer las CLI en sí mismas. A veces a pesar de su errática 'porcelana' ; a veces por eso.

Entonces sí, definitivamente puede ser productivo con la GUI de github, ya sea para OSX o incluso solo en su sitio web. Sí, en realidad es bastante elegante, uso las características del sitio a menudo. Pero no, nunca tendrás ese sentimiento piadoso cuando tu meñique derecho cuelga por encima de un git filter-branchcomando loco por un eón o dos. Si tuviera que guardar una sola cosa de mi experiencia con la informática: los desafíos mentales, las amistades cercanas formadas en un centro de datos a las 2 de la mañana, la escala infinita de competencia para escalar, tocar las vidas de los usuarios y reinar sobre PB de datos preciosos, el cómodo trabajos y vida cómoda, conserve solo una cosa , sería ese sentimiento divino.

Yaniv Aknin
fuente
55
Enlace más accesible a In the Beginning ... Era la línea de comando: pauillac.inria.fr/~weis/info/commandline.html
Elias Zamaria
1
Re: obsoleto: esa sería la parte de "BeOS as Batmobile", ¿verdad?
naught101
2
Garrett Birkel ha actualizado el ensayo "En el principio ... era la línea de comando" intercalando sus comentarios con el ensayo original de Neal Stephenson. Puedes leer sobre esto aquí .
Me gusta codificar
2
... sí, quién necesita una CLI cuando puede crear una interfaz GUI usando Visual Basic. Ideal para cosas como el seguimiento de una dirección IP.
Hola
3
No estaba sugiriendo que "más viejo es mejor", sugería que las CLI son (para muchos casos de piratas informáticos) superiores a las GUI. Las CLI también son superiores a los interruptores binarios y los cables de conexión. Por eso uso CLI. El artículo no es "prueba" porque está "en un artículo", es una prosa con argumentos que articulan lo que me gusta de las CLI. Es viejo, pero también lo es UNIX, y qué. Por cierto, trabajo para Google, y la abrumadora mayoría de los desarrolladores a mi alrededor usan un entorno de desarrollo basado en CLI (pero no puedo hablar por Google en su conjunto, por supuesto).
Yaniv Aknin
108

Si todas sus necesidades están cubiertas, increíble, no es necesario profundizar en git, su tiempo se gastaría mejor en aprender algo que realmente necesita.

git es solo una herramienta, cuando necesites hacer algo que no puedes hacer con una aplicación GUI, lo sabrás. Solo ten en cuenta que github! = Git.

Yannis
fuente
1
Estoy de acuerdo con usted, pero puede haber cosas de las que no estoy al tanto actualmente, que podrían serme útiles si las supiera. ¿No?
histelheim el
28
@AronLindberg Sí, probablemente sí. Pero está haciendo la pregunta equivocada, lo que debería pasar tiempo investigando son los flujos de trabajo y los conceptos de git, no su línea de comandos. Incluso si alguien le enumera todas las funcionalidades que faltan las aplicaciones GUI, ¿cómo podría saber si realmente lo necesita? (también es algo que puedes hacer tú mismo muy fácilmente, solo mirando la documentación de git)
yannis
//, una CLI lo obligará a pensar un poco más sobre los flujos de trabajo y los conceptos, porque toda la organización, las opciones y el flujo ocurrirán en su cabeza, no en los asistentes y menús desplegables.
Nathan Basanese
57

La mayoría de las características exclusivas de CLI solo entran en juego cuando accidentalmente coloca su repositorio en un estado extraño y desea solucionarlo. Por otro lado, la forma más común de llevar tu repositorio a un estado extraño es usar funciones avanzadas que no entiendes. Si se atiene a lo que proporciona la GUI, eso cubrirá sus necesidades el 99% del tiempo.

La otra razón por la que es posible que desee aprender el CLI es que es la lengua franca de git. Eso significa que, si bien muchas personas usan diferentes GUI en diferentes plataformas, si solicita ayuda en StackOverflow o en otro lugar, la respuesta probablemente sea en forma de comandos de CLI. Si no conoce la CLI, sus opciones para obtener ayuda serán mucho más limitadas.

Karl Bielefeldt
fuente
Definitivamente la mejor respuesta aquí. No es bla, bla, bla, filosofía.
john cj
//, este fue mi primer pensamiento, y aunque las respuestas filosóficas me atrajeron, la razón principal por la que uso CLI es porque son mucho más fáciles de razonar, estandarizar y comunicar a otros por texto. Puede que no todos sepamos dibujar, pero todos sabemos cómo escribir.
Nathan Basanese
9

Las aplicaciones GUI se basan en interacciones manuales para realizar comportamientos complejos. Esto es genial para configurar proyectos y desarrollar cosas nuevas.

Los beneficios de una interfaz de línea de comandos (CLI) provienen de la capacidad de crear scripts predeterminados que pueden automatizarse. Todo lo que la GUI de GitHub es, son algunos gráficos agradables y botones elegantes que llaman a la CLI de git.

Lo que la aplicación GUI no hará por usted es actualizar automáticamente la troncal de un repositorio en un servidor diariamente a la 1:30 a.m., pero un trabajo cron que llama a la CLI de git es una forma realmente fácil de configurarlo.

Además, cuando se trabaja en un proyecto en un equipo, es conveniente configurar scripts de instalación, construir scripts, implementar scripts y similares para que los compañeros de equipo puedan concentrarse en resolver problemas en lugar de tediosas tareas repetitivas.

zzzzBov
fuente
¿el maletero? Creo que te refieres a maestro.
jpmc26
@ jpmc26, escribí esto cuando era nuevo en git procedente de SVN, perdón por la terminología.
zzzzBov
6

Otra razón por la cual la CLI podría ser preferible es una cuestión de flujo de trabajo. Muchos marcos se gestionan a través de la línea de comando. Usar git a través de la CLI me permitió concentrarme en mi proyecto y en ese directorio de proyectos. Por ejemplo, podría ejecutar una prueba y luego decidir confirmar los nuevos cambios, todo desde la misma interfaz y ubicación.

Shigar Kenze
fuente
+1; y cuanto más fácil / más accesible sea de usar, más probable es que lo use cuando sea el momento apropiado (toque toque toque git commit toque toque toque) en lugar de (toque toque lanzar GUI git commit 'fin de semana commit')
Abe
5

Recientemente tengo que profundizar en Git para poder ayudar con una migración de SVN a Git. Y lo que aprendí es que las herramientas de línea de comandos de Git no son la parte complicada de aprender.

Los conceptos e ideas detrás de Git son la parte compleja (y eso no es porque estén mal diseñados, sino simplemente porque son extraños para la mayoría de las personas que provienen de otro VCS centralizado).

Una vez que he comprendido los conceptos, las declaraciones reales de la línea de comando se volvieron relativamente fáciles. Eso significa que una interfaz de usuario realmente no ayuda a comprender Git (a excepción de las operaciones más simples).

Joachim Sauer
fuente
3
En realidad, los conceptos detrás gitson tan simples que las personas no pueden entenderlos, están buscando algo más difícil.
gahooa
4

Conocer la CLI es útil para cuando (no si) estás en un entorno donde no puedes acceder a una aplicación GUI.

Un escenario potencial: se le pide que ayude por solo un par de días en un proyecto en un lugar cerrado donde es molesto y largo obtener nuevas herramientas en el sistema. Solo usan CLI. Su productividad acaba de recibir un golpe porque necesita aprender todo de nuevo.

grumpasaurus
fuente
Las respuestas de una oración rara vez proporcionan mucho valor. ¿Puedes por favor ampliar tu respuesta?
Walter
//, Él es el @grumpasaurus. ¿Qué esperabas, un soneto?
Nathan Basanese
2

Una razón para aprender git de línea de comandos es que la mayoría de la documentación está escrita para ese entorno. Además, si hace una pregunta: "¿cómo hago X con git?", Es probable que la respuesta contenga comandos de línea de comandos.

Nemanja Trifunovic
fuente
1

Uno de los principales problemas con el uso de una GUI en comparación con la línea de comandos es que no puede tener el mismo control sobre su proceso, en la mayoría de los casos. Por ejemplo, la aplicación GitHub es excelente en términos de usabilidad para muchos flujos de trabajo de git, pero aún podría ser engorrosa para los procesos avanzados de git.

Como ejemplo, aquí hay algunas cosas que no he descubierto cómo hacer usando la aplicación GitHub (otra cosa a tener en cuenta es que cada GUI también tiene una curva de aprendizaje).

  • Rebasando commits
  • Push / Pull / Fetch individualmente (en GitHub se agrupan en un solo comando de "sincronización" que puede causar problemas algunas veces)
  • Enmiendas comprometidas

Finalmente, las CLI permiten a los usuarios usar estas herramientas cuando crean secuencias de comandos.

KLee1
fuente
El último punto es bastante clave para mí. Los scripts de construcción, las herramientas y los servidores rara vez tienen uno que use una interfaz gráfica de usuario para tener el control de versión de acceso de interfaz gráfica de usuario. En su lugar, uno debe usar la línea de comando.
0

No sé acerca de GitHub para Mac, pero la aplicación de Windows solo realiza las tareas más comunes: agregar, confirmar, empujar, tirar, etc. Las tareas más complejas como git merge --no-ffdeben realizarse desde la línea de comandos.

Además, hay casos con git cuando GUI no está disponible, por ejemplo, cuando SSHing en servidores remotos.

Pero, de lo contrario, si la GUI le brinda todo lo que necesita, aprender la línea de comandos puede ser una pérdida de tiempo. Mi trabajo utiliza TortoiseSVN en un entorno solo para Windows, y no he tenido que tocar la línea de comando SVN ni una sola vez.

ikh
fuente
0

Acabo de aprender un caso en el que la CLI puede ser mejor que la GUI. Para ilustrar esto, tomé un ejemplo de un libro git - control de versiones para todos.

Cuando desee compartir a través de una intranet, puede usar:

  1. Servidor de gitolita
  2. Directorio compartido común con repositorios desnudos

Mire los pasos para crear un repositorio desnudo.

Crear un repositorio desnudo en modo CLI

El comando para crear un repositorio desnudo sería el mismo que usó para clonar un repositorio, excepto el parámetro --bare, que marca la diferencia. git clone --bare C:\Users\raviepic3\Desktop\Workbench C:\generic_share\ Bare_Workbench La ejecución del código anterior en su consola debería crear un clon de nuestro repositorio de Workbench en su carpeta compartida común llamada generic_share.

Crear un repositorio desnudo en modo GUI

Crear un clon desnudo a partir de un repositorio ya existente utilizando GUI es un proceso fácil. Todo lo que necesitas hacer es:

  1. Copie el directorio .git del repositorio existente y péguelo con un different_name.git (cualquier nombre que desee dar a su nuevo repositorio desnudo) fuera del repositorio. En nuestro caso, tenemos un repositorio no denominado Workbench en C: \ Users \ raviepic3 \ Desktop \ dentro del cual tenemos content.docx. Y ahora quiero crear un nuevo repositorio desnudo a partir de esto usando GUI. Copiaré C: \ Users \ raviepic3 \ Desktop \ Workbench.git y lo pegaré como C: \ generic_share \ Bare_Workbench.git.

  2. Abra el config fileinterior Bare_Workbench.git con un editor de texto y busque la línea que dice bare = falsey reemplace la cadena false por true.

  3. Guardar y Salir.

En la GUI, debe hacer tantos clics y recordar qué archivo se va a editar. En CLI, un simple comando lo hace todo por usted.

Sid Smith
fuente