- ##
- # P4 EVERYDAY
- # A set of aliases to make P4 behave more like Git
- # https://git-scm.com/docs/everyday
- #
- # Note: this requires an internal build of p4 with bash alias support (sorry!)
- #
- # Please see
- # https://swarm.workshop.perforce.com/projects/perforce_software-p4alias-examples/
- # instead.
- ##
- # STANDALONE DEVELOPER
- # add show-branch like output
- show-branch = !\
- `which p4` streams //stream/... | \
- cut -f2 -d " " | \
- while read stream; do \
- branch=${stream##*/}; \
- /bin/echo -n "[$branch] "; \
- `which p4` -ztag -F %desc% changes -m1 $stream/...; \
- done;
- log = changes -L
- # map checkout to switch, also:
- # treat -b as -c
- # make -r default
- # treat 'master' as 'main'
- checkout = !\
- args=('-r'); \
- for arg in "$@"; do \
- if [[ $arg == "-b" ]]; then \
- arg="-c"; \
- fi; \
- if [[ $arg == "master" ]]; then \
- arg="main"; \
- fi; \
- args+=("$arg"); \
- done; \
- `which p4` switch "${args[@]}";
- # branch runs switch -l, no support for add/delete
- branch = switch -l
- # add is basically reconcile, but treat '.' as './...'
- add = !\
- for arg in "$@"; do \
- if [[ $arg == "." ]]; then \
- arg="./..."; \
- fi; \
- args+=("$arg"); \
- done; \
- `which p4` reconcile "${args[@]}";
- # run diff on unopened files (like git)
- diff = diff -f -Od
- # commit maps to submit, but with -m as -d
- commit = !\
- for arg in "$@"; do \
- if [[ $arg == "-m" ]]; then \
- arg="-d"; \
- fi; \
- args+=("$arg"); \
- done; \
- `which p4` submit "${args[@]}";
- # when users run reset, direct them to obliterate
- reset = !echo "Try: p4 help obliterate"
- # merge maps to merge with changes:
- # first arg is the from branch
- # treat 'master' as 'main'
- # auto resolve and submit
- original-merge = merge
- merge = !\
- if [[ "$1" == "master" ]]; then \
- 1="main"; \
- fi; \
- `which p4` original-merge --from "$1" > /dev/null && \
- `which p4` resolve -am > /dev/null && \
- `which p4` submit -d "Merged $1"
- # when users run rebase, direct them to unsubmit/resubmit
- rebase = !echo "Try: p4 help unsubmit and p4 help resubmit"
- # run p4 label when git tag is invoked
- tag = label
- # PARTICIPANT DEVELOPER
- # support p4:// clone URIs
- original-clone = clone
- clone = !\
- args=('original-clone'); \
- for arg in "$@"; do \
- if [[ $arg == p4://* ]]; then \
- port=`expr "$arg" : 'p4://\([^/]*\)'`; \
- path=`expr "$arg" : 'p4://[^/]*/\(.*\)'`; \
- name=${path##*/}; \
- if [[ -z "$port" || -z "$path" ]]; then \
- echo "p4:// URI must have both a server:port and a path"; \
- exit 1; \
- fi; \
- args=('-d' $name "${args[@]}" '-p' $port '-f' "//$path/main/..."); \
- else \
- args+=("$arg"); \
- fi; \
- done; \
- `which p4` "${args[@]}";
- # pull runs fetch
- pull = fetch
- # fetch suggests running pull
- fetch = !echo "Try: p4 help pull"
- # push maps to push with some changes:
- # --set-upstream as an instruction to map this branch
- # treat 'master' as 'main'
- original-push = push
- push = !\
- [[ "$1" == "--set-upstream" ]] && map=true || map=false; \
- [[ "$map" = true ]] && remote="$2" || remote="$1"; \
- [[ "$map" = true ]] && stream="$3" || stream="$2"; \
- if [[ "$stream" == "master" ]]; then \
- stream="main"; \
- fi; \
- if [[ "$map" = true ]]; then \
- map=$(`which p4` remote -o "$remote" | sed -n "s:/main/:/$stream/:pg"); \
- (`which p4` remote -o "$remote"; echo "$map") | p4 remote -i; \
- fi; \
- `which p4` original-push -r "$remote" -S "//stream/$stream";
- # format-patch suggests diff2
- format-patch = !echo "Try: p4 help diff2 (see -u argument)"
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#2 | 20949 | Perforce maintenance | At the request of tech support, redirect any Perforce customers to the P4Alias examples in...stead, as this uses a custom build. https://swarm.workshop.perforce.com/projects/perforce_software-p4alias-examples/ « |
8 years ago | |
#1 | 18944 | Stewart Lord | Added p4aliases file to make DVCS act more like git | 9 years ago |