Force a guaranteed git pull success story
Sometimes you need to script a git pull or you just want to completely reset a repo to HEAD. You there are loads of errors git can throw you in the process; such as error: unable to unlink old ‘sites/default/settings.php’ or error: The following untracked working tree files would be overwritten by checkout. Below is my take on the complete repository reset/clean/pull. Let me know in the comments if you’ve got a better way or find errors I’m missing.
# Find and record unwriteable files.
NOWRITEFILES=$(find * ! -perm -u+w)
# If there are unwriteable files
if [ -n "$NOWRITEFILES" ]; then
# Change permission to writeable
chmod u+w $NOWRITEFILES
fi
# Clean the directory, but don't remove files specified in .gitignore.
git clean -d -f
# Reset the files
git reset --hard HEAD
# Get the changes
git pull -f
# If there were unwritable files
if [ -n "$NOWRITEFILES" ]; then
# Change permission back to unwritable
chmod u-w $NOWRITEFILES
fi