2

我有两个 TFS 实例,一个是 2012,另一个是 2013。我的目标是从 2012 实例导出一些源代码并将其导入 2013 实例,同时保留签入历史记录。

我采用的方法是;

  1. 从http://msysgit.github.io为 Windows 安装 GIT
  2. 从http://gittf.codeplex.com安装 git-tf
  3. 为我的 git 存储库创建一个本地文件夹 c:\git
  4. 在该文件夹中打开一个 GIT Bash 提示符(所以它是当前的)
  5. $ git tf clone http://old-tfs-host:8080/DefaultCollection $/myProject/myBranch --deep
  6. 删除 tf 文件夹和 git-tf 文件
  7. 复制到我的 USERMAP 文件中
  8. $ git tf configure --deep --keep-author --force http://new-tfs-host:8080/DefaultCollection $/myProject/myBranch
  9. $ git tf pull
  10. $ git commit -a -m "Initial import from TFS 2012"
  11. $ git tf checkin --deep

处理约 57% 后出现错误

git-tf:由于以下错误,未能挂起对 TFS 的更改。请修复错误并重试签入。项目 $/path-to-file 已经有待处理的更改。

问题- 如何解决文件的挂起更改?在我进行此签入时,存储库中没有其他人,所以看起来导出可能已损坏?

我已经在另外两个分支上使用了同样的方法并且已经成功了。


编辑我发现问题是文件被重命名,唯一的区别是大小写。所以在同样的变化中我有

  1. delete $/source-file
  2. edit $/project-file
  3. add $/Source-File

显然我正在重命名它们,但是第 1 行中删除的文件与第 3 行中的文件相同,唯一的区别是文件名大小写。

所以我尝试过$ git config --global core.ignorecase false,但这并不能解决在同一个更改中删除和添加同一个文件的问题。

4

2 回答 2

4

我遇到了同样的问题,当您在一个变更集中删除、添加和编辑同一个文件时会发生这种问题。

如果你这样做git tf checkin --preview,你会看到细节。

我通过这样做解决了它:

git tf checkin --deep --renamemode=none
于 2015-03-17T14:01:14.707 回答
1

我们在运行时遇到了与 Git-TF 类似的问题git tf checkin,修改了renamemode不起作用:

由于以下错误,未能挂起对 TFS 的更改。请修复错误并重试签入

该解决方案涉及绕过pendChanges()签入PendDifferenceTask.java,本质上是签--force入。

PendDifferenceTask.java - pendChanges()

if (count < deleteSpecs.length)
{
    log.debug("Failed to pend Delete changes...ignoring count mismatch. Expected: " + deleteSpecs.length + ", Actual: " + count);
    //throw new Exception(Messages.getString("PendDifferencesTask.PendFailed")); //$NON-NLS-1$
}

此更改将需要通过maven ( mvn package -DskipTests) 进行重建以快速创建 JAR 快照。

顺便说一句..如果您想在 Git-TF 中启用调试,请将您的更新git-tf.cmd为以下内容,这有很大帮助:

git-tf.cmd - 启用日志记录

java -ea -Xmx512M -Dlog4j.configuration=file:///C:\git-tf\log4j.xml -cp %GITTF_CLASSPATH% "-Dcom.microsoft.tfs.jni.native.base-directory=%BASE_DIRECTORY%native " com.microsoft.gittf.client.clc.Main %*

然后只需创建一个log4j.xml如下所示的:

log4j.xml - 日志配置

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration debug="true" xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %t %c{1}:%L - %m%n"/>
        </layout>
    </appender>
     <appender name="FILE" class="org.apache.log4j.RollingFileAppender">
        <param name="file" value="mycorp.myapp.log"/>
        <param name="MaxFileSize" value="100000KB"/>
    <!-- Keep one backup file -->
        <param name="MaxBackupIndex" value="4"/>
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%d [%t] %-5p %l - %m%n"/>
        </layout>
    </appender>
    <root>
        <level value="debug"/>
        <!--<appender-ref ref="stdout"/>-->
        <appender-ref ref="FILE"/>
    </root>
</log4j:configuration>

如果您想在 Windows 上以图形方式查看您的 TF 变更集 - 我建议安装 Atlassian sourcetree - 它使故障排除比git log.

Sourcetree - Git 分支可视化工具

在此处输入图像描述

于 2015-07-24T21:56:47.063 回答