Labels & Markers
Labels & Markers
Section titled “Labels & Markers”Labels are key-value pairs extracted from or added to commit messages.
State Tracking Labels
Section titled “State Tracking Labels”Copybara uses labels to track synchronization state:
GitOrigin-RevId: abc123def456789This label tells Copybara which origin commit was last synced.
Exposing Labels
Section titled “Exposing Labels”Make labels from origin commits available:
transformations = [ metadata.expose_label("Bug"), metadata.expose_label("Reviewed-by"), metadata.expose_label("Co-authored-by"),]Standard Git Trailers
Section titled “Standard Git Trailers”# Common Git trailersmetadata.expose_label("Signed-off-by"),metadata.expose_label("Co-authored-by"),metadata.expose_label("Reviewed-by"),metadata.expose_label("Acked-by"),GitHub Keywords
Section titled “GitHub Keywords”# GitHub issue referencesmetadata.expose_label("Closes"),metadata.expose_label("Fixes"),metadata.expose_label("Resolves"),Adding Labels
Section titled “Adding Labels”Add labels to destination commits:
metadata.add_header("Synced-From: internal-repo")Dynamic Labels
Section titled “Dynamic Labels”metadata.add_header( text = "Original-Commit: ${COPYBARA_CONTEXT_REFERENCE}",)Multiple Labels
Section titled “Multiple Labels”transformations = [ metadata.add_header("Synced-From: internal"), metadata.add_header("Sync-Tool: copybara"), metadata.add_header("Sync-Time: ${COPYBARA_CURRENT_TIME}"),]Label Format
Section titled “Label Format”Labels in commit messages use the format:
Label-Name: valueExample commit message:
Fix authentication bug
This commit fixes the login issue.
Bug: 12345Reviewed-by: alice@example.comGitOrigin-RevId: abc123def456Using Labels in Transforms
Section titled “Using Labels in Transforms”Reference labels in transformations:
metadata.add_header( text = "Original-Bug: ${Bug}", ignore_label_not_found = True, # Don't fail if label missing)Removing Labels
Section titled “Removing Labels”Remove labels from destination commits:
metadata.remove_label("Internal-Bug")Label Variables
Section titled “Label Variables”Available variables in label templates:
| Variable | Description |
|---|---|
${COPYBARA_CONTEXT_REFERENCE} | Origin commit SHA |
${COPYBARA_CURRENT_TIME} | Current timestamp |
${COPYBARA_WORKFLOW_NAME} | Workflow name |
${label_name} | Value of exposed label |
Complete Example
Section titled “Complete Example”transformations = [ # Expose original labels metadata.expose_label("Bug"), metadata.expose_label("Co-authored-by"), metadata.expose_label("Reviewed-by"),
# Remove internal-only labels metadata.remove_label("Internal-Reviewer"), metadata.remove_label("Internal-Bug"),
# Add sync metadata metadata.add_header("Synced-From: internal"), metadata.add_header("Original-Commit: ${COPYBARA_CONTEXT_REFERENCE}"),
# Preserve bug reference if present metadata.add_header( text = "Original-Bug: ${Bug}", ignore_label_not_found = True, ),]Label Precedence
Section titled “Label Precedence”When the same label appears multiple times:
- First occurrence is used for
${label}substitution - All occurrences are preserved in commit message (unless removed)
State Tracking
Section titled “State Tracking”Copybara automatically adds:
GitOrigin-RevId: <sha>This enables:
- Incremental syncs (only new commits)
- Tracking which origin commit produced each destination commit
- State recovery after failures
Overriding State
Section titled “Overriding State”# Start from specific commitjava -jar copybara.jar migrate copy.bara.sky workflow \ --last-rev abc123
# Ignore existing statejava -jar copybara.jar migrate copy.bara.sky workflow \ --force