1#!/bin/sh 2# 3# Copyright (c) 2005 Junio C Hamano 4# 5# Fetch one or more remote refs and merge it/them into the current HEAD. 6 7. git-sh-setup|| die "Not a git archive" 8 9usage () { 10 die "git pull [-n] [-s strategy]... <repo> <head>..." 11} 12 13strategy_args= no_summary= 14while case"$#,$1"in0)break;; *,-*) ;; *)break;;esac 15do 16case"$1"in 17-n|--n|--no|--no-|--no-s|--no-su|--no-sum|--no-summ|\ 18--no-summa|--no-summar|--no-summary) 19 no_summary=-n;; 20-s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\ 21--strateg=*|--strategy=*|\ 22-s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy) 23case"$#,$1"in 24*,*=*) 25 strategy=`expr "$1" : '-[^=]*=\(.*\)'`;; 261,*) 27 usage ;; 28*) 29 strategy="$2" 30shift;; 31esac 32 strategy_args="${strategy_args}-s$strategy" 33;; 34-*) 35# Pass thru anything that is meant for fetch. 36break 37;; 38esac 39shift 40done 41 42orig_head=$(git-rev-parse --verify HEAD)|| die "Pulling into a black hole?" 43git-fetch --update-head-ok"$@"||exit1 44 45curr_head=$(git-rev-parse --verify HEAD) 46iftest"$curr_head"!="$orig_head" 47then 48# The fetch involved updating the current branch. 49 50# The working tree and the index file is still based on the 51# $orig_head commit, but we are merging into $curr_head. 52# First update the working tree to match $curr_head. 53 54echo>&2"Warning: fetch updated the current branch head." 55echo>&2"Warning: fast forwarding your working tree." 56 git-read-tree -u -m"$orig_head""$curr_head"|| 57 die "You need to first update your working tree." 58fi 59 60merge_head=$(sed-e'/ not-for-merge /d' \ 61-e's/ .*//'"$GIT_DIR"/FETCH_HEAD | \ 62tr'\012'' ') 63 64case"$merge_head"in 65'') 66echo>&2"No changes." 67exit0 68;; 69?*' '?*) 70 strategy_default_args='-s octopus' 71;; 72*) 73 strategy_default_args='-s resolve' 74;; 75esac 76 77case"$strategy_args"in 78'') 79 strategy_args=$strategy_default_args 80;; 81esac 82 83merge_name=$(git-fmt-merge-msg <"$GIT_DIR/FETCH_HEAD") 84git-merge$no_summary $strategy_args"$merge_name" HEAD $merge_head