EdF*_*red 4 git tfs branching-and-merging tfs2012 git-tf
似乎既没有--deep也--shallow没有效果.尝试git-tf checkin --deep在TFS中对新文件夹(当前为空)执行错误时收到错误.我有一个git repo,有很多历史.作为git-tf的一部分,我很乐意保留/迁移到TFS.
我的理解是,checkin --deep每次提交都会在TFS中创建一个类似的变更集.问题是,git repo中的任何提交似乎都是合并的结果(我们在这个repo中有很多合并)似乎使git-tf命令非常不满意并报告我在标题中提到的错误消息(使用[commitid]的异常被替换为实际的提交id(例如9a26d8)).
我不确定我是否完全错过了这里的船或什么.是否有可靠的方法将历史上多次合并提交的预先存在的git repo移植到TFS?我希望这是一个原始的功能/修复.我希望我错过了什么.我对TFS非常不满意,但不像git那样经验丰富,所以对任何帮助表示赞赏.
Edw*_*son 16
这里的问题是在TFS中表示复杂的合并历史很困难.很简单,git提交可以有多个父项,而TFS变更集只能有一个.
考虑一下我的git存储库在某次提交时有HEAD的状态,比如说9c42ef....现在我进行更改并提交它,创建一个新的提交1f23cd....同时,我也从Bob那里做了一个改变,这也是一个基于的提交9c42ef....他的更改是提交ID f41ac3....如果我想要包含两个更改,我将不得不进行合并,并且假设我最终得到了提交ID 7acdfe....现在你的图表看起来像这样:
1f23cd
/ \
9c42ef 7acdfe (HEAD)
\ /
f41ac3
Run Code Online (Sandbox Code Playgroud)
这不能在TFS中轻松表示,因为单个变更集只能有一个祖先(变更集直接在它之前).所以我们需要线性化历史记录.这就是为什么存在--squash和--auto-squash选项git-tf checkin(进行深入检查时).
该--squash选项允许您选择在历史记录中使用哪条路径.例如:
git-tf checkin --deep --squash f41ac3
Run Code Online (Sandbox Code Playgroud)
将省略f41ac3走在曲线图时,你将有三个变更,内容9c42ef,1f23cd和7acdfe.但是在一个大图中,指定每个提交壁垒需要做很多工作.在这种情况下,--auto-squash将使用一些魔法来确定要遵循的路径.(它更喜欢具有最长提交链的路径,以便您获得尽可能多的历史记录,如果两个段具有相同的长度,将使用时间戳来确定要遵循的路径.)
git-tf checkin --deep --auto-squash
Run Code Online (Sandbox Code Playgroud)
您还可以重新设置,以便您检入的提交是线性的,每个提交只有一个父级.
该git-tf开发者使用的每个取决于树的复杂性,这些策略的,关于输入法SHA1哈希无尽的字符串和月亮的相位自虐的感觉.
| 归档时间: |
|
| 查看次数: |
2193 次 |
| 最近记录: |