草庐IT

git - Windows 上的 Git 有哪些限制?

coder 2023-06-24 原文

我在任何地方读到有关 Mercurial 和 Git 的文章,他们通常都会写一两行,这意味着 Git 在 Windows 上的能力有限(因为某些 Shell 脚本无法移植等),但我从未遇到过明确提及它们的页面。而且大多数页面都有些旧。

Windows 上的 Git 在功能方面有哪些限制?并且必须在 Windows 上的 MinGW 和 MSYS 上运行 Git 有性能限制吗?

最佳答案

编辑:所以现在是 2016 年,距我在下面写下原始答案已经过去了六年。我已经大量使用 git 和 mercurial 好几年了,我也在 Mac 上开发了好几年。我已经非常熟悉并习惯在命令行上使用 git,但对于日常工作,我使用来自 Atlassian 的 SourceTree。这不是广告,只是更新此答案的注释。 SourceTree 是双重抽象:git/hg 的 ui 相同,Windows/Mac 的 ui 相同。当您必须经常切换平台和项目时,这变得非常有吸引力。

已写 a guide to setting up both client and server for Git on Windows ,我很清楚人们可以期待什么。此外,我的主要存储库(.git 文件夹)大约有 260MB 的源代码,因此对于 Windows 上的日常 Git 工作来说,这确实不是一项微不足道的性能测试。

我的总体印象是 Windows 上的 Git 对于人们可能遇到的绝大多数情况都非常快,只有一个非常大的异常(exception):git gui blame -C -C .默认情况下,git 不会责怪超出文件重命名边界的文件,以及额外的 -C -C必须传递参数才能实现这一点,但是事情真的会变慢。在现代硬件上需要 17 分钟才能为我们较大的 ~20 kloc 源文件之一生成完整的注释。这种延迟真的会分散你的注意力。

关于cygwin :

我只试过一次,并不是为了任何重要的事情。我真的想要一个本地解决方案。从各方面来看,cygwin 上的 git 运行良好。

关于TortoiseGit

Frank Li 做了大量工作,将现在熟悉的 UI 引入 Git 世界。 TortoiseGit 启动得非常快,因为大部分 UI 都可以从 TortoiseSVN(以及其他工具,如 TortoiseMerge)获得,而且我在这个界面上做了很多工作。一般来说,如果您熟悉 TortoiseSVN,它可以让您非常快速地开始使用 Git。开发人员煞费苦心地使用 TortoiseSVN 世界中的术语并将它们映射到 git 命令。例如,还原实际上执行 git checkout <file>在引擎盖下。

总的来说,以这种方式使用 Git 是非常无缝的,我必须承认我在使用 TortoiseGit 界面时学习了 Git:而且必须承认这对我的教育造成了阻碍。 TortoiseSVN 之类的日志查看器并不真正适用于分布式 vcs 工作流(它工作得足够好,您可以像使用 SVN 一样使用 Git),而且您只能在以后发现这一点,因为只有在有很多问题时才会出现问题,许多开发分支(gitk 工具在处理此显示方面要好得多)。另一个问题是,即使在使用 TortoiseGit 数月之后,我仍然连最基本的 git 命令都不知道。 TortoiseGit 并没有什么真正的问题,而且当它们确实发生时,错误会很快得到修复;主要问题似乎是 UI 中的设计问题(可能不止一个),这是 gitkgit gui由于较长的开发历史,或者对 git 惯用用法的更深入了解,或者类似的东西,开发人员已经制定了。

关于命令行使用:

MSYS git development team真正应该感谢那些甚至费心去做他们所做的所有工作的人,如果没有他们的支持,mingw git 分支可能永远不会与主线 merge 。

我现在已经开始在 Git Bash shell 中使用 msysgit 作为我唯一的 git 界面几个星期了。我的印象是,虽然最初的学习似乎比较困难,但是一旦掌握了知识,其他一切都变得容易了。 This reference在我看来,这是在命令行上学习 git 的真正更好的引用之一。

作为 Windows 上的 Git 用户,并且来自使用 TortoiseGit 接口(interface)到 git 的扩展经验,这是我工作流程的总结,涵盖了 95% 以上的需求(全部在 Git Bash 中,而不是 Windows 命令 shell ( cmd)):

  • 检查修改

    git status

  • 切换分支

    git checkout some-feature-branch

  • 拿来

    git fetch

  • 显示日志(&gitk 进程从 shell 中分离出来,这样 shell 在允许更多命令之前不会等待 gitk 关闭)

    gitk &

  • promise :要么
  • 简单提交:

    git commit -a -m "This is my commit message"

  • 复杂的多次连续提交:

    git gui

  • 推送到分支:master

    git push origin master

  • merge (例如在 Fetch 之后)

    git merge origin/master


  • 我还没有解决任何冲突,但我会在时机成熟时弄清楚(欢迎评论:)。

    编辑:对于冲突解决,kdiff3 是要走的路。设置很简单,从简单的差异到三路 merge ,一切都可以可靠而迅速地工作。

    结论
  • Windows 上的 Git 功能齐全,如宣传的那样工作,并且是 不限于 Windows .
  • 性能一般都很好,但综合大怪可能会很慢。
  • TortoiseGit 界面很诱人,但最终并不令人满意:您应该尝试在命令行上学习 git。我两个都做过,而且这条路线效率更高。
  • 关于git - Windows 上的 Git 有哪些限制?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3313561/

    有关git - Windows 上的 Git 有哪些限制?的更多相关文章

    1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

      我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

    2. ruby-on-rails - date_field_tag,如何设置默认日期? [ rails 上的 ruby ] - 2

      我想设置一个默认日期,例如实际日期,我该如何设置?还有如何在组合框中设置默认值顺便问一下,date_field_tag和date_field之间有什么区别? 最佳答案 试试这个:将默认日期作为第二个参数传递。youcorrectlysetthedefaultvalueofcomboboxasshowninyourquestion. 关于ruby-on-rails-date_field_tag,如何设置默认日期?[rails上的ruby],我们在StackOverflow上找到一个类似的问

    3. ruby-on-rails - openshift 上的 rails 控制台 - 2

      我将我的Rails应用程序部署到OpenShift,它运行良好,但我无法在生产服务器上运行“Rails控制台”。它给了我这个错误。我该如何解决这个问题?我尝试更新ruby​​gems,但它也给出了权限被拒绝的错误,我也无法做到。railsc错误:Warning:You'reusingRubygems1.8.24withSpring.UpgradetoatleastRubygems2.1.0andrun`gempristine--all`forbetterstartupperformance./opt/rh/ruby193/root/usr/share/rubygems/rubygems

    4. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

      我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

    5. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

      这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

    6. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

      之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

    7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

      深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

    8. git使用常见问题(提交代码,合并冲突) - 2

      文章目录git常用命令(简介,详细参数往下看)Git提交代码步骤gitpullgitstatusgitaddgitcommitgitpushgit代码冲突合并问题方法一:放弃本地代码方法二:合并代码常用命令以及详细参数gitadd将文件添加到仓库:gitdiff比较文件异同gitlog查看历史记录gitreset代码回滚版本库相关操作远程仓库相关操作分支相关操作创建分支查看分支:gitbranch合并分支:gitmerge删除分支:gitbranch-ddev查看分支合并图:gitlog–graph–pretty=oneline–abbrev-commit撤消某次提交git用户名密码相关配置g

    9. ruby-on-rails - Ruby - 如何从 ruby​​ 上的 .pfx 文件中提取公钥、rsa 私钥和 CA key - 2

      我有一个.pfx格式的证书,我需要使用ruby​​提取公共(public)、私有(private)和CA证书。使用shell我可以这样做:#ExtractPublicKey(askforpassword)opensslpkcs12-infile.pfx-outfile_public.pem-clcerts-nokeys#ExtractCertificateAuthorityKey(askforpassword)opensslpkcs12-infile.pfx-outfile_ca.pem-cacerts-nokeys#ExtractPrivateKey(askforpassword)o

    10. ruby-on-rails - 您希望看到哪些 Rails 插件? - 2

      您认为可以作为插件很好地存在于您的Rails应用程序中必须实现的哪些行为?您过去曾搜索过哪些插件功能但找不到?哪些现有的Rails插件可以改进或扩展,如何改进或扩展? 最佳答案 我希望在管理界面中看到一个引擎插件,它提供了应用程序中所有模型的仪表板摘要,以及可配置的事件图表。 关于ruby-on-rails-您希望看到哪些Rails插件?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questio

    随机推荐