Skip to main content

tools-p4-resolve

Perforce conflict resolution including merge strategies, 3-way merge, resolve workflows, and handling binary conflicts.

الانتقال إلى التثبيت

معلومات المصدر

المستودع
tjboudreaux/cc-plugin-perforce
آخر نشاط في المصدر
٦ فبراير ٢٠٢٦ في ٠٤:٠٨
لغة SKILL.md المكتشفة
الإنجليزية
النجوم
٨
التفرعات
٠

خيارات التثبيت

يُحدَّد Prompt الذي يراجع المصدر أولًا بشكل افتراضي. يمكنك التبديل إلى أمر مباشر أو تنزيل نسخة محلية.

مراجعة ملفات المصدر

اقرأ SKILL.md وأي ملفات مرافقة يعرضها SkillsMP قبل أن تقرر التثبيت.

عرض SKILL.md

SKILL.md
تعليمات المصدر · معاينة للقراءة فقط
name
tools-p4-resolve
description
Perforce conflict resolution including merge strategies, 3-way merge, resolve workflows, and handling binary conflicts.
# Perforce Conflict Resolution ## Overview Conflicts occur when multiple users modify the same file. Perforce provides powerful resolve tools for merging changes. This skill covers all resolve strategies and workflows. ## When to Use - After syncing when files have conflicts - Before submitting changes - When integrating between branches - Handling binary file conflicts - Resolving content vs attribute conflicts ## Core Concepts ### Conflict Types | Type | Description | Resolution | |------|-------------|------------| | **Content** | Both versions modified same lines | Merge or choose version | | **Attribute** | File type or permissions changed | Choose attribute | | **Delete** | File deleted in one version, modified in other | Keep or delete | | **Move/Delete** | File moved and deleted | Choose action | | **Binary** | Binary file modified by both | Choose version (no merge) | ### Three-Way Merge ``` Base (common ancestor) | +-- Theirs (depot/source) | +-- Yours (workspace) | v Merged Result ``` ## Basic Resolve ### Check for Conflicts ```bash # Preview resolve (see what needs resolving) p4 resolve -n # See files that need resolving p4 resolve -n //depot/project/... # Check specific file p4 resolve -n file.txt ``` ### Automatic Resolve ```bash # Auto-resolve all (safe merge where possible) p4 resolve -am # Auto-resolve accepting merge result p4 resolve -am //depot/project/... # Auto-resolve specific file p4 resolve -am file.txt ``` ### Resolve Strategies ```bash # Accept automatic merge (only if no conflicts) p4 resolve -am # Accept theirs (depot version) p4 resolve -at # Accept yours (workspace version) p4 resolve -ay # Force accept theirs even with conflicts p4 resolve -at //... # Force accept yours even with conflicts p4 resolve -ay //... ``` ## Interactive Resolve ### Launch Interactive Resolve ```bash # Interactive resolve for all files p4 resolve # Interactive resolve for specific file p4 resolve file.txt # Interactive with specific merge tool p4 resolve -t p4merge file.txt ``` ### Interactive Menu Options ``` Diff results: 1: Accept theirs (loses your changes) 2: Accept yours (loses depot changes) 3: Accept merge result 4: Edit merge result 5: Show differences (base to theirs) 6: Show differences (base to yours) 7: Show differences (yours to theirs) 8: Skip this file 9: Help Choose option: ``` ### Interactive Workflow ```bash # 1. Start resolve p4 resolve file.txt # 2. View differences # Option 5, 6, or 7 to understand changes # 3. Choose resolution # Option 1 (theirs), 2 (yours), or 3 (merge) # 4. If merge has conflicts, option 4 to edit # 5. Accept final result # Option 3 to accept merge ``` ## Merge Tools ### Configure P4 Merge Tool ```bash # Set P4MERGE environment variable export P4MERGE=/usr/local/bin/p4merge # Or use other merge tools export P4MERGE=/usr/local/bin/code # VS Code export P4MERGE=/usr/local/bin/meld # Meld export P4MERGE=/usr/bin/vimdiff # Vim ``` ### P4Merge Workflow ```bash # Launch P4Merge for conflict p4 resolve -t file.txt # P4Merge shows four panes: # - Base (original) # - Theirs (depot) # - Yours (local) # - Result (merged) # Edit result pane, save, close # Accept result in terminal ``` ### Visual Studio Code Merge ```bash # Set VS Code as merge tool export P4MERGE="code --wait --merge" # Resolve using VS Code p4 resolve file.txt ``` ## Resolve Scenarios ### Simple Auto-Merge ```bash # Both changed different parts of file p4 sync # File needs resolve... p4 resolve -am # Merge successful - changes combined ``` ### Conflicting Changes ```bash # Both changed same lines p4 sync p4 resolve -am # Conflicts detected... # Option 1: Accept theirs p4 resolve -at file.txt # Option 2: Accept yours p4 resolve -ay file.txt # Option 3: Manual merge p4 resolve file.txt # Choose option 4 to edit # Fix conflicts in editor # Save and accept ``` ### Binary File Conflicts ```bash # Binary files can't be merged p4 sync p4 resolve -n # Binary conflict on image.psd # Accept theirs (depot version) p4 resolve -at image.psd # Or accept yours (your version) p4 resolve -ay image.psd ``` ### Delete vs Edit Conflict ```bash # File deleted in depot, edited locally p4 sync p4 resolve -n # Delete vs edit conflict... # Keep your edited version p4 resolve -ay file.txt # Or accept delete p4 resolve -at file.txt ``` ## Advanced Resolve ### Partial Resolve ```bash # Resolve only content, not attributes p4 resolve -c //... # Resolve only attributes p4 resolve -A //... # Resolve specific attribute type p4 resolve -Aa //... # All attributes p4 resolve -Ab //... # Branch action p4 resolve -At //... # File type ``` ### Re-Resolve ```bash # Re-resolve already resolved file p4 resolve -f file.txt # Re-resolve with different strategy p4 resolve -f -at file.txt ``` ### Resolve During Integration ```bash # Integrate between branches p4 integrate //depot/dev/... //depot/main/... # Resolve integration conflicts p4 resolve -am //depot/main/... # If conflicts remain p4 resolve //depot/main/... ``` ### Safe Resolve Workflow ```bash # 1. Preview what needs resolving p4 resolve -n # 2. Try automatic merge first p4 resolve -am # 3. Check what remains p4 resolve -n # 4. Handle remaining manually p4 resolve remaining_file.txt # 5. Verify resolve complete p4 resolve -n # Should show nothing ``` ## Conflict Markers ### Understanding Markers When editing merge result manually: ``` <<<<<<< THEIRS (depot version) code from depot ======= code from your workspace >>>>>>> YOURS (workspace version) ``` ### Resolving Markers ```bash # Edit file to remove markers vim file.txt # Original with markers: <<<<<<< THEIRS function getValue() { return this.value; } ======= function getValue() { return this.cachedValue || this.value; } >>>>>>> YOURS # Resolved (choose best version or combine): function getValue() { return this.cachedValue || this.value; } # Save and mark resolved p4 resolve -am file.txt ``` ## Resolve Workflows ### Pre-Submit Workflow ```bash #!/bin/bash # pre-submit-resolve.sh # Sync latest p4 sync # Check for conflicts CONFLICTS=$(p4 resolve -n 2>&1 | grep -c "resolve") if [ "$CONFLICTS" -gt 0 ]; then echo "Found $CONFLICTS files needing resolve" # Try auto-merge p4 resolve -am # Check remaining REMAINING=$(p4 resolve -n 2>&1 | grep -c "resolve") if [ "$REMAINING" -gt 0 ]; then echo "Manual resolve needed for $REMAINING files" p4 resolve -n exit 1 fi fi echo "Ready to submit" ``` ### Integration Workflow ```bash # 1. Integrate from source to target p4 integrate //depot/feature/... //depot/main/... # 2. Preview conflicts p4 resolve -n //depot/main/... # 3. Auto-resolve safe merges p4 resolve -am //depot/main/... # 4. Handle remaining conflicts p4 resolve //depot/main/... # 5. Test merged code # 6. Submit integration p4 submit -d "Integrate feature to main" ``` ### Batch Resolve Pattern ```bash # Accept all theirs (when their changes are correct) p4 resolve -at //depot/project/... # Accept all yours (when your changes are correct) p4 resolve -ay //depot/project/... # Mixed resolution p4 resolve -at //depot/project/Assets/... # Accept art assets p4 resolve -am //depot/project/Scripts/... # Merge code ``` ## Undoing Resolve ### Revert and Re-Sync ```bash # If resolve went wrong, revert and start over p4 revert file.txt p4 sync file.txt p4 edit file.txt # Re-apply your changes manually ``` ### Back Out Bad Merge ```bash # After bad submit, can sync to previous and re-submit p4 sync //depot/project/file.txt#head-1 p4 edit file.txt p4 sync -f //depot/project/file.txt#head-1 p4 resolve -ay file.txt p4 submit -d "Revert bad merge" ``` ## Best Practices 1. **Sync frequently** - Smaller merges are easier 2. **Resolve before submit** - Never submit unresolved 3. **Preview first** with `p4 resolve -n` 4. **Try auto-merge** before manual 5. **Use visual merge tool** for complex conflicts 6. **Test after resolve** - Merged code may have bugs 7. **Keep changelists small** - Easier to resolve 8. **Communicate with team** about conflicting areas 9. **Use exclusive locks** for binary files 10. **Document conflict resolution** in submit description ## Troubleshooting | Issue | Solution | |-------|----------| | "Must resolve before submit" | Run `p4 resolve` | | "No file(s) to resolve" | Already resolved or no conflicts | | Merge tool not launching | Check P4MERGE setting | | Markers left in file | Edit to remove, re-resolve | | Wrong resolution accepted | Revert, sync, re-resolve | | Binary conflict | Must accept one version (-at or -ay) |
عرض على GitHub