Migration of Work Items from TFS 2018 to Azure DevOps 2020 fails to migrate links between Work Items - azure-devops-migration-tools

I am exploring different possibilities to move our organisations Work Items from a TFS 2018 (v. 16.131.28507.4) to Azure DevOps 2020 (v. Dev18.M170.6). with Azure DevOps Migration Tools.
I am now struggling with parts of the migration tools (v. 11.11)
All Work Items do copy to the target environment, the iterations and areas are in place as well as the teams and team areas. The field "ReflectedWorkItemId" is also updated correctly in my target.
But looking in Azure, not one work item in the target environment has any links to its children or parents. In the migration tools logs there's a lot of warnings which I guess are related to my problem.
"[SKIP] [LINK_CAPTURE_RELATED] [RegisteredLinkType] target not found. wiSourceL=38673, wiSourceR=null, wiTargetL=12410"
The parent and the children WI's is present in Azure with but I am guessing I am missing something in the configuration.
In my source I am using the project type "Agile". In my target I've created an inherited project from Agile (with name "OrgAgile" to be able to add the "ReflectedWorkItemId" field in the process templates. Can that be an issue?
I see one issue have been posted on the tools GitHub (https://github.com/nkdAgility/azure-devops-migration-tools/issues/964) and I've posted a question there myself but no answers yet so I thought I try here. It could be a bug, but I want to make sure I haven't done the configuration wrong.
Below is the configuration.json. Perhaps I've removed/missed configuration from the default file that is crucial for a correct link migration or have redundant/conflicting parts in it.
Any help, pointers or roasts is most welcome.
configuration.json
{
"Version": "11.11",
"workaroundForQuerySOAPBugEnabled": false,
"GitRepoMapping": null,
"LogLevel": "Information",
"Source": {
"$type": "TfsTeamProjectConfig",
"Collection": "http://<sourceServer>/DefaultCollection",
"Project": "<sourceProject>",
"ReflectedWorkItemIDFieldName": "TfsMigrationTool.ReflectedWorkItemId2",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"Target": {
"$type": "TfsTeamProjectConfig",
"Collection": "http://<targetServer>/DefaultCollection",
"Project": "<targetProject>",
"ReflectedWorkItemIDFieldName": "ReflectedWorkItemId",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"Processors": [
{
"$type": "TfsAreaAndIterationProcessorOptions",
"Enabled": true,
"PrefixProjectToNodes": false,
"NodeBasePaths": null,
"ProcessorEnrichers": null,
"SourceName": "IterationSettingsSource",
"TargetName": "IterationSettingsTarget"
},
{
"$type": "TfsTeamSettingsProcessorOptions",
"Enabled": true,
"MigrateTeamSettings": true,
"UpdateTeamSettings": true,
"PrefixProjectToNodes": false,
"Teams": null,
"ProcessorEnrichers": null,
"SourceName": "TeamSettingsSource",
"TargetName": "TeamSettingsTarget"
},
{
"$type": "WorkItemMigrationConfig",
"Enabled": true,
"ReplayRevisions": true,
"PrefixProjectToNodes": false,
"UpdateCreatedDate": true,
"UpdateCreatedBy": true,
"BuildFieldTable": false,
"AppendMigrationToolSignatureFooter": false,
"WIQLQueryBit": "AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan', 'Shared Steps', 'Shared Parameter', 'Test Case')",
"WIQLOrderBit": "[System.ChangedDate] desc",
"LinkMigration": true,
"AttachmentMigration": false,
"AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\",
"FixHtmlAttachmentLinks": false,
"SkipToFinalRevisedWorkItemType": true,
"WorkItemCreateRetryLimit": 5,
"FilterWorkItemsThatAlreadyExistInTarget": true,
"PauseAfterEachWorkItem": false,
"AttachmentMaxSize": 480000000,
"AttachRevisionHistory": false,
"LinkMigrationSaveEachAsAdded": false,
"GenerateMigrationComment": true,
"NodeBasePaths": [],
"WorkItemIDs": null,
"MaxRevisions": 5
}
],
"Endpoints": {
"TfsEndpoints": [
{
"Name": "IterationSettingsSource",
"AccessToken": "",
"Organisation": "http://<sourceServer>/DefaultCollection",
"Project": "<sourceProject>",
"ReflectedWorkItemIdField": "TfsMigrationTool.ReflectedWorkItemId",
"AuthenticationMode": "Prompt",
"AllowCrossProjectLinking": false,
"LanguageMaps": {
"Area": "Area",
"Iteration": "Iteration"
}
},
{
"Name": "IterationSettingsTarget",
"AccessToken": "",
"Organisation": "http://<targetServer>/DefaultCollection",
"Project": "<targetProject>",
"ReflectedWorkItemIdField": "ReflectedWorkItemId",
"AuthenticationMode": "Prompt",
"AllowCrossProjectLinking": false,
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
}
],
"TfsTeamSettingsEndpoints": [
{
"Name": "TeamSettingsSource",
"AccessToken": "",
"Organisation": "http://<sourceServer>/DefaultCollection",
"Project": "<sourceProject>",
"ReflectedWorkItemIdField": "TfsMigrationTool.ReflectedWorkItemId",
"AuthenticationMode": "Prompt",
"AllowCrossProjectLinking": false,
"LanguageMaps": {
"Area": "Area",
"Iteration": "Iteration"
}
},
{
"Name": "TeamSettingsTarget",
"AccessToken": "",
"Organisation": "http://<targetServer>/DefaultCollection",
"Project": "<targetProject>",
"ReflectedWorkItemIdField": "ReflectedWorkItemId",
"AuthenticationMode": "Prompt",
"AllowCrossProjectLinking": false,
"LanguageMaps": {
"AreaPath": "Area",
"Iteration": "Iteration"
}
}
]
}
}

This was probably caused by a bug.
Discussion and possible solution is found here:
https://github.com/nkdAgility/azure-devops-migration-tools/issues/964

Related

DevOps migration tool: ArgumentNullException: Value cannot be null

I'm trying to migrate tickets from one org/project to an other org/project, but not with success at the moment.
I have tried to config it the correct way, but I guees I have filled it in correctly now (see below) and still I get the following error.
note: it looks like the 'Source Node Path StartsWith' in the log is not correct. We do not use (sub) Area's. Area should be: vdp-bam-gen.
I tried to leave out the LanguageMaps and also empty the value (AreaPath": ""). But I still get (other) errors.
NodeStructureEnricher.ProcessCommonStructure(Area, Area)
-Source Node Path StartsWith [\vdp-bam-gen\area]
Error while running WorkItemMigration
System.ArgumentNullException: Value cannot be null.
Parameter name: source
at System.Linq.Enumerable.Where[TSource](IEnumerable1 source, Func2 predicate)
I cannot copy my whole config, but here are some parts:
Version": "12.0",
"TelemetryEnableTrace": false,
"workaroundForQuerySOAPBugEnabled": false,
"Source": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://a_url_of my project/",
"Project": "VDP-BAM-GEN",
"ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
"Target": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://a_url_of my project/",
"Project": "CIT-BAM-SOURCING-CUSTOMERS",
"ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
"Processors": [
"$type": "WorkItemDeleteConfig",
"Enabled": true,
"QueryBit": "AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan', 'Epic', 'Feature', 'User Story','Bug','Inbox Item')",
"OrderBit": "[System.ChangedDate] desc"
,
"$type": "WorkItemMigrationConfig",
"ReplayRevisions": true,
"PrefixProjectToNodes": false,
"UpdateCreatedDate": false,
"UpdateCreatedBy": false,
"BuildFieldTable": false,
"AppendMigrationToolSignatureFooter": false,
"QueryBit": "AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan', 'Epic', 'Feature', 'User Story','Bug','Inbox Item')",
"OrderBit": "[System.ChangedDate] desc",
"Enabled": true,
"LinkMigration": true,
"AttachmentMigration": true,
"AttachmentWorkingPath": "c:\tmp\WorkItemAttachmentWorkingFolder",
"FixHtmlAttachmentLinks": false,
"SkipToFinalRevisedWorkItemType": false,
"WorkItemCreateRetryLimit": 5,
"FilterWorkItemsThatAlreadyExistInTarget": true,
"PauseAfterEachWorkItem": false,
"AttachmentMaxSize": 480000000,
"CollapseRevisions": false,
"LinkMigrationSaveEachAsAdded": false

When migrating work items with links to a git repo in another project, links are not migrating

We are currently moving multiple projects between Azure Devops organizations by using the https://nkdagility.github.io/azure-devops-migration-tools/ tool.
A lot of work items that are being migrated have links to git repos (commits, branches) that are from another project within the same organization.
When the tool is running, it's not able to find the repo if it's in another project.
Example warning from when the tool is running:
GitRepositoryEnricher: Could not find source git repo - repo
referenced: xy/mn
Under the Development section on the work items that have this links the following comments shows:
Commit not found or no permission to access it.
All repos have been migrated before the work items and have the same names as in the source organization. I don't believe it's a permissions issue, as I can add the link manually.
Below is the config json file:
{
"ChangeSetMappingFile": null,
"Source": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://dev.azure.com/sourceorg/",
"Project": "sourceproject",
"ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
"AllowCrossProjectLinking": true,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "PAT",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"Target": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://dev.azure.com/targetorg/",
"Project": "targetproject",
"ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
"AllowCrossProjectLinking": true,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"FieldMaps": [],
"GitRepoMapping": null,
"LogLevel": "Information",
"Processors": [
{
"$type": "WorkItemMigrationConfig",
"Enabled": true,
"ReplayRevisions": true,
"PrefixProjectToNodes": false,
"UpdateCreatedDate": true,
"UpdateCreatedBy": true,
"WIQLQueryBit": "AND [System.WorkItemType] NOT IN ('Test Suite', 'Test Plan', 'Test Case')",
"WIQLOrderBit": "[System.ChangedDate] desc",
"LinkMigration": true,
"AttachmentMigration": true,
"AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\",
"FixHtmlAttachmentLinks": true,
"SkipToFinalRevisedWorkItemType": true,
"WorkItemCreateRetryLimit": 5,
"FilterWorkItemsThatAlreadyExistInTarget": false,
"PauseAfterEachWorkItem": false,
"AttachmentMaxSize": 480000000,
"AttachRevisionHistory": false,
"LinkMigrationSaveEachAsAdded": false,
"GenerateMigrationComment": false,
"NodeBasePaths": [],
"WorkItemIDs": null
}
],
"Version": "11.11",
"workaroundForQuerySOAPBugEnabled": false,
"WorkItemTypeDefinition": {
"sourceWorkItemTypeName": "targetWorkItemTypeName"
}
}
Policies must be open equaly to allow the linkage, both projects (organizations as well) Must be part of the same Tenant.

Re-migrate a work item that has been deleted on target server

I'm starting to use the great ADO Migration Tool by MrHinsh.
I've succeeded to configure it as I want but I have some problem in a particular case : let's say I've migrate WI #67604 (TFS 2017) to WI #217 (ADO).
Then I've deleted the new WI (#217).
And I'm trying to run the migration tool again but I've an error
Microsoft.TeamFoundation.WorkItemTracking.Client.ValidationException: TF237124: l'élément de travail n'est pas prêt à être enregistré
I've tried to restore it from the bin, it works now. I've tried to permanently delete it, same error.
I've tried to remove the ReflectedWorkItemIDFieldName in the source WI on TFS but I'm unable to find the field...
Here is my config file :
{
"ChangeSetMappingFile": null,
"Source": {
"$type": "TfsTeamProjectConfig",
"Collection": "XXX",
"Project": "TEST1",
"ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "aaaa",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"Target": {
"$type": "TfsTeamProjectConfig",
"Collection": "YYY",
"Project": "TEST2",
"ReflectedWorkItemIDFieldName": "Custom.ReflectedWorkItemId",
"AllowCrossProjectLinking": false,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "yyyy",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"FieldMaps": [],
"GitRepoMapping": null,
"LogLevel": "Information",
"Processors": [
{
"$type": "WorkItemMigrationConfig",
"Enabled": true,
"ReplayRevisions": true,
"PrefixProjectToNodes": true,
"UpdateCreatedDate": true,
"UpdateCreatedBy": true,
"WIQLQueryBit": "AND ID = 69949 OR ID = 67604",
"WIQLOrderBit": "[System.ChangedDate] desc",
"LinkMigration": true,
"AttachmentMigration": true,
"AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\",
"FixHtmlAttachmentLinks": true,
"SkipToFinalRevisedWorkItemType": true,
"WorkItemCreateRetryLimit": 5,
"FilterWorkItemsThatAlreadyExistInTarget": true,
"PauseAfterEachWorkItem": false,
"AttachmentMaxSize": 480000000,
"AttachRevisionHistory": false,
"LinkMigrationSaveEachAsAdded": false,
"GenerateMigrationComment": true,
"NodeStructureEnricherEnabled": null,
"NodeBasePaths": [],
"WorkItemIDs": null,
"MaxRevisions": 0
}
],
"Version": "11.11",
"workaroundForQuerySOAPBugEnabled": false,
"WorkItemTypeDefinition": {
"sourceWorkItemTypeName": "targetWorkItemTypeName"
},
"Endpoints": {
"InMemoryWorkItemEndpoints": [
{
"Name": "Source",
"EndpointEnrichers": null
},
{
"Name": "Target",
"EndpointEnrichers": null
}
]
}
}
Enabling "LogLevel" to "Debug" helps me find the problem and it was a mistake in the config file...
Now I can migrate, sync and if I delete WI in target DevOps collection I can migrate it again.
Everything's fine !

Mapping of a field with date change the date on target

I'm trying to map the field with date, but on the target the date is changed to previous date.
On the source:
Integration Date: 30.11.2019 00:00
On the target:
Integration Date: 29.11.2019 23:00
I was trying also with Regexp mapping, just to map the date, but was not able to make it working. Below there is my configuration. It's a migration from Azure Devops Services to Azure Devops Services.
{
"ChangeSetMappingFile": null,
"Source": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://dev.azure.com/XXX",
"Project": "Reach CSA",
"ReflectedWorkItemIDFieldName": "ReflectedWorkItemId",
"AllowCrossProjectLinking": true,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "XXX",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"Target": {
"$type": "TfsTeamProjectConfig",
"Collection": "https://dev.azure.com/XXX",
"Project": "ReachCSA-Migration-DryRun",
"ReflectedWorkItemIDFieldName": "ReflectedWorkItemId",
"AllowCrossProjectLinking": true,
"AuthenticationMode": "Prompt",
"PersonalAccessToken": "XXX",
"LanguageMaps": {
"AreaPath": "Area",
"IterationPath": "Iteration"
}
},
"GitRepoMapping": null,
"LogLevel": "Verbose",
"FieldMaps": [
{
"$type": "FieldtoFieldMultiMapConfig",
"WorkItemTypeName": "*",
"SourceToTargetMappings": {
"CSAReach.Rationale": "Rationale",
"System.Reason": "ReachCSA_Reason",
"CSAReach.TargetRelease": "ReachCSA Target Release",
"CSAReach.Source": "ReachCSA_Origin_Source",
"CSAReach.Contact1": "Contact 1",
"CSAReach.Contact2": "Contact 2",
"CSAReach.Contact3": "Contact 3",
"Microsoft.VSTS.Common.Priority": "ReachCSA_Priority",
"CSAReach.RequirementType": "ReachCSA_Type",
"CSAReach.Target": "Target Platform",
"CSAReach.IntegrationDate": "Integration Date",
"CSAReach.MarketDate": "Market Date"
}
},
{
"$type": "FieldtoFieldMultiMapConfig",
"WorkItemTypeName": "Query",
"SourceToTargetMappings": {
"CSAReach.SystemInfo": "System Information",
"Microsoft.VSTS.TCM.ReproSteps": "Steps to Reproduce",
"System.Reason": "ReachCSA_Reason",
"CSAReach.Source": "ReachCSA_Origin_Source",
"CSAReach.Contact1": "Contact 1",
"CSAReach.Contact2": "Contact 2",
"CSAReach.Contact3": "Contact 3",
"Microsoft.VSTS.Common.Priority": "ReachCSA_Severity",
"CSAReach.Target": "Target Platform",
"CSAReach.DueDate": "Due Date",
"CSAReach.FoundInRelease": "CSA Release"
}
}
],
"Processors": [
{
"$type": "WorkItemMigrationConfig",
"Enabled": true,
"ReplayRevisions": true,
"PrefixProjectToNodes": false,
"UpdateCreatedDate": true,
"UpdateCreatedBy": true,
"BuildFieldTable": false,
"AppendMigrationToolSignatureFooter": false,
"WIQLQueryBit": "AND [System.Id] IN ('42249')",
"WIQLOrderBit": "[System.ChangedDate] desc",
"LinkMigration": true,
"AttachmentMigration": true,
"AttachmentWorkingPath": "D:\\Workspaces\\projects\\PG-CT migration\\ReachCSA\\attachments\\",
"FixHtmlAttachmentLinks": false,
"SkipToFinalRevisedWorkItemType": true,
"WorkItemCreateRetryLimit": 5,
"FilterWorkItemsThatAlreadyExistInTarget": true,
"PauseAfterEachWorkItem": false,
"AttachmentMaxSize": 480000000,
"CollapseRevisions": false,
"LinkMigrationSaveEachAsAdded": false,
"GenerateMigrationComment": true
}
],
"Version": "11.9",
"workaroundForQuerySOAPBugEnabled": false,
"WorkItemTypeDefinition": {
"sourceWorkItemTypeName": "targetWorkItemTypeName"
}
}
Thanks for any help!
OK, got the issue here. It's time settings between the azure organization (UTC) and my profile. The profile needs to be set to my local timezone.

out of 17 Task work items 15 are coming and 2 Task are not migrate

I have used the version of 10.2 and facing one of the issue following
Issue is that out of 17 Task work items 15 are coming and 2 Task are not migrated but in that place two Product backlog item created with no title and state is coming with new state
Here is my config file:
{ "Version": "10.2",
"TelemetryEnableTrace": false,
"workaroundForQuerySOAPBugEnabled": false,
"ChangeSetMappingFile": null,
"Source": {
"Collection": "",
"Project": "Road To NPD 3.0",
"ReflectedWorkItemIDFieldName": "PATTInitiativesRefID",
"AllowCrossProjectLinking": false,
"PersonalAccessToken": "",
"LanguageMaps": {
"AreaPath": "Road To NPD 3.0",
"IterationPath": "Road To NPD 3.0"
} }, "Target": {
"Collection": "",
"Project": "AS-Scrum-RoadToNPD3.0",
"ReflectedWorkItemIDFieldName": "AutoSolScrumRefID",
"AllowCrossProjectLinking": false,
"PersonalAccessToken": "",
"LanguageMaps": {
"AreaPath": "AS-Scrum-RoadToNPD3.0",
"IterationPath": "AS-Scrum-RoadToNPD3.0" } }, "FieldMaps": [
{
"ObjectType": "MultiValueConditionalMapConfig",
"WorkItemTypeName": "*",
"sourceFieldsAndValues": {
"Field1": "Value1",
"Field2": "Value2"
},
"targetFieldsAndValues": {
"Field1": "Value1",
"Field2": "Value2"
}
},
{
"ObjectType": "FieldBlankMapConfig",
"WorkItemTypeName": "*",
"targetField": "TfsMigrationTool.ReflectedWorkItemId"
},
{
"ObjectType": "FieldValueMapConfig",
"WorkItemTypeName": "*",
"sourceField": "System.State",
"targetField": "System.State",
"defaultValue": "New",
//"valueMapping": {
// "Approved": "New",
//"New": "New",
//"Committed": "Active",
//"In Progress": "Active",
//"To Do": "New",
//"Done": "Closed",
//"Removed": "Removed"
//}
},
{
"ObjectType": "FieldtoFieldMapConfig",
"WorkItemTypeName": "*",
"sourceField": "Microsoft.VSTS.Common.BacklogPriority",
"targetField": "Microsoft.VSTS.Common.StackRank",
"defaultValue": null
},
{
"ObjectType": "FieldtoFieldMultiMapConfig",
"WorkItemTypeName": "*",
"SourceToTargetMappings": {
"SourceField1": "TargetField1",
"SourceField2": "TargetField2"
}
},
{
"ObjectType": "FieldtoTagMapConfig",
"WorkItemTypeName": "*",
"sourceField": "System.State",
"formatExpression": "ScrumState:{0}"
},
{
"ObjectType": "FieldMergeMapConfig",
"WorkItemTypeName": "*",
"sourceField1": "System.Description",
"sourceField2": "Microsoft.VSTS.Common.AcceptanceCriteria",
"targetField": "System.Description",
"formatExpression": "{0} <br/><br/><h3>Acceptance Criteria</h3>{1}",
"doneMatch": "##DONE##"
},
{
"ObjectType": "RegexFieldMapConfig",
"WorkItemTypeName": "*",
"sourceField": "COMPANY.PRODUCT.Release",
"targetField": "COMPANY.DEVISION.MinorReleaseVersion",
"pattern": "PRODUCT \\d{4}.(\\d{1})",
"replacement": "$1"
},
{
"ObjectType": "FieldValuetoTagMapConfig",
"WorkItemTypeName": "*",
"sourceField": "Microsoft.VSTS.CMMI.Blocked",
"pattern": "Yes",
"formatExpression": "{0}"
},
{
"ObjectType": "TreeToTagMapConfig",
"WorkItemTypeName": "*",
"toSkip": 3,
"timeTravel": 1
} ], "WorkItemTypeDefinition": {
"Product Backlog Item": "Product Backlog Item", "Epic": "Epic", "Task": "Task" }, "GitRepoMapping": null, "Processors": [
{
"ObjectType": "NodeStructuresMigrationConfig",
"PrefixProjectToNodes": false,
"Enabled": false,
"BasePaths": [
"Product\\Area\\Path1",
"Product\\Area\\Path2"
]
},
{
"ObjectType": "WorkItemMigrationConfig",
"ReplayRevisions": true,
"PrefixProjectToNodes": false,
"UpdateCreatedDate": true,
"UpdateCreatedBy": true,
"BuildFieldTable": false,
"AppendMigrationToolSignatureFooter": false,
"QueryBit": "AND [Microsoft.VSTS.Common.ClosedDate] != '' AND [System.WorkItemType] IN ('Task')",
"OrderBit": "[System.ChangedDate] desc",
"Enabled": true,
"LinkMigration": true,
"AttachmentMigration": true,
"AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\",
"FixHtmlAttachmentLinks": false,
"SkipToFinalRevisedWorkItemType": false,
"WorkItemCreateRetryLimit": 5,
"FilterWorkItemsThatAlreadyExistInTarget": true,
"PauseAfterEachWorkItem": false,
"AttachmentMazSize": 480000000,
"CollapseRevisions": false,
"LinkMigrationSaveEachAsAdded": false
} ] }
This issue is due to some code malfunctioning that is responsible for changing the work item type which is not possible in the old Object Model. Some folks have had issues with it, and so there is SkipToFinalRevisedWorkItemType that can be added to look at the type of the last revision and use that rather than trying to mess around in between.
{
"ObjectType": "WorkItemMigrationConfig",
"ReplayRevisions": true,
"PrefixProjectToNodes": false,
"UpdateCreatedDate": true,
"UpdateCreatedBy": true,
"BuildFieldTable": false,
"AppendMigrationToolSignatureFooter": false,
"QueryBit": "AND [Microsoft.VSTS.Common.ClosedDate] != '' AND [System.WorkItemType] IN ('Task')",
"OrderBit": "[System.ChangedDate] desc",
"Enabled": true,
"LinkMigration": true,
"AttachmentMigration": true,
"AttachmentWorkingPath": "c:\\temp\\WorkItemAttachmentWorkingFolder\\",
"FixHtmlAttachmentLinks": false,
"SkipToFinalRevisedWorkItemType": true,
"WorkItemCreateRetryLimit": 5,
"FilterWorkItemsThatAlreadyExistInTarget": true,
"PauseAfterEachWorkItem": false,
"AttachmentMazSize": 480000000,
"CollapseRevisions": false,
"LinkMigrationSaveEachAsAdded": false
} ] }
Here I updated "SkipToFinalRevisedWorkItemType" to be true instead of false.