---
title: "Clone properties"
canonical: "https://support.appfire.com/space/JCPP/71275018/Clone%20properties"
format: markdown
---
> Macro (aura-html)

# Description

The clone property file allows customized control over clone operations. This page describes how specific behaviors can be controlled. This page focuses on conditioning and control. See [Setting fields](https://appfire.atlassian.net/l/cp/sqAXaptT) for information on generally updating field values.

Property files are lines of key/value pairs that map keys to values - see [property file syntax](https://appfire.atlassian.net/wiki/spaces/JCPP/pages/71275018/Clone+properties#Property-file-syntax). The keys recognized by clone operations are defined below.

> ✅ Start with [Getting started with customization](https://appfire.atlassian.net/l/cp/PRu2KoPA) before diving into the details here.

# Mapping keys

Mappings keys are dot-separated property names: prefix.class.qualifier1.qualifier2.qualifier3.qualifier4.

- prefix - this is the profilePrefix or blank (default prefix) from the clone operation.
- class - determines what mapping is being defined - like project, type, and so on.
- qualifier(s)
  - one or more (dot separated) qualifiers - the number of qualifiers is dependent on the class
  - generic qualifier (*) matches any value of that position

For example, 1.project.JRA.1.* will match an issue in the JRA project with has type bug (1) in any (*) status.

> ✅ - More specific keys take precedence over more generic keys during lookup.
> ✅ - If you use names, make sure you escape blanks in names using \ as required by [property file syntax](https://appfire.atlassian.net/wiki/spaces/JCPP/pages/71275018/Clone+properties#Property-file-syntax).

# Classes

The following are the classes available in Clone Plus for Jira:

<details>
<summary>Set target project</summary>

|  |  |
| --- | --- |
| Class | project |
| Qualifier 1 | The key or id of the project. |
| Qualifier 2 | The id of the issue type. |
| Qualifier 3 | The id of the status. |
| Value | The key or id of the target project. |
| Example without prefix | `project.JRA.1.* = JRA2`<br>`project.*.*.* = JRA` |
| Example description | Clone to JRA2 any bug (1) from JRA project.<br>Set target project as JRA and create issues in the JRA project. |
</details>

<details>
<summary>Set target component</summary>

|  |  |
| --- | --- |
| Class | project-component |
| Qualifier 1 | The key or id of the project. |
| Qualifier 2 | The name or id of the component. |
| Qualifier 3 | NA |
| Value | The key or id of the target project. |
| Example without prefix | `project-component.JRA.C1 = JRA2` |
| Example description | Clone to JRA2 any JRA issue with component C1. |
</details>

<details>
<summary>Set target type</summary>

|  |  |
| --- | --- |
| Class | type |
| Qualifier 1 | The key or id of the project. |
| Qualifier 2 | The id of the issue type. |
| Qualifier 3 | The id of the status. |
| Value | The id of the target issue type. |
| Example without prefix | `type.JRA.* = 1` |
| Example description | Clone JRA issues to a bug (1). |
</details>

<details>
<summary>Set target component</summary>

|  |  |
| --- | --- |
| Class | component |
| Qualifier 1 | The name of the component. |
| Qualifier 2 | NA |
| Qualifier 3 | NA |
| Value | The name of the component. |
| Example without prefix | `component.C1 =` |
| Example description | Remove component C1 from cloned issues. |
</details>

<details>
<summary>Set target version</summary>

|  |  |
| --- | --- |
| Class | version |
| Qualifier 1 | The name of the version. |
| Qualifier 2 | NA |
| Qualifier 3 | NA |
| Value | The name of the version. |
| Example without prefix | `version.V2 = V1` |
| Example description | Map version V2 to V1 |
</details>

<details>
<summary>Set link type</summary>

|  |  |
| --- | --- |
| Class | linkType |
| Qualifier 1 | NA |
| Qualifier 2 | NA |
| Qualifier 3 | NA |
| Value | The name of the link. |
| Example without prefix | `linkType = Blocks`<br>`linkType =` |
| Example description | Uses the Blocks link instead of the default clone link.<br>No link will be added. |
| Note | Must be the name of the link as shown on the Issue Linking admin panel. See [How to customize automatic clone linking.](https://appfire.atlassian.net/l/cp/ERW8s01k) |
</details>

<details>
<summary>Set link direction</summary>

|  |  |
| --- | --- |
| Class | linkDirection |
| Qualifier 1 | NA |
| Qualifier 2 | NA |
| Qualifier 3 | NA |
| Value | The direction of the link. |
| Example without prefix | `linkDirection = INWARD` |
| Example description | Uses an INWARD link instead of the default OUTWARD link. |
</details>

<details>
<summary>Set clone option default behavior</summary>

|  |  |
| --- | --- |
| Class | option |
| Qualifier 1 | The name of the option. |
| Qualifier 2 | NA |
| Qualifier 3 | NA |
| Value | The value of the option, that is, true, false, or hide |
| Example without prefix | `option.copyAttachments = true`<br>`option.copyComments = hide` |
| Example description | Set the Clone attachments option to default to checked (true) or not checked (false).<br>Use hide to prevent the option from being shown to users. No action will be taken. |
| Note | Valid option names are:<br>- copyAttachments
- copyWatchers
- copyWorklogs
- copyComments
- copySubtasks
- copySubtaskEstimates
- copyParentVersions
- copyLinks
- copyEpicIssues
- copyEpicIssueSubtasks
- copyEpicIssueSubtaskEstimates
- copyParentReporter<br>Examples:<br>- [How to clone an epic with all the child issues from the same project](https://appfire.atlassian.net/l/cp/XLd3hze0)
- [How to clone an epic with all the child issues from different projects](https://appfire.atlassian.net/l/cp/ZNGnuPTy)<br>> ⚠️ - While using the *copyEpicIssues *option with **Clone ++** operation, if the issue type of the source epic does not exist in the target project, the default issue type is assigned to the cloned issue. If there is no default issue type defined, the issue type specified first in the order is assigned to the cloned issue.
> ⚠️ - When all the clone options are hidden during configuration, the *Clone Options* label is not displayed in the *Clone* window while cloning an issue.
> ⚠️ - If the *Copy subtasks* clone option is used while cloning an issue and the respective subtask workflow is configured with a validator on any of the fields or a condition fails, the subtasks are not created. |
</details>

<details>
<summary>Set clone option additional behavior</summary>

> Macro (anchor)



|  |  |
| --- | --- |
| Class | option |
| Qualifier 1 | The name of the system or custom option. |
| Qualifier 2 | NA |
| Qualifier 3 | NA |
| Value | The value of the system or custom option, that is, true or false. |
| Example without prefix | `option.copycustomfield_11060 = true` |
| Example description | Set the custom option field to default to checked (true) or not checked (false). |
</details>

<details>
<summary>Restrict who can see clone operation</summary>

> Macro (anchor)



|  |  |
| --- | --- |
| Class | role |
| Qualifier 1 | The key or id of the project. |
| Qualifier 2 | NA |
| Qualifier 3 | NA |
| Value | The name of the role. |
| Example without prefix | `role.JRA = Administrators, Developers` |
| Example description | Restrict clone operation for project JRA to Administrators or Developers roles. |
| Note | Multiple roles can be specified using a comma separated list. |
</details>

<details>
<summary>When shown on UI</summary>

|  |  |
| --- | --- |
| Class | condition |
| Qualifier 1 | The key or id of the project. |
| Qualifier 2 | The id of the issue type. |
| Qualifier 3 | The id of the status. |
| Qualifier 4 | The name or id of the project category. |
| Value | The value of the condition, that is, true or false |
| Example without prefix | `condition.*.*.*.* = true`  
`condition.JRA.*.*.* = false` |
| Example description | Show action for all projects except JRA. |
</details>

> ℹ️ ### Condition
> ℹ️ 
> ℹ️ - UI conditions apply to both default and custom clone operations.
> ℹ️ - The default clone operations (clone+, clone++) will always be displayed on the UI even if the condition property is not defined.
> ℹ️ - The custom clone operations will be displayed on the UI only if there is at least one condition property is defined and not false.
> ℹ️ - For issue type configurations, the following are different scenarios of displaying the target issue type in the *Clone* window while cloning an issue:
> ℹ️   - When the original issue type exists in the target project, it is displayed in the window.
> ℹ️   - When the original issue type does not exist in the target project, the default issue type of the target project is displayed.
> ℹ️   - When the original issue type does not exist in the target project and default issue type is not configured in the target project, one of the available issue types from the target project is displayed.

# Other properties

The following are the other properties available in Clone Plus for Jira:

<details>
<summary>bulkClone</summary>

This behaviour enables bulk cloning of issues to the same or different project. This property is enabled for Clone+ and Clone++ default operations.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `1.plus.bulkClone = true` | For the specific custom clone operation 1:<br>- Cloning multiple issues at once is enabled |
</details>

<details>
<summary>fieldExcludes</summary>

This behaviour excludes the fields from being copied from the parent issue to the target issue and the fields are not displayed on the UI when cloning an issue. A comma-separated list of [System field names](https://appfire.atlassian.net/l/cp/c2mGonrh) or custom field names or IDs (like customfield_10100) that are hidden in the cloned issue.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `fieldExcludes = fixVersions` | Do not copy the **fixVersion** field for app provided Clone+ and Clone++ operations |
| `1.fieldExcludes = ${fieldExcludes}, custom2` | For the specific custom operation 1:<br>- Do not copy anything from the previously set **fieldExcludes** property
- Do not copy custom2 |
</details>

<details>
<summary>fieldIncludes</summary>

This behaviour displays the fields on the UI and includes the fields from being copied from the UI when cloning an issue. A comma-separated list of custom field names or IDs that are to be copied.

> ⚠️ If a field specified in both **fieldIncludes** and **fieldExcludes**, it is not displayed in the UI when cloning an issue.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `fieldincludes = Priority` | Show the **Priority **field for app provided Clone+ and Clone++ operations. |
| `1.fieldIncludes = ${fieldIncludes}, Priority` | For custom operation 1, show the** Priority** field in the UI. |
</details>

<details>
<summary>ignoreFields</summary>

This behaviour excludes the fields from being displayed on the UI and the fields are being copied from the parent issue to the target issue when cloning an issue. A comma-separated list of [System field names](https://appfire.atlassian.net/l/cp/c2mGonrh) or custom field names or ids that will not show up on the UI. If you want to set custom fields via properties and they are on the create screen, then they need to be on the ignoreFields list.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `ignoreFields = custom2` | Do not show in the UI but copy custom2 field for app provided Clone+ and Clone++ operations. |
| `1.ignoreFields = priority, custom2` | Do not show the priority or custom2 fields on the Clone screen for custom operation 1. |

> ⚠️ Not applicable to the **Attachment** field as the *copy attachments *option is available while cloning an issue with attachments.
</details>

<details>
<summary>label</summary>

This behaviour allows the name of a custom operation to be customized. This is the name that appears to users. Only applies to custom operations.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `1.label = Escalate to Engineering` | Custom operation named in a user friendly manner. |
</details>

<details>
<summary>tooltip</summary>

This behaviour allows the tooltip of a custom operation to be customized. This is the description that appears when hovering over the operation name. Only applies to custom operations.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `1.plus.tooltip = This creates a new issue for the development team.` | Helps explain what the operation will do. |
</details>

<details>
<summary>projectIncludes</summary>

This behaviour enables the projects to be included for operations that allow the project to be changed. A comma separated list of project keys.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `projectIncludes = WEB, SUPPORT` | For the app provided Clone++ operation, only show these projects in the project list. |
| `1.plus.projectIncludes = WEB, SUPPORT` | For the custom 1 plus operation, only show these projects in the project list. |
</details>

<details>
<summary>issueTypeIncludes</summary>

This behaviour enables the issue types to be included for operations that allow the issue types to be changed. A comma-separated list of issue types.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `issueTypeIncludes = Bug, "New Feature"` | For the app provided Clone++ operation, include only these issue types in the Type list (provided these issue types are available in the cloned project). |
| `1.plus.issueTypeIncludes = Bug, "New Feature"` | For the custom 1 plus operation, include only these issue types in the issue type list (provided these issue types are available in the cloned project). |
</details>

<details>
<summary>retainCommentsOriginalDate</summary>

This behaviour controls whether or not the original comment data is retained when copying comments to the cloned issue.

**Examples**

|  |  |
| --- | --- |
| **Setting** | **Description** |
| `retainCommentsOriginalDate = true` | Retain original date for comments for app provided Clone+ and Clone++ operations. |
| `1.retainCommentsOriginalDate = true` | Retain original date for comments for custom operation 1. |
</details>

<details>
<summary>retainWorklogsOriginalDate</summary>

This behaviour controls whether or not the original worklog date is retained when copying worklogs to the cloned issue.

**Examples**

|  |  |
| --- | --- |
| Setting | Description |
| `retainWorklogsOriginalDate = true` | Retain original date for worklogs for app provided Clone+ and Clone++ operations. |
| `1.retainWorklogsOriginalDate = true` | Retain original date for worklogs for custom operation 1. |
</details>

<details>
<summary>epicIssueTypesIncludes</summary>

This behaviour controls whether or not the issues in an epic with the specified issue types are cloned when cloning an epic. A comma-separated list of valid issue types.

**Examples**

|  |  |
| --- | --- |
| Setting | Description |
| `epicIssueTypesIncludes = Bug, Story, "New Feature"` | For the app provided Clone++ operations, when you choose to clone issues in epic, issues in the epic of type Bug, Story, and New Feature are cloned, other issues are excluded (provided these issue types are available in the target issues of cloned epic in a project). |
| `1.plus.epicIssueTypesIncludes = Task, Story, "New Feature"` | For the custom 1 plus operation, when you choose to clone issues in epic, issues in the epic of type Task, Story, and New Feature are cloned, other issues are excluded (provided these issue types are available in the cloned project). |
</details>

> ✅ ### Comma separated values
> ✅ 
> ✅ - Double quotes for entries in values that need a comma separated lists are removed.
> ✅ - Double quote names containing a comma.

> Macro (anchor)



# Property file syntax

The clone property file follows standard property file format with some extensions and some clone specific conventions

1. [Standard property file syntax as defined by Java](http://download.oracle.com/javase/6/docs/api/java/util/Properties.html#load%28java.io.Reader%29) summarized by:
  - comment lines start with # or !
  - key value pairs with syntax like **key = value**
  - keys are separated from the value by a separator that is one of **=**, **:**, or **blank**
  - **\** is the the standard escape character, use **\\** if you need the **\** character
  - blanks or other special characters within a key must be escaped
  - lines can be continued by escaping the line terminator - this means having a **\** at the end of a line just before the line terminator
2. For Clone Plus for JIRA release 2.2.0 and above, an [Apache commons extension](http://commons.apache.org/proper/commons-configuration/javadocs/v1.10/apidocs/index.html?org/apache/commons/configuration/PropertiesConfiguration.html) is supported summarized by:  
properties can reference other properties
3. Clone specific conventions
  - As described on this page
  - See the example included in the [Example clone-plus.properties](https://appfire.atlassian.net/l/cp/8B1FEqJ9) page  or the file version: [clone-plus.properties](https://appfire.atlassian.net/wiki/pages/viewpageattachments.action?pageId=71275018&preview=/71275018/71292840/clone-plus.properties)