我如何将现有的Git存储库推送到Team Foundation Service
微软现在在Team Foundation Service上支持Git仓库。 我在Team Foundation Service上有一个账户,我想把现有的Git仓库推到那里。
每当我尝试search时,我都会继续寻找像TFS-GIT或GIT-TF的东西。 我敢肯定,我不想要那些,因为我认为那些更改为代码库的Team Foundation Server模型,这不是我想要的。
具体来说,我有一个现有的Git仓库,我想推到TFService。
好吧,我显然太过于复杂了。 这是我做的。
- 在TFService中创build一个新项目
- 在Visual Studio中连接到该项目
- 在Visual Studio中克隆该项目
git pull c:\source\oldGitProject
就是这样,它从旧的位置拉出了所有的变化,我可以很容易地把它推到TFService上。
“我如何将现有的git仓库推送到TFService?
一旦你在tfs.visualstudio.com上声明了一个git repo(见下面),把这个git repo url添加到你自己的本地仓库的远程仓库:
cd /path/to/local/repo git remote add tfs url://tfs/git/repo git push --mirror tfs
这足以将您本地回购的全部历史推回到TFS上新的上游回购。
再次,这个想法是在上游(TFS)创build一个新的空回购,并推动你的本地回购。
(原文答案)
如果我理解Scott Hanselman的博客文章 :
这个Git支持需要VS2012.2(目前在预览中),所以你需要首先安装,然后得到VSIX。 VS2012.2发布的时候,你可以同时更新,而Git VSIX将会继续通过VS Gallery自动更新。
它是一个完整的VS源代码提供者,所以你可以使用它来做大部分的事情,而不用离开VS,或者你可以在命令行挂出来,用它作为你的仓库状态的视觉提示。
对于团队,您可以访问http://tfs.visualstudio.com并注册一个帐户,并免费获得5个用户。; 您可以selectGit或Team Foundation版本控制(TFVC)作为源提供者,并将所有Team Foundation敏捷,scrum或其他模板用于ALM工具
这里说明了Git项目的注册过程,同时指出您需要在VS 2012 Update 2(VS2012.2)的“社区技术预览”之上进行Git VSIX的“社区技术预览” 。
上面的一些很好的答案,但我发现这更容易。
- 创build本地Git存储库。 (或者在我的情况下,我将我的SVN仓库转换为Git。)
- 转到visualstudio.com并创build新的项目,指定Git作为源代码控制。
- 点击VisualStudio.com新项目中的“代码”菜单选项。
-
屏幕将显示确切的Git命令来推送现有的存储库, 包括唯一存储库的URL 。 您只需将该命令复制并粘贴到Git命令提示符中即可。
git clone <repository url>
我们所需要做的就是改变现有的本地解决scheme/回购的服务器目标url。
所以:
- 在云(TFService)中,创build一个新项目并获取它的URL。
-
在本地机器上,在Visual Studio中打开现有的解决scheme/库,然后在包pipe理控制台(PMC)中运行以下命令
git远程设置url来源https://new.url.here
-
使用视图>团队资源pipe理器>不一致的提交将现有的解决scheme/回购推送到新的项目。
这将推动本地回购,包括所有以前的提交到云中新的TFS项目。
Git命令行FTW。
所有这些都是更新.git文件夹中的configuration文件中的[url origin]属性,所以如果你想打开和编辑这个文件,你可以使用记事本。 恕我直言,这个命令更清洁,因为你不会意外地编辑一些其他设置的风险,也不必离开VS.
注意:如果推入步骤3的选项被禁用,则可能需要执行另一个本地提交,以便“肮脏”源代码树的头部,从而启用push命令。 我相信会有另一个git命令来做到这一点。
我今天上午发现的其中一个博客链接了这个文件:
他们似乎有一个名为发布的内部命令(可能使用@VonC提到的–mirror命令?)
我不确定这是否还能工作。
今天遇到这个问题。 VonC的答案,添加TFS作为一个远程和使用git push --mirror tfs
,为我工作。 不过,提一些关于这个的更多的东西可能是有益的。
-
推后,Visual Studio仍然无法识别这个本地回购以任何方式连接到Team Foundation服务。 所以,你仍然需要select“连接到团队项目…”,并使用界面做一个“克隆”。 TFS的回购将被克隆,所有的东西都被推送。 在此之后,您将连接到TFS,并且应该能够在克隆中正常工作。
-
使用“–mirror”将推送所有本地引用,可能包括一些本地分支,这些分支在中央仓库中并不是真正想要的。 如果是这种情况,用'–mirror'推后,你应该使用
git push tfs :<branchname>
从TFS删除一个分支,以避免其他人以后拉你的本地分支机构。 -
或者,也可以不用'–mirror',而只需将所需的refs推入TFS repo中,就像其他任何git repo:
git push tfs <refspec>
。 由于TFS回购在这个阶段仍然是空的,一个接一个的分支名字应该足够作为一个<refspec>
。 如果使用这种方法,你也可以使用使用git push -u
,这也将使分支你推入空的回购跟踪分支。
编辑:正如Edward Thomson的评论中所提到的,如果您的原始库被configuration为跟踪来自TFS远程的分支,从TFS克隆应该是不必要的。 所以git push -u <refspec>
都应该把repo推到空的TFS repo上,并且还允许IDE识别原始的本地repo,因为它设置了跟踪。