Skip to main content

tools-p4-shelving

Perforce shelving for code review, sharing work-in-progress, backup, and collaboration workflows.

インストールへ移動

ソース情報

リポジトリ
tjboudreaux/cc-plugin-perforce
ソースの最終更新活動
2026年2月6日 04:08
検出された SKILL.md の言語
英語
スター
8
フォーク
0

インストール方法

デフォルトでは、最初にソースを確認する Prompt が選択されています。直接コマンドに切り替えるか、ローカルコピーをダウンロードすることもできます。

ソースファイルを確認

インストールを決める前に、SKILL.md と SkillsMP に表示されている付属ファイルをお読みください。

SKILL.md を表示中

SKILL.md
ソースの指示 · 読み取り専用プレビュー
name
tools-p4-shelving
description
Perforce shelving for code review, sharing work-in-progress, backup, and collaboration workflows.
# Perforce Shelving ## Overview Shelving stores pending changes on the Perforce server without submitting them. This enables code review, work-in-progress backup, sharing between workspaces, and collaboration. ## When to Use - Backing up work-in-progress - Sharing changes for code review - Switching between tasks - Transferring work between workspaces - Parking changes temporarily - Pre-submit review (Swarm) ## Core Concepts ### Shelving vs Submitting | Feature | Shelving | Submitting | |---------|----------|------------| | Stored on server | Yes | Yes | | Creates revision | No | Yes | | Visible to others | Yes (optional) | Yes | | Reversible | Easy delete | Need revert | | Affects depot | No | Yes | | Builds triggered | Usually no | Usually yes | ## Basic Shelving ### Shelve Changes ```bash # Shelve all files in changelist p4 shelve -c 12345 # Shelve specific files p4 shelve -c 12345 file1.txt file2.txt # Shelve and keep files open p4 shelve -c 12345 # Shelve default changelist p4 shelve # Replace existing shelf p4 shelve -f -c 12345 # Shelve with delete of local files (submit-like) p4 shelve -c 12345 p4 revert -c 12345 //... ``` ### View Shelved Changes ```bash # List shelved changelists p4 changes -s shelved # List your shelved changelists p4 changes -s shelved -u $P4USER # Describe shelved changelist p4 describe -S 12345 # List files in shelf p4 describe -S -s 12345 # Diff shelved file vs depot p4 diff2 //depot/file.txt //depot/file.txt@=12345 ``` ### Unshelve Changes ```bash # Unshelve to same changelist p4 unshelve -s 12345 # Unshelve to different changelist p4 unshelve -s 12345 -c 12346 # Unshelve to new changelist p4 unshelve -s 12345 -c default # Then move to new CL if desired # Unshelve specific files p4 unshelve -s 12345 file.txt # Force unshelve (overwrite local changes) p4 unshelve -s 12345 -f ``` ### Delete Shelf ```bash # Delete shelved files from changelist p4 shelve -d -c 12345 # Delete specific files from shelf p4 shelve -d -c 12345 file.txt # Delete shelf completely p4 shelve -d -c 12345 //... # Promote shelf to commit (delete shelf after submit) p4 submit -e 12345 ``` ## Shelving Workflows ### Work-in-Progress Backup ```bash # End of day - shelve your work p4 shelve -c 12345 -f # Next day - continue working # Files already open, shelf is backup # If workspace lost, unshelve to recover p4 unshelve -s 12345 ``` ### Task Switching ```bash # Working on Feature A (CL 12345) # Urgent bug needs fixing # Shelve Feature A work p4 shelve -c 12345 # Revert local changes (keep shelf) p4 revert -c 12345 //... # Work on bug fix p4 edit bugfile.cs # ... fix bug ... p4 submit -d "Fix critical bug" # Resume Feature A p4 unshelve -s 12345 ``` ### Code Review Workflow ```bash # Developer: Shelve for review p4 shelve -c 12345 echo "Please review CL 12345" # Reviewer: Get shelved changes to review workspace p4 unshelve -s 12345 -c default # Review code... # Reviewer: Revert after review (or keep to test) p4 revert //... # Developer: After approval, submit p4 submit -c 12345 p4 shelve -d -c 12345 # Clean up shelf ``` ### Share Between Workspaces ```bash # Workspace A: Shelve changes p4 shelve -c 12345 # Workspace B: Get shelved changes # (in different workspace) p4 unshelve -s 12345 -c default # Now both workspaces have the changes ``` ### Pre-Integration Testing ```bash # Shelve feature branch changes p4 shelve -c 12345 # In integration workspace: # Sync to main p4 sync //depot/main/... # Unshelve feature changes p4 unshelve -s 12345 # Test integration # ... run tests ... # If tests pass, developer can submit # If tests fail, developer can fix ``` ## Advanced Shelving ### Shelve with Resolve ```bash # When unshelving conflicts with current workspace # Preview unshelve conflicts p4 unshelve -n -s 12345 # Unshelve and resolve p4 unshelve -s 12345 p4 resolve -am # Auto-merge # Or force overwrite p4 unshelve -f -s 12345 ``` ### Update Existing Shelf ```bash # Make more changes p4 edit file.txt # ... edit file ... # Update shelf with new changes p4 shelve -f -c 12345 # -f (force) replaces existing shelf ``` ### Partial Shelving ```bash # Shelve only some files from changelist p4 shelve -c 12345 important.cs critical.cs # Leave other files unshelved but still open ``` ### Shelve Across Streams ```bash # Shelve in one stream p4 shelve -c 12345 # Unshelve to different stream (if mappings allow) # May need branch mapping p4 unshelve -s 12345 -b branch_mapping ``` ## Shelf Management ### Find Old Shelves ```bash # Find your old shelves p4 changes -s shelved -u $P4USER # Find shelves older than 30 days p4 changes -s shelved -u $P4USER | while read line; do CL=$(echo $line | awk '{print $2}') DATE=$(p4 change -o $CL | grep "^Date:" | awk '{print $2}') echo "$CL: $DATE" done ``` ### Clean Up Old Shelves ```bash #!/bin/bash # cleanup-shelves.sh # Delete shelves older than 30 days CUTOFF=$(date -v-30d +%Y/%m/%d) p4 changes -s shelved -u $P4USER | while read line; do CL=$(echo $line | awk '{print $2}') DATE=$(echo $line | awk '{print $4}') if [[ "$DATE" < "$CUTOFF" ]]; then echo "Deleting old shelf: $CL ($DATE)" p4 shelve -d -c $CL //... fi done ``` ### Shelf Statistics ```bash # Count files in shelf p4 describe -S -s 12345 | grep "^\.\.\." | wc -l # Size of shelved files p4 describe -S -s 12345 | grep "^\.\.\." | while read line; do FILE=$(echo $line | awk '{print $1}') p4 fstat -Ol "$FILE@=$CL" 2>/dev/null | grep fileSize done ``` ## Swarm Integration ### Shelve for Swarm Review ```bash # Create review-ready changelist p4 change # Add description with review info # Shelve for Swarm p4 shelve -c 12345 # Swarm automatically detects and creates review # Or trigger manually: # POST to Swarm API ``` ### Update Review ```bash # Make changes based on feedback p4 edit file.txt # ... make changes ... # Update shelf (triggers review update in Swarm) p4 shelve -f -c 12345 ``` ### Commit After Approval ```bash # After review approved in Swarm p4 submit -e 12345 # -e submits shelved files directly # Cleans up shelf automatically ``` ## Best Practices 1. **Shelve frequently** - Backup work in progress 2. **Use descriptive changelist names** - Easy to identify shelves 3. **Clean up old shelves** - Don't leave orphaned shelves 4. **Force update** with `-f` when re-shelving 5. **Verify unshelve** - Check files are correct 6. **Delete shelf after submit** - Keep server clean 7. **Use for code review** - Before committing 8. **Don't rely solely on shelves** - Not a permanent backup 9. **Communicate shelf numbers** - For collaboration 10. **Test unshelved code** - Before submitting ## Troubleshooting | Issue | Solution | |-------|----------| | "Files not shelved" | Check files are open in changelist | | "Can't unshelve - conflicts" | Use `-f` to force or resolve | | "Shelf not found" | Check changelist number, may be deleted | | "No permission to unshelve" | Check protections, may need owner | | "Files differ" | Use `-f` to replace or resolve | | "Can't delete shelf" | Must delete all files first | ## Common Commands Reference ```bash # Shelve p4 shelve -c CL # Shelve changelist p4 shelve -f -c CL # Replace existing shelf p4 shelve -d -c CL # Delete shelf # Unshelve p4 unshelve -s CL # Unshelve to same CL p4 unshelve -s CL -c TARGET # Unshelve to different CL p4 unshelve -f -s CL # Force unshelve # View p4 describe -S CL # View shelved changelist p4 changes -s shelved # List all shelves p4 changes -s shelved -u USER # List user's shelves # Submit shelved p4 submit -e CL # Submit shelf directly ```
GitHubで見る