4

我们使用 TFS 作为主要源代码控制,我想将 git 作为“前端”与git-tfs rcheckin命令一起使用,但我在将存储库导入 git 时遇到问题。

我的 TFS 中有两个项目

$/ProjectA
$/ProjectB

我想在一个 git 存储库中管理它们。

我如何将这两个克隆到一个 git 存储库中,以便我可以将更改作为一个 TFS 变更集提交和推送到两个项目?

我尝试使用git tfs subtree但不知何故我无法弄清楚这个工作流程。我的方法是初始化 git repo,如下所示,但出现无法恢复的错误:

> git init
Initialized empty Git repository in c:/somedir/.git/

> git tfs subtree add --prefix=ProjectA  http://tfs_server:8080/tfs/ $/ProjectA
executing subtree add
-> new owning remote default
-> new remote default_subtree/ProjectA
Fetching from TFS remote 'default_subtree/ProjectA'...
C3779 = 7e532464ef6120ac0b19aa3c7651ceae915dc366
C3780 = 16f4636fc53d729767f65213ed047c11d1a707ee
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
'git <command> [<revision>...] -- [<file>...]'
error running command: git subtree add --prefix=ProjectA "-m Add 'ProjectA/' from commit '16f4636fc53d729767f65213ed047c11d1a707ee'

git-tfs-id: [http://tfs_server:8080/tfs/];C3780" refs/remotes/tfs/default_subtree/ProjectA
Command exited with error code: 1
4

2 回答 2

2

我遇到了同样的问题,但是这个答案的一部分为我指明了正确的方向。

> git init
Initialized empty Git repository in c:/somedir/.git/

> git tfs subtree add --prefix=ProjectA  http://tfs_server:8080/tfs/ $/ProjectA
....
fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
Use '--' to separate paths from revisions, like this:
....

此错误可能来自git diff-index HEAD命令。当我尝试它时,我得到了完全相同的信息。

这里的问题是.. 还没有 HEAD。存储库是的。master 分支没有提交,因此没有头。只需添加一个虚拟提交,然后尝试运行git tfs subtree add ...,它就会正常工作。

git init
touch foo
git add foo
git commit -m "dummy commit to get a HEAD on master"
git tfs subtree add --prefix=AAA tfsurl $/path/to/AAA
git tfs subtree add --prefix=BBB tfsurl $/path/to/different/BBB

我的本地仓库像你的情况一样是空的,这个小技巧只是ambiguous argument 'HEAD'使用 git-tfs 0.25.0.0(TFS 客户端库 14.0)为我解决了 git 2.7.1.windows.2 上的错误

编辑:哦,一定要调用Windows Command Prompt 中的git tfs所有命令。至少在我使用的 git/gittfs 版本中,当从 git-bash 控制台调用时 git-tfs-subtree 无法正常工作,并且它会弄乱一些路径和 refspecs。

于 2016-06-28T16:14:11.927 回答
1

如果您在 TFS 上使用 Git:

最简单的方法是检查每个项目并将文件添加到单个 Git 存储库。

如果您在 TFS 上使用 TFVC:

没有办法做到这一点。您可以分别克隆每个 repo 并独立处理它们。您不能在一个 Git 存储库中拥有两种不同的分支结构。

如果您使用没有分支的 TFVC:

您可以使用 GitTF 子树功能拥有一个 Git 存储库,其中包含来自 TFVC 的两个独立同步文件夹。

我建议您永久迁移到 Git。

于 2014-09-20T13:56:13.313 回答