- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
似乎 --deep
或 --shallow
似乎都不起作用。尝试对 TFS 中的新文件夹(当前为空)执行 git-tf checkin --deep
时出现错误。我有一个有相当多历史的 git repo。作为 git-tf 的一部分,我很乐意保留/迁移到 TFS。
我的理解是 checkin --deep
会在 TFS 中为每次提交创建一个类似的变更集。问题是 git repo 中任何似乎是 merge 结果的提交(我们在这个 repo 中有很多 merge )似乎使 git-tf
命令非常不高兴并报告我在标题中提到的错误消息([commitid] 除外被替换为真实的提交 ID(例如 9a26d8))。
我不确定我是否完全错过了这里的船还是什么。是否有可靠的方法将历史上具有多个 merge 提交的预先存在的 git repo 移植到 TFS?我希望这是一个原始功能/修复。我希望我遗漏了一些东西。我对 TFS 非常熟悉,但对 git 不熟悉,因此非常感谢您的帮助。
最佳答案
这里的问题是在 TFS 中表示复杂的 merge 历史很困难。很简单,git 提交可以有多个父项,而 TFS 变更集只能有一个。
考虑我的 git 存储库在某个提交时有 HEAD 的状态,比方说 9c42ef...
。现在我进行更改并提交,创建一个新的提交 1f23cd...
。同时,我还从 Bob 那里进行了更改,这也是基于 9c42ef...
的提交。他的更改是提交 ID f41ac3...
。如果我想 merge 这两个更改,我必须进行 merge ,假设我最终得到提交 ID 7acdfe...
。现在你的图表看起来像这样:
1f23cd
/ \
9c42ef 7acdfe (HEAD)
\ /
f41ac3
这在 TFS 中不容易表示,因为单个变更集只能有一个祖先(直接在它之前的变更集)。因此我们需要线性化历史记录。这就是 --squash
和 --auto-squash
选项存在于 git-tf checkin
上的原因(进行深度 checkin 时)。
--squash
选项允许您选择在处理历史记录时要遵循的路径。例如:
git-tf checkin --deep --squash f41ac3
在遍历图表时将省略 f41ac3
,您将拥有三个变更集,9c42ef
、1f23cd
和 7acdfe
。但是在一个大图中,指定每个提交到 squash 需要做很多工作。在这种情况下,--auto-squash
将使用一些魔法来确定要遵循的路径。 (它更喜欢具有最长提交链的路径,以便您获得尽可能多的历史记录,如果两个段的长度相等,将使用时间戳来确定要遵循的路径。)
git-tf checkin --deep --auto-squash
您还可以 rebase ,以便您 checkin 的提交是线性的,并且每个提交只有一个父级。
git-tf
开发人员根据树的复杂性、键入无穷无尽的 SHA1 哈希字符串和月相的自虐感受来使用这些策略中的每一个。
关于Git-tf checkin 失败 : commit [commitid] has multiple parents. 使用 --deep 选项在 TFS 中创建历史记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12065640/
我正在寻找一种方法来编写 Signed-off-by:当我提交时自动标记。 我尝试通过 .git/config 文件配置它 (Reference) .我把这些代码行: [alias] comm
我使用的是 visual studio 2013,在提交 C# 代码时我面临 3 个选项。我需要解释每个选项之间关于我的本地存储库与 GitHub 存储库发生的情况的差异。 选项 1 表示提交 选项
我刚从 classes12.jar 升级到新的 jdbc 驱动程序到 ojdbc7.jar 我的应用在使用 ojdbc7.jar 运行时抛出异常: java.sql.SQLException: Cou
我问的是 Oracle SQL*PLUS ... 最佳答案 没有 :-) Oracle says The WORK keyword is supported for compliance with s
我必须在许多分支、许多存储库上恢复对文件所做的更改。我知道我可以使用 git checkout 哈希文件名,然后推送该更改。 问题是,我只知道在我想要恢复的实际提交之前有两次提交。 我怎样才能在这之前
看起来很简单,但我就是不明白。我在我的应用程序的根目录中。 这是我的工作流程。 git add . git commit -m "added a new feature some files chan
假设我有一个 git 分支,在共享它之前的最后审查中,我发现了一些小错误,例如拼写错误。我想做的是将那个补丁应用为“修复”,但它实际上会影响许多提交,因此在最终历史记录中没有错误的迹象。 也就是说,如
当我运行hg commit时,Mercurial会为我的提交消息生成一个文件,如下所示: HG: Enter commit message. Lines beginning with 'HG:' a
我已经为项目创建了一个新的存储库,并向其中添加了一些现有的代码库 (llvm)。该代码库大约有 18,000 个文件,这使得我的初始提交花费了大量时间。 (阅读5小时) 有没有办法将这个巨大的提交分成
我在 git review 上得到以下内容: git review You are about to submit multiple commits. This is expected if you
我一直在寻找一种替代解决方案来压缩分支中的一系列提交。我过去所做的是使用 git rebase -i HEAD~然后选择哪个 promise 进行压缩。通常我 pick编辑最新的提交,并压缩其间的冗余
把玩Git和GitHub,我发现有时候一个 git commit -a 需要提交修改过的文件。 (此文件已添加到项目中)。 但有时候,只是一个 git commit 会起作用。如果使用 Mercuri
我正在努力思考 Git 的复杂性。 我使用“git clone [url here]”从 GitHub 下载了一个存储库。 我做了一些更改,尝试使用“git commit”提交它们。这似乎没有将更改推
当试图恢复到之前的提交时,我尝试了: git revert --no-commit 0766c053..HEAD 然而这给出了一个错误: empty commit set passed 问题错误是什么
我的存储库的历史非常复杂。我经常发现自己想知道过去的某个提交是“在”还是“可从”某个修订版(通常是我的一个头脑)“进入”或“可访问” 我该怎么做呢? 最佳答案 您可以使用 revsets syntax
我有:http://windows.github.com/ 我当前的项目有大约 20k 个文件,大约 150MB(并且不说它有多慢而且我现在什么也做不了)它甚至不允许我提交!我收到此错误:提交失败:无
我正在运行 postgres 9.2 服务器并有一个使用 psycopg 2.5 的 python 客户端。 我进行了一些测试,因为我在日志文件中遇到了很多警告:没有正在进行的事务条目。 我有一些代码
我的主要问题是总是执行 git commit -am 而不是 git add 是否有意义。然后是 git commit -m? 我知道 -am 表示它将添加修改后的 TRACKED 文件的所有更改。所
如果我想查看 之间的差异和工作目录 (WD),我运行 % git diff 这通常会做我想做的事,但如果 WD 包含在 时被跟踪的文件,它就会这样做。已创建,但现在(或在当前分支中)未被跟踪,则
我正在阅读有关 git 对象的信息:blob、树、提交、标签。为了更好地理解 git 的工作原理,我尝试了一些低级命令,如 write-tree 和 commit-tree。 mkdir 测试; cd
我是一名优秀的程序员,十分优秀!