Tom Roche Monday, May 7, 2012 10:09:29 AM UTC-7 >> How to [easily] overwrite managed files in an existing directory >> with the latest versions from a remote branch/repo, without merging >> or whack-n-clone?
as defined @ top of thread https://groups.google.com/d/topic/git-users/vYnSjP5ueXs/discussion Note again, I'm trying to keep it simple/easy for a group of (relatively) new adopters who don't self-identify as software engineers. Peter J Weisberg Mon, 7 May 2012 15:35:02 -0700 (PDT) > git fetch origin > git reset --hard origin/master > DON'T use `reset` if there's anything in the local branch history > that you don't want to lose. `reset` affects the history of the > current branch, not just the working files. Belated thanks for that advice! which got us started. Since then another workflow has evolved, about which I'd appreciate comments/ warnings, especially * warnings of the form, "under [plausible circumstances], your workflow produces [significant harms]" * pointers to existing tools handle this usecase better 0 User switches remote to the desired repo. 1 User runs bash script (follows my .sig to end of post) to see what if any changes have been made in remote. 2 If user wants to adopt changes, s/he does $ git merge --no-commit [${TARGET}] Seems to work, but is this likely to "bite back"? or is there A Better Way(tm) to do this? TIA, Tom Roche <tom_ro...@pobox.com>---script follows to end of post--- #!/usr/bin/env bash # adapted from https://github.com/ddollar/git-utils/blob/master/git-incoming # TODO: usage # TODO: add --verbose, turn off echo-ing by default TARGET="${1}" CURRENT_BRANCH="$(git branch &>/dev/null; if [ $? -eq 0 ]; then echo "$(git branch | grep '^*' |sed s/\*\ //)"; fi)" echo -e "CURRENT_BRANCH=${CURRENT_BRANCH}" if [[ -z "${CURRENT_BRANCH}" ]]; then echo -e 'ERROR: cannot determine current branch' exit 1 else if [[ -z "${TARGET}" ]]; then TRACKING_REPO="$(git config branch.${CURRENT_BRANCH}.remote)" echo -e "TRACKING_REPO=${TRACKING_REPO}" if [[ -z "${TRACKING_REPO}" ]]; then echo -e 'ERROR: cannot determine tracking repository' exit 2 else REMOTE_REPO="${TRACKING_REPO}" REMOTE_BRANCH="$(git config branch.${CURRENT_BRANCH}.merge | sed -e 's#^[^/]*/[^/]*/##')" TARGET="${REMOTE_REPO}/${REMOTE_BRANCH}" echo -e "REMOTE_REPO=${REMOTE_REPO}" echo -e "REMOTE_BRANCH=${REMOTE_BRANCH}" echo -e "no TARGET specified by command, using TARGET=${TARGET}" fi fi fi # payload echo -e "Incoming changes from TARGET=${TARGET}" # TODO: only diff if -n $(git log) for CMD in \ "git fetch" \ "git log ..${TARGET}" \ "git diff ..${TARGET}" \ ; do echo echo -e "$ ${CMD}" eval "${CMD}" done exit 0 # Note on double dots '..' above from 2nd answer @ http://stackoverflow.com/questions/4944376/how-to-check-real-git-diff-before-merging-from-remote-branch # > You can use various combinations of specifiers to git to see your diffs as you desire: # > $ git diff remote/origin # > This shows the incoming remote changes as deletions; any commits in your local repository are shown as additions. # > $ git diff ...remote/origin # > Shows incoming remote changes as additions; the triple-dot excludes changes committed to your local repository. # > $ git diff ..remote/origin # > Shows incoming remote changes as additions; the double-dot includes changes committed to your local repository as deletions (since they are not yet pushed). -- You received this message because you are subscribed to the Google Groups "Git for human beings" group. To post to this group, send email to git-users@googlegroups.com. To unsubscribe from this group, send email to git-users+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/git-users?hl=en.