当有适用于GitHub的GUI应用程序时,为什么还要学习git?


84

鉴于GitHub提供了适用于MacWindows的 GUI应用程序,从命令行学习使用git有什么好处?

目前,我正在使用他们的Mac应用程序更新存储库,到目前为止,它似乎可以满足我的需求。我可能会错过什么?


15
不要忘记gitk,这是Linux的gui。
DeveloperDon

14
您缺少所有脚本。
SK-logic

3
@KChaloux,是的,有一个很好的理由说明为什么大多数 GUI应用程序根本无法编写脚本。而且那些可编写脚本的脚本太糟糕了(请考虑使用COM和类似的可恶)。
SK-logic

2
@KChaloux,没有原因不是质量。使纯GUI应用程序可编写脚本确实非常困难。我所知道的所有合理方法基本上都是基于引入某种形式的命令行界面而建立的-Unix风格的CLI或基于文本的命令语言,或某种与命令语言本质上相同的二进制协议,请参阅COM。但是,最好的方法当然是拥有一个公共内核,既可以通过各种CLI工具也可以从GUI进行访问。为了简化起见,后者也可以基于CLI构建。
SK-logic

13
你不知道 同样,您也不需要学习HTML / CSS,因为存在Dreamweaver和Frontpage(或任何现有的东西)。也许它在某些方面对您有用,但是当它不起作用时,有人会更好地知道它是如何工作的。
DorkRawk

Answers:


116

我认为这个问题只是“为什么我应该学习存在GUI替代方案的任何CLI?”的特例。我怀疑后一个问题与GUI一样古老,并且我认为多年来已经有很多尝试来回答它。我可以通过自己对这个问题的答案来弄清楚自己的方式,但是尼尔斯蒂芬森(Neal Stephenson)十多年前在他的引人注目的文章《开始……是命令行》中表达了我所同意的“最终答案” 。

尽管本文涉及计算的许多方面,甚至斯蒂芬森本人也认为现在很多计算已过时,但本文以极具吸引力的方式解释了CLI是更好的GUI的哪些方式,从根本上改变了我的生活。读的书很长(约40页),但是我对任何提出像您在这里提出的问题的人都不太推荐。

最后,尽管我会以类似的方式回答任何CLI与GUI之类的问题,但我认为我的回答尤其适用于您的特定问题,因为您选择询问所有计算机问题gitgit可以这么说,它是计算机工具列表中最新的工具,确实值得史蒂芬森的论文中描述的洞洞比喻。git与其他一些类似Unix的东西一样,也是完全了解CLI的原因。有时尽管瓷器不固定;有时是因为它。

所以,是的,对于OSX或什至仅在其网站上,您绝对可以使用github的GUI进行工作。是的,它实际上非常时尚,我经常使用该网站的功能。但是,不,当您的右手小指悬挂在一git filter-branch两秒钟的疯狂命令之上时,您将永远不会有上帝的感觉。如果我只需要保留自己在计算方面的经验中的一件事,那就是心理挑战,在凌晨2点在数据中心形成的亲密友谊,无限的能力提升能力,触动用户的生活以及掌控珍贵数据的PB,那么工作和舒适的生活-只保留一件事 -那就是上帝的感觉。


5
到“开始...更容易访问的链接...是命令行”:pauillac.inria.fr/~weis/info/commandline.html
Elias Zamaria 2012年

1
回复:已过时:那将是“ BeOS as Batmobile”的一部分,对吧?
naught101

2
加勒特·伯克尔(Garrett Birkel)通过将评论添加到尼尔·史蒂芬森(Neal Stephenson)的原始文章中,对文章“从头开始……是命令行”进行了更新。你可以在这里阅读。
我喜欢

2
是的,当您可以使用Visual Basic创建GUI界面时,需要使用CLI。非常适合跟踪IP地址之类的事情。
2015年

3
我并不是在建议“越老越好”,而是在CLI(对于许多黑客用例)优于GUI。CLI还优于二进制开关和跳线。这就是为什么我使用CLI。这篇文章不是“证明”的,因为它是“一篇文章中的”,而是散文陈述了我喜欢CLI的观点。它很旧,但是UNIX也是如此。顺便说一下,我为Google工作,周围的绝大多数开发人员都使用基于CLI的开发环境(但是,我不能整体上代表Google)。
亚尼夫

108

如果您的所有需求都得到满足,很棒,不需要深入了解git,那么您的时间就会花在学习实际需要的东西上。

git只是一种工具,当您需要使用GUI应用程序做某事时,您会知道的。只要记住github!= git。


1
我同意您的意见,但是有些事情我目前尚不了解,如果我知道这些事情可能对我有用。没有?
histelheim

28
@AronLindberg是的,可能有。但是您问错了一个问题,应该花些时间研究的是git的工作流程和概念,而不是命令行。即使有人列出了您缺少的GUI应用程序的所有功能,您怎么知道您是否真正需要它呢?(这也是您可以很容易地做的事情,只需查看git的文档即可)
yannis 2012年

//,CLI将迫使您多考虑工作流程和概念,因为所有组织,选择和流程都将在您的脑海中发生,而不是在向导和下拉菜单中发生。
弥敦道(Nathan Basanese)

57

仅当您不小心使存储库进入怪异状态并想对其进行修复时,大多数仅CLI的功能才起作用。另一方面,使您的仓库进入怪异状态的最常见方法是使用您不了解的高级功能。如果您坚持使用GUI提供的功能,那么99%的时间都可以满足您的需求。

您可能要学习CLI的另一个原因是它是git的通用语言。这意味着尽管许多人在不同平台上使用不同的GUI,但是如果您在StackOverflow或其他地方寻求帮助,答案很可能会以CLI命令的形式出现。如果您不知道CLI,则获得帮助的选项将受到更多限制。


绝对是这里的最佳答案。不是非等等的哲学。
约翰cj

//,这是我的第一个想法,尽管哲学上的答案吸引了我,但我使用CLI的主要原因是因为它们更易于通过文本进行推理,标准化和与他人交流。我们可能不都知道如何绘画,但是我们都知道如何键入。
弥敦道(Nathan Basanese)

9

GUI应用程序依靠手动交互来执行复杂的行为。这对于设置项目和开发新事物非常有用。

命令行界面(CLI)的好处来自能够创建可以自动执行的预定脚本的功能。GitHub的所有GUI都是一些漂亮的图形和精美按钮,它们称为git CLI。

GUI应用程序不会为您执行的操作是每天凌晨1:30在服务器上自动更新存储库的主干,但是调用git CLI的cron作业是设置它的一种非常简单的方法。

此外,在团队中进行项目工作时,可以方便地设置安装脚本,构建脚本,部署脚本等,以便队友可以专注于解决问题,而不必进行繁琐的重复任务。


树干?我想你是说师父
jpmc26 2016年

@ jpmc26,当我不熟悉SVN的git时,我写了这个,请原谅术语。
zzzzBov

6

选择CLI的另一个原因是工作流程。许多框架通过命令行进行管理。通过CLI使用git,让我专注于项目和该项目目录中。例如,我可能会运行测试,然后决定从相同的界面和位置提交所有新更改。


+1; 并且它更容易使用/更易于使用,我更有可能在适当的时候使用它(轻按启动GUI git commit'weekly commit')
安倍

5

最近,我不得不深入研究Git,以帮助进行SVN到Git的迁移。我了解到的是,Git命令行工具并不是学习的复杂部分。

Git背后的概念和想法是复杂的部分(并不是因为它们设计不当,而仅仅是因为它们对于来自其他集中式VCS的大多数人来说是陌生的)。

一旦掌握了这些概念,实际的命令行语句就会变得相对容易。这意味着UI并不能真正帮助您理解 Git(最简单的操作除外)。


3
实际上,背后的概念git是如此简单,以至于人们无法理解它们-他们正在寻找更艰难的东西。
gahooa 2012年

4

当您在某种无法使用GUI应用程序的环境中(不是)时,知道CLI会很方便。

一种潜在的情况:您需要在封闭的位置上的项目中提供几天的帮助,在这个位置很难将新工具插入系统中。他们仅使用CLI。您的生产力受到了很大的打击,因为您需要重新学习所有内容。


一句话的答案很少能提供很多价值。能否请您扩展一下答案?
Walter

//,他是@grumpasaurus。您期望什么,十四行诗?
弥敦道(Nathan Basanese)


1

使用GUI而不是命令行的主要问题之一是,在大多数情况下,您无法对流程进行相同的控制。例如,GitHub应用程序在许多git工作流程的可用性方面都很棒,但对于高级git流程而言仍然很麻烦。

举例来说,有些事情我还没有弄清楚如何使用GitHub应用程序来做(另一件事要注意的是,每个GUI都有学习曲线)。

  • 重新提交
  • 分别推/拉/获取(在GitHub中,它们被分组为单个“同步”命令,这有时可能会引起问题)
  • 修改提交

最后,CLI允许用户在编写脚本时使用这些工具。


最后一点对我来说很关键。生成脚本,工具和服务器很少使用带有gui的GUI来进行gui访问版本控制。必须改为使用命令行。

0

我不知道Mac版GitHub,但是Windows应用程序仅执行最常见的任务-添加,提交,推送,拉入等。更复杂的任务(如git merge --no-ff必须从命令行执行)。

另外,有些情况下使用git时GUI不可用,例如,当SSH进入远程服务器时。

但是否则,如果GUI提供了您所需的一切,那么学习命令行可能会浪费时间。我的工作在仅Windows环境中使用TortoiseSVN,即使一次也不必触摸SVN命令行。


0

我刚刚了解了一种情况,其中CLI可以比GUI更好。为了说明这一点,我从一本书git中获取了一个示例-每个人的版本控制。

如果要通过Intranet共享,则可以使用:

  1. Gitolite服务器
  2. 具有裸存储库的公共共享目录

查看创建裸仓库的步骤。

在CLI模式下创建裸存储库

除了--bare参数之外,用于创建裸仓库的命令与用于克隆仓库的命令相同,这会有所不同。 git clone --bare C:\Users\raviepic3\Desktop\Workbench C:\generic_share\ Bare_Workbench 在控制台中执行前面的代码,应在您的通用共享文件夹generic_share中创建工作台存储库的裸克隆。

在GUI模式下创建裸存储库

使用GUI从现有存储库创建裸克隆是一个简单的过程。您需要做的是:

  1. 从现有存储库中复制.git目录,并在存储库外部粘贴一个different_name.git(您要给新的裸存储库提供的名称)。在我们的例子中,我们在C:\ Users \ raviepic3 \ Desktop \下有一个名为Workbench的裸仓库,其中包含content.docx。现在,我想使用GUI从此创建一个新的裸存储库。我将复制C:\ Users \ raviepic3 \ Desktop \ Workbench.git并将其粘贴为C:\ generic_share \ Bare_Workbench.git。

  2. config file使用文本编辑器打开 内部Bare_Workbench.git,找到显示该行的行, bare = false并将字符串false替换为true。

  3. 保存并退出。

在GUI中,您必须单击多次,并记住要编辑的文件。在CLI中,一个简单的命令即可为您完成所有操作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.