使用 Git 和 Visual Studio

1464
作为长期使用Visual SourceSafe(VSS)的用户(并且厌恶它),我正在讨论是否转向SVN,我的同事建议使用Git。因为显然它可以在没有中央服务器的情况下用作点对点(我们是一个由3名开发人员组成的团队)。
不过,我没有找到任何将Git与Visual Studio集成的工具 - 是否存在这样的工具?
有哪些可用于使用Git与Visual Studio的技术?在开始之前,我需要了解它们之间的区别吗?

4
我刚刚为 VS 2010 添加了 Git 源代码控制提供程序,所以它仍然可以使用。 - Wade73
3
请查看来自VS团队的教程:http://blogs.msdn.com/b/visualstudioalm/archive/2013/01/30/getting-started-with-git-in-visual-studio-and-team-foundation-service.aspx。下一个更新,即VS 2012的Update 2,随时都会到来。您也可以从这里下载VS2012的社区技术预览版(CTP): http://go.microsoft.com/fwlink/?LinkId=273878。或者,如果您对CMMI、敏捷、Scrum 1/2等有兴趣,您可以注册免费账户(公共或私有云实例),并邀请成员(团队成员、客户)在基于Web的TFS上共同进行项目: http://tfs.visualstudio.com - Annie
3
我已经使用Visual Studio和Git两年了。我认为解决这个问题的最好方法是使用一个单独的源代码控制应用程序,比如Atlassians SourceTree。它免费、易于安装、有良好的图形用户界面且易于使用,您可以像在Chrome浏览器中浏览网页一样浏览多个存储库(即不同的项目),而且最重要的是,支持多个源代码控制系统。试试看吧!我向您保证,您不会失望的! - Fazi
2
Git从Visual Studio 2013开始natively得到支持。 - rustyx
17
我喜欢这个问题已经得到1342个赞,但还是有些白痴关闭了它。好样的StackOverflow... 如果有很多人发现它很有帮助,那么它不符合SO的标准有什么关系呢?这个网站的目的不就是为了帮助吗? - thebunnyrules
显示剩余4条评论
16个回答

1072

2013年1月,微软宣布将在其所有应用生命周期管理产品中添加完整的Git支持。他们已经为Visual Studio 2012发布了插件,以添加Git源代码控制集成。

另外一个选择是名为Git扩展的项目,它包括适用于Visual Studio 2005、2008、2010和2012的插件,以及Windows Explorer集成。该项目会定期更新,我在几个项目中使用它时发现它非常有用。

另一个选项是Git源代码控制提供程序


9
根据这个页面(http://code.google.com/p/gitextensions/),它是一个适用于VS 2005/2008的插件。 - Jonas
10
更正一下 - 源代码托管在Github上,但MSI文件不是。 - Chris S
5
我已经安装了Git扩展程序,它通过Visual Studio工作,但没有完全集成。是否有解决方案可以从解决方案资源管理器中实现签入和签出操作? - Dani
4
Dani,有人正在为VS开发一个Git源代码控制提供程序,似乎提供了更深层次的集成:http://gitscc.codeplex.com/ - Jon Rimmer
3
2012年版的VS有哪些选项? - Earth Engine
显示剩余16条评论

202

我在将协议缓冲区移植到C#时使用Visual Studio和Git。我不使用GUI - 我只是保持命令行打开以及Visual Studio。

大部分时间都很好 - 唯一的问题是当您想要重命名文件时。 Git和Visual Studio都希望他们自己来重命名。我认为在Visual Studio中重命名它是正确的方法 - 只需小心在之后的Git方面所做的操作就可以了。虽然这在过去有点困难,但我听说在Git方面实际上应该非常无缝,因为它可以注意到内容大多相同。(通常不完全相同,大多是在重命名类时才会重命名文件。)

但基本上 - 是的,它很好用。我是一个Git新手,但我能让它完成我需要它完成的所有事情。确保有一个git ignore文件用于bin和obj,以及*.user。


35
对于 Git 而言,使用 VS 进行重命名是可以的。如果希望在 Git 日志中跟踪重命名,则需要确保将“删除”部分和“添加”部分一起提交。如果你的 .gitignore 文件是最新的,使用 git add -A 命令会让这个过程变得简单。 - CB Bailey
40
我也是一个 Git 新手,说实话,我更倾向于使用命令行。如果将 Git 的权限交给试图在背后做一些“聪明”和“魔法”的 GUI,我会有点害怕。请注意,以上是我的个人看法,仅供参考,不代表一定正确。 - hasen
1
谢谢你的建议。我刚转到Git(和Github),从此不再回头。我的客户使用Perforce(呃!),所以我的计划是从Perforce做一次检出,然后使用Git完成我的工作,最后再进行检入。 - Mark Beckwith
7
你做了一个大胆的假设,认为初学者在使用Git命令行时会遇到困难。看一下hasan j在2009年4月的评论。 - Jon Skeet
CXSharp好用的忽略模板链接似乎已经失效了。请尝试使用这个链接代替:https://github.com/github/gitignore/blob/master/VisualStudio.gitignore - MZB
显示剩余8条评论

93

有没有可能让它在2005年运行? - Art
3
说实话,这个图形界面正是我在搜索 VS 2010 中 git GUI 时所需要的。感谢您发布这个。其他答案不符合我的要求,与 VisualSVN 相比显得很差。 - JDPeckham
1
在决定安装之前,我建议查看 https://marketplace.visualstudio.com/items?itemName=yysun.GitSourceControlProvider#review-details 中的评论部分。 - QMaster

52

我在工作中曾经研究过这个问题(包括Subversion和Git)。实际上,Visual Studio有一个源代码控制集成API,允许你将第三方源代码控制解决方案集成到Visual Studio中。然而,大多数人并不会为此费心,原因如下。

首先,该API几乎假定你正在使用一种锁定-检出工作流程。其中有很多钩子,在使用更现代的编辑合并工作流程时,要么非常昂贵,要么根本没有意义。

其次(与之相关),当你使用Subversion和Git鼓励的编辑-合并工作流程时,你不需要真正地需要Visual Studio集成。SourceSafe与Visual Studio的主要杀手级功能是你(和编辑器)可以一眼看出哪些文件是你拥有的,哪些文件在编辑前必须检出,哪些文件即使你想检出也不能检出。然后它可以帮助你在想编辑文件时进行任何修订控制。所有这些都不是典型的Git工作流程的一部分。

当你使用Git(或者通常是Subversion)时,你的修订控制交互全部发生在你的开发会话之前或之后(一旦你已经完成了一切工作并测试),此时使用不同的工具也不会造成太多麻烦。你并不需要经常来回切换。


22
你们从不移动或重命名文件/目录吗?我几个月前开始使用VisualSVN,现在我再也离不开它了。 - JohnOpincar
10
对我来说,这意味着在长时间开发后,您需要记住每个文件更改的原因,直到您进行检入操作。如果我正在处理某个问题,并且发现需要修复一个不相关的区域,我喜欢先进行检出,进行修复,然后再进行检入操作,这样我就可以把这个变化从我的记忆中清除。我更愿意在 Visual Studio 中进行此操作。 - Peter M
4
Git Extensions Visual Studio插件并不试图强行嵌入Microsoft提供的老式锁定-检出源代码控制API。它非常适合编辑-合并工作流,并且基本上只是在IDE中添加提交/推送/拉取和文件历史记录功能。在上下文菜单中拥有文件历史记录非常有用! - Jacob Stanley
3
我不同意,主要是因为必须离开 Visual Studio 去检查会导致提交之间的时间更长。已经有太多人在一天开始时签出并且直到最后(或更糟的是几天后)才签入。与 Visual Studio 集成可以让您在工作流程中不断地保持源代码控制。 - Chris McGrath
8
自 Visual Studio 2005 (或 VS2003?) 起,其源代码控制集成并不特别倾向于一种签出-签入模型。以 AnkhSVN 为例。我更喜欢使用 VS 集成,因为这样重命名等操作更加流畅。 - Roger Lipscombe
显示剩余4条评论

38

我发现,由于Git是整个树结构的操作方式,它从IDE集成中获得的好处要比基于文件或遵循签出-编辑-提交模式的源代码控制工具少。当然,有时点击一个按钮进行历史记录检查可能很方便,但我不太想念它。

真正必须做的是让您的.gitignore文件包含不应在共享存储库中的内容。我的通常包括(除其他东西外)以下内容:

*.vcproj.*.user
*.ncb
*.aps
*.suo

但是这篇文章明显偏向于 C++ ,很少或根本没有使用任何类向导样式的功能。

我的使用模式大致如下:

  1. 在 Visual Studio 中编写代码。

  2. 当满意(合理的中间点提交代码),切换到 Git,暂存更改并检查差异。如果有明显错误,请返回 Visual Studio 并进行修复,否则提交。

任何合并、分支、变基或其他高级 SCM 操作都可以轻松使用 Git 命令提示符完成。Visual Studio 通常对被修改的项目文件有较好的适应性,尽管有时需要重新加载一些项目。

我发现 Git 的实用性超过了没有完整 IDE 集成所带来的任何微小不便,但在某种程度上,这是一个品味问题。


11
你绝对应该将项目文件放在版本控制下,以便管理和追踪。 - CB Bailey
1
这非常重要 - 一旦开始提交和分支,忘记在.gitignore中包含某些内容后进行恢复是非常痛苦的,至少可以这么说... - Benjol
3
@Benjol:这不应该很痛苦。您只需要在活动分支的提示下执行“git rm <文件>”和“echo <文件> >> .gitignore; git add .gitignore”命令。一旦您提交了一次更改,您就可以随时将修复程序挑选到其他分支上。 - CB Bailey
1
@Charles Bailey,看看我在这个问题中的冒险经历:https://dev59.com/L3I-5IYBdhLWcg3wYXP8 - Benjol
9
他正在忽略*.user文件,这些文件是特定于用户的设置。 - Srdjan Jovcic
显示剩余5条评论

31

我推荐这个,因为它是微软官方产品。而且可以安装在VS 2012 express上。 - Cheung

28

是的,这是一个不错的用户界面,但是它并没有与Visual Studio集成。 - Scott Rippey
3
Git源代码控制提供程序将TortoiseGit命令添加到Visual Studio的上下文菜单中。 - HotN

26

对于Visual Studio 2012,这是最佳答案。看起来他们在实现上投入了很多精力,并且根据我的经验,它的效果符合预期! - RoelF
2
我一直没有弄清楚如何配置微软的“Visual Studio Tools for Git”以使用私有Github存储库。你看到过相关的文档或教程吗? - golliher
在决定安装之前,我建议查看 https://marketplace.visualstudio.com/items?itemName=TFSPowerToolsTeam.VisualStudioToolsforGit#review-details 中的评论部分。 - QMaster

19

Visual Studio 2013原生支持Git。

请查看官方公告


18

微软在Visual Studio中提供的Git支持仅足以完成基本工作(提交/获取/合并与推送)。我的建议是尽量避免使用它...

我强烈推荐使用GitExtensions(或者稍微比例小一些的SourceTree)。因为对我来说,看到DAG真的很重要,以了解Git的工作原理。而且你能更加了解其他项目贡献者所做的工作!

在Visual Studio中,你无法快速查看文件之间的差异或提交之间的差异,也无法(将修改)添加到索引并仅提交部分修改。浏览历史记录也不好...所有这些都会导致痛苦的体验!

例如,GitExtensions捆绑了有趣的插件: 后台获取、GitFlow,...现在还有持续集成

对于Visual Studio 2015的用户,如果安装GitHub扩展,Git会形成。但是外部工具仍然更好;-)


GitExtensions对你在vs 2015上可用吗?菜单对我不起作用。https://github.com/gitextensions/gitextensions/issues/2815 - raklos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接