【问题标题】:Import using GIT-TF - item already has pending changes使用 GIT-TF 导入 - 项目已经有待更改
【发布时间】:2014-11-02 03:04:15
【问题描述】:

我有两个 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,但这并不能解决在同一更改中删除和添加同一文件的问题。

【问题讨论】:

    标签: git tfs git-tf tfvc


    【解决方案1】:

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

    如果您选择git tf checkin --preview,您将看到详细信息。

    我通过这样做解决了它:

    git tf checkin --deep --renamemode=none
    

    【讨论】:

      【解决方案2】:

      我们在运行git tf checkin 时有一个similar issue with Git-TF,但修改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 分支可视化工具

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-11-29
        • 2015-05-07
        • 2019-12-22
        • 2013-12-20
        • 1970-01-01
        • 1970-01-01
        • 2019-02-28
        相关资源
        最近更新 更多