我如何使用git-tfs和惯用的git分支来对付TFS库?
如何按照习惯使用git-tfs?
-
git的用法是检出分支到版本库的根目录 。 检出分支将用该分支的内容replace该目录的内容。
-
TFS习惯用法是检查存储库根目录下的不同目录中的每个分支 (即使是master或trunk分支)。 检出一个分支将把它放在一个新的目录旁边。
使用git-tfs ,我可以克隆一个TFS仓库或分支到一个git仓库。 我想以与git分支成语一致的方式在一个带有多个分支的TFS存储库上工作 。 但我不知道什么是技术上的可能或推荐:)
克隆整个TFS信息库
如果我克隆整个存储库的TFS
> git tfs clone http://<tfsurl>:8080 $/main
这会给我一个包含所有 TFS分支作为目录的git master
。
[master]> dir trunk feature-logon feature-search release-0.0.1
添加一个远程每个TFS分支
我不知道是否可以(或如何)将git remote映射到每个TFS分支。
> git init . [master]> git tfs clone http://<url> $/main/trunk .
然后
[master]> git checkout -b feature-logon [feature-logon]> git tfs clone http://<url> $/main/feature-logon .
我知道这在技术上是不正确的,但我不知道没有更好的玩(我唯一的TFS回购非常大,实验花了很长时间)
如果使用git-tfs进行克隆,现在可以得到TFS分支是正确的Git分支。 这是现在在稳定版本! 您首先克隆不是整个存储库,但是主干:
git tfs clone http://<tfsurl>:8080 $/main/trunk
然后你运行branch --init
,在Git仓库中创build一个新的分支
git tfs branch --init $/MyProject/MyTFSBranch
在你的情况下:
git tfs branch --init $/main/feature-logon
或者使用全新克隆的存储库上的--all
标志来创buildTFS服务器上的所有分支。
git tfs branch --init --all
您也可以使用标志--with-branches
直接克隆所有--with-branches
:
git tfs clone http://<tfsurl>:8080 $/main/trunk --with-branches
这个新命令的文档在这里 。 随时提供反馈,以改善它…
这里有一个方法可以做到这一点,并仍然保持主人和分支机构之间的一些关系。 你可能想要编写脚本。 对不起,如果我使用bash语句,而不是Windows命令行的一些例子
首先将整个存储库克隆出来,就像在第一个例子中一样,将分支作为目录。
这将树干移动到根。 (希望与您的分支文件夹没有冲突)
mv trunk/*.* .
提交你的新主人
git commit -a -m "refactoring master"
创build一个新的分支
git checkout -b feature-login
将分支文件复制到根文件中
mv feature-login/*.* .
这里不再需要这些了
rm -rf [all_branch_directories]
提交分支
git commit -a -m "refactoring feature-login"
回到主人
git checkout master
重做一次
git checkout -b next_branch
等等。
最后在最后
git checkout master rm -rf [all_branch_directories] git commit -a -m "refactoring master"
这不是完美的,但是你最终会把你所有的分支都克隆出来,并且或多或less的适当分配。 如果用另一个文件覆盖文件,AFAIK git应该没问题,但是内容不会改变,这样就可以工作了。
一个缺点是你不会清除分支中已经被删除的任何文件。 这可能是也可能不是你的问题…
怎么样多个远程tfs-repos,每个分支1? 我有以下结构:
$/Root/Main/someproject (the trunk) $/Root/Releases/Branch1/someproject $/Root/Releases/Branch2/someproject
我做了什么
git tfs quick-clone http://tfs:8080/tfs/defaultcollection $/Root/Trunk GitRepo git tfs quick-clone http://tfs:8080/tfs/defaultcollection $/Root/Releases/Branch1 GitRepo -i branch1 git tfs quick-clone http://tfs:8080/tfs/defaultcollection $/Root/Releases/Branch2 GitRepo -i branch2
那么你可以为每个远程分支创build一个分支: git checkout -b localbranch1 tfs/Branch1
并提交到tfs分支git tfs ct -i branch1
为了能够轻松地合并这两条线创build一个嫁接:
echo branch-commit-id trunk-parent-id > .git/infos/grafts
其中ids是第一个分支提交(来自Releases回购)和一个父提交ID(手动查找)的散列,
PS:我得到的错误:指定的git仓库目录也不是空的(不知道它是如何工作的),所以我手动添加第二个URL在.git /configuration,并没有git tfs fetch -i Branch1