Hi, if I clone a remote head other than master via Cogito with
cg-clone host:path#remoteHead, work on this branch, and try to push back my changes with cg-push, I get the error "pushing to a different head not supported yet". As far as I can see, there is no support in core GIT to make this ever work (at least with get-send-packs), as "git-send-pack" only updates a set of heads with the same name both locally and remote. I suppose the best would be to always keep the same head names in cloned repositories - it seems to be easier to handle for users. Perhaps the only exception would be "master", as one probably would like to pull masters of different remote repositories into a local one (without really working on them). Thus, what about the following: Each time a remote head other than master is cloned, a head with the same name is created locally which is an alias to the local master. This way, cg-push almost works out of the box. Following patch implements this behavior. Josef diff --git a/cg-clone b/cg-clone --- a/cg-clone +++ b/cg-clone @@ -69,5 +69,12 @@ cp $_git/refs/heads/origin $_git/refs/he git-read-tree HEAD git-checkout-cache -a git-update-cache --refresh echo "Cloned to $dir/ (origin $location available as branch \"origin\")" + +if echo "$location" | grep -q "#" ; then + rembranch=$(echo "$location" | sed -e "s/.*#//") + (cd $_git/refs/heads; ln -s master "$rembranch") + echo "Remote head \"$rbranch\" locally available as alias for \"master\"" +fi + diff --git a/cg-push b/cg-push --- a/cg-push +++ b/cg-push @@ -28,17 +28,18 @@ uri=$(cat "$_git/branches/$name" 2>/dev/ rembranch=master if echo "$uri" | grep -q '#'; then rembranch=$(echo $uri | cut -d '#' -f 2) uri=$(echo $uri | cut -d '#' -f 1) - die "pushing to a different head not supported yet" + [ -s $_git/refs/heads/$rembranch ] || (cd $_git/refs/heads;ln -s master $rembranch) + [ $(readlink $_git/refs/heads/$rembranch) = "master" ] || \ + die "can not push to remote head \"$rembranch\"" fi if echo "$uri" | grep -q "^http://"; then die "pushing over HTTP not supported yet" elif echo "$uri" | grep -q "^git+ssh://"; then git-send-pack "$(echo "$uri" | sed 's#^git+ssh://\([^/]*\)\(/.*\)$#\1:\2#')" $rembranch -elif echo "$uri" | grep -q ":"; then +elif echo "$uri" | grep -q "^rsync://"; then die "pushing over rsync not supported" else git-send-pack "$uri" $rembranch fi - To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html