从TFS到Git


14

我是.NET开发人员,并且多次使用TFS(团队基础服务器)作为源代码控制软件。TFS的良好功能是:

  1. 与Visual Studio的良好集成(因此我几乎可以直观地完成所有操作;没有控制台命令)
  2. 便捷的退房,入住流程
  3. 易于合并和解决冲突
  4. 简单的自动化构建
  5. 分枝

现在,我想将Git用作我的开源项目的骨干,资源库和源代码控制。我的项目使用C#,JavaScript或PHP语言,并使用MySQL或SQL Server数据库作为存储机制。

为此,我只是使用了github.com的帮助,并在那里创建了配置文件,并下载了Git的GUI。到这部分是如此简单。

但是我几乎坚持不下去了。我只想做一些简单(真的很简单)的操作,包括:

  1. 在Git上创建项目并将其映射到笔记本电脑上的文件夹
  2. 检出/检入文件和文件夹
  3. 解决冲突

那就是我现在要做的。但是,似乎GUI并不那么用户友好。我希望GUI具有一个Connect To...或类似的名称,然后希望显示一个项目列表,当我选择一个项目时,希望看到该项目的文件和文件夹列表,就像浏览TFS项目一样在Visual Studio中。然后,我希望能够右键单击文件,然后选择check-in...或之类的check-out东西。

我期望很多吗?我应该怎么做才能像TFS一样轻松使用Git?我在这里想念什么?


8
一年前,我从SVN切换到git,对此我感到非常高兴。我不会向任何人推荐SVN,除非是严格的命令行讨厌者。一旦学习了git,就会爱上它。
maaartinus 2011年

14
为什么Windows的人们如此痴迷图形界面?
tdammers 2011年

8
@tdammers因为Windows上的命令行像地狱一样烂?我知道,有PowerShell,但是他们使用它吗?
maaartinus 2011年

3
@Saeed,首先,您期望会有诸如在git中签入和签出文件之类的东西。多年来,没有可用的VCS。
Daniel Roseman

1
推荐阅读:ericsink.com/entries/vcbe_print_edition_free.html它解释了版本控制的基础以及集中式和分散式(记住仍然可以使用中央服务器)之间的区别。–
Inca

Answers:


19

git的优势来自放弃许多关于VCS应该做什么的旧假设。git的缺点来自于无法利用先前的经验,也无法以惯常的方式做事。

如果要从其他内容切换到git,请尝试启动tabula-rasa(尽管实际上不可能这样做)。评估它基于它做什么和它如何做它,而不是如何它比起来,你如何被用来做这件事。这不是您期望太多,而是您的期望与git提供的正交。如果您习惯使用GUI操作,将感到失望。Git确实提供了gui工具,但是并没有增加太多。这不是提供太多的失败,因为gui可以添加的东西太多了。GitK的确不是在日常操作中提供帮助,而是在可视化分支结构以及检查或搜索历史记录方面提供帮助。

这就是我所说的“正交”的愚蠢类比。您可以用报纸做的一件事是将鱼包裹起来,或用它衬鸟笼。但是这些对于报纸的功能不是必不可少的,它们是报纸形式的附带特征。期望git可以“检入文件”或“允许您选择项目”,或提供“连接...”有点像期望能够包裹鱼或使鸟笼挂在报纸网站上


糟糕,我忘了解释修改了。我刚起床,想喝点咖啡,就把最后一段添加到我的脑海中。
kylben 2011年

3
最后喜欢这个比喻。+1
Yam Marcovic 2012年

7

你考虑过水银吗?就像git一样,它是一个DCVS,可以让您完成DCVS可以完成的所有工作。像git一样,有一个很好的基于云的服务提供商(bitbucket)。但是,与git不同,windows的故事相当不错,您不是二等公民。您有很好的工具选项(TortiseHG)和相当不错的Visual Studio集成(VisualHG)。

但是,在Visual Studio中,没有什么比TFS更好的了-世界之间的联系并不那么紧密。


1
我同意,几年前我从VSS搬到了Mercurial,这真是一个顿悟。突然我可以做一些我从未想过的实用的事情。然后我搬到那里svn,错过了许多事情太简单了hg。现在,我搬到这里,git并感到百感交集。我喜欢找回我想念的许多设施svn,但是hg与不必要的复杂性相比,我仍然想念的简单git。即使只是在Windows上安装TortoiseGit,也需要您跳过箍,而TortoiseHg根本不需要。
Mark Booth,

@Mark Booth:我同意git并不是很友好,但是有什么不必要的复杂性呢?安装问题不算在内,它们可以归因于TortoiseGit(这是一个不同的程序)或Windows。
maaartinus 2011年

这在聊天时会更好,但是我认为索引/缓存/暂存区域不需要任何内容​​,恕我直言,默认情况是应提交所有内容,如果需要,可以选择部分提交(最好还是搁置所做的更改) (不要立即执行,请重新运行单元测试,提交然后搁置)。我也不想在需要时明确创建一个新分支。使用hg,每当您提交给非head时,都会无提示地创建一个未命名的分支。在git中,如果您离开头部而没有分支,则可能会丢失它,然后将其垃圾回收!
Mark Booth,

6

一年前,我从SVN切换到git,对此我感到非常高兴。但是,我不依赖任何GUI,以防万一您严格拒绝命令行,这可能是一个问题。

您似乎希望git能像以前一样工作,但事实并非如此。这并不难,但是在继续之前,您应该先了解其原理。

在Git上创建项目并将其映射到笔记本电脑上的文件夹

Git是分布式的,这意味着您始终使用本地存储库,该存储库可映射到任意数量的远程数据库,包括零个。当与其他人的项目一起玩时,我使用了两个遥控器:他们的git或SVN存储库以及我自己的服务器。

我总是从创建一个空目录开始,然后是git initgit clone SOME-REMOTE-REPOSITORY此链接可以为您提供帮助。

检出/检入文件和文件夹

您错过了编写正在使用的GUI的记录。双方TortoiseGitgit-gui肯定可以做到这一点。

解决冲突

为此,我正在使用git-gui或我最喜欢的文本编辑器。

我希望GUI可以连接到...或类似的东西

当可能有0到N个遥控器时,连接到什么?Git不会保持与远程服务器的连接,它只会临时创建连接,并且仅针对与远程存储库一起使用的一些命令创建连接。大多数工作在本地完成。

然后我希望显示项目列表

我是按projects你的意思假设的repositories

恐怕没有这种东西。远程服务器上的Git严格仅与一个存储库一起使用。列出所有存储库等同于列出包含子目录的所有目录.git。我肯定有这样的事情GitHub

我选择一个,我希望看到该项目的文件和文件夹列表,就像浏览

再说一次,恐怕没有这种东西了,因为它git在本地工作。再说一次,它没什么用。只需克隆存储库并在您的计算机上进行浏览。虽然克隆大型存储库需要一些时间,但所有后续操作都快得多,并且您可以查看任何提交或分支。

然后,我希望能够右键单击一个文件,然后选择“签到...”或“签出”之类的东西。

同样,git在本地工作。因此,签入或签出远程仓库没有任何意义。即使在快速LAN上,以这种方式工作也浪费时间。将存储库获取到您的计算机上,对其进行处理,然后git push对远程服务器进行更改。考虑一下它,就像发布更改并进行备份一样。您应该经常在本地提交

在开始工作之前,git fetchgit pull从遥控器进行更改(以防其他人使用它)。

我期望很多吗?

是的,没有。您期望与提供的东西有所不同。您可以得到更好的东西,git功能强大,灵活,安全,快速,如地狱般,可以做您需要的所有事情,但是它不能完全模仿集中式VCS的功能。


5

我已经使从视觉源到tfs到svn到git的旅程变得安全了。

从vss到tfs是一种愉快的经历。从tfs转到svn是一种愉快的经历。从svn转到git一直是一场内部战争。

通常,我发现自己很保守,我尝试坚持有效的方法。对于我而言,一个不错的gui比命令行更可取,我发现自己正在寻找一些gui,可以让我和和我一起工作的酷孩子一起玩。他们都只在命令行中使用git。

一旦我放弃寻找银弹gui并开始尝试git bash的尝试,我的尤里卡时刻就来了(我还在学习)。

我安装了一些GUI,它们从命令行补充git。Git扩展程序,Visual Studio和Torrise git的Git源代码控制提供程序。但是我说要熟悉git bash。这些命令可能有点晦涩难懂,但是一旦您学习了它们,它们就会比gui快得多。

与其他分支相比,使用git分支只是很棒。创建分支并几乎立即在分支之间切换。您可以做一些您不会用svn做的事情,因为svn基本上是复制您的工作副本(至少是我这样做的方式)。

我发现Git的学习曲线比svn陡。但是一旦您用git“获得它”,您就不想再回头了。

一路Git。


5

您已经习惯于使用服务器来存储文件,并且是文件的万能所有者。要编辑文件,您必须请求服务器的许可。

Git不是那样的。以这种方式考虑git:您拥有本地存储库。Git允许您提交更改,反向提交,轻松快速的分支等。当您要备份源代码控制历史记录时,可以更改送到另一个存储库,该存储库“恰好是”服务器,例如GitHub.com。

工作流程:

  1. 克隆(下载)/创建存储库
  2. 进行一些更改。继续发展而不关心他人。
  3. 推送到另一个存储库(可以是像GitHub这样的服务器)。
  4. 当您推送到存储库时,将通知其他存储库的所有者未决的推送,并且必须决定是接受,拒绝还是仅接受其中的一部分。
  5. 循环继续进行。

就这些。


1

git gui是什么意思?如果我没记错的话,其中有不计其数的内容,包括用于Visual Studio集成的插件。如果一个GUI不适合您,请尝试其他操作,直到找到适合您的GUI。我个人使用不同的GUI来完成不同的任务(其他人则使用CLI)。

但是,git比固定系统更像是版本控制框架。您仍将需要学习一些基础知识以充分利用它。


-2

我期望很多吗?

我应该怎么做才能像TFS一样轻松使用Git?

没有。Git以CLI为中心,并且没有任何良好的前端(我知道TortoiseGit,与其他Tortoise *相比,这是没有答案的)。您可以尝试使用SmartGit(提防Java)


1
-1:检入/检出文件和解决冲突并不是源代码管理中的“期望值很高”。
史蒂文·埃弗斯

2
+1直接从远程服务器检查它们毫无意义。只是速度很慢,即使是通过LAN也是如此。这样做是FTP的目的,而不是VCS。
maaartinus 2011年

1
对于VCS,“签入/签出”文件不是基本操作。它是大多数VCS共有的一种实现功能,并且具有细微但不幸的副作用。
kylben 2011年

2
@kylben:签入/签出是查看版本控制的一种方法;编辑和合并是另一种方式。某些VCS使用前一种方法,为您提供排他锁,并可以检出单个文件。其他人则采用后者,然后您下载整个存储库,进行本地更改,然后将其推回远程;VCS负责管理冲突的更改,如有疑问,请您提供输入。两种方法都不是更好的方法,但是您通常无法将VCS弯曲成尚未制造的VCS。
tdammers 2011年

1
通过“签入/签出”,我实际上是在谈论基于锁的VCS的实现方式,而不是您如何下载源文件进行编辑(这实际上是每个VCS都必须能够做到的)。许多VCS只是将下载文件的过程称为“签出”这一事实有点有点误以为是IMO-未检查任何内容,并且存储库不记得谁拥有文件。
tdammers,2011年
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.