Don't offer to clean the repo if there are modified files; don't offer to clean if there is no .buckversion.
diff --git a/bin/buck_common b/bin/buck_common
index 05eb135..ba11694 100755
--- a/bin/buck_common
+++ b/bin/buck_common
@@ -80,7 +80,13 @@
 fi
 
 # Get current buck version.
+
+# Whether or not the repo is dirty (contains untracked files or modified
+# tracked files).
 BUCK_REPOSITORY_DIRTY=0
+
+# Whether or not the repo contains changes to tracked files.
+BUCK_REPOSITORY_LOCAL_CHANGES=0
 BUCK_CURRENT_VERSION="N/A"
 BUCK_VERSION_TIMESTAMP=-1
 if [ -d ".git" ]; then
@@ -92,12 +98,17 @@
   if [ -n "`git status -s`" ]; then
     BUCK_REPOSITORY_DIRTY=1
   fi
+  # If the output of "git ls-files -m" is non-empty, buck has local changes to
+  # tracked files that can't be cleaned automatically with `git clean -fd`.
+  if [ -n "`git ls-files -m`" ]; then
+    BUCK_REPOSITORY_LOCAL_CHANGES=1
+  fi
 fi
 
 # Compute a version string that uniquely incorporates the current git revision
 # and local modifications (if any) to managed files that are relevant to
 # building/running the buck application.
-if [ "x${BUCK_REPOSITORY_DIRTY}" = "x0" ] ; then
+if [ "${BUCK_REPOSITORY_DIRTY}" = "0" ] ; then
   BUCK_VERSION_UID="${BUCK_CURRENT_VERSION}"
 else
   if [ -d ".git" ] ; then
@@ -123,9 +134,18 @@
       BUCK_VERSION_UID=`git hash-object ${buck_version_uid_input}` || exit 1
       rm -f "${buck_version_uid_input}"
     }
-    if [ -e "${PROJECT_ROOT}/.nobuckcheck" ]; then
+    if [ -e "${PROJECT_ROOT}/.nobuckcheck" ] || [ ! -e "${PROJECT_ROOT}/.buckversion" ]; then
       computeLocalHash
     else
+      if [ "${BUCK_REPOSITORY_LOCAL_CHANGES}" = "1" ] ; then
+        # If the buck repo is dirty but has local changes, warn the user, but we
+        # can't clean the repo for them.
+        echo ":: Your buck directory has local modifications, and therefore"
+        echo ":: builds will not be able to use a distributed cache."
+        echo ":: The following files must be either reverted or committed:"
+        git ls-files -m
+        BUCK_CLEAN_REPO_IF_DIRTY=N
+      fi
       if [ -z "$BUCK_CLEAN_REPO_IF_DIRTY" ]; then
         echo ":: Your local buck directory is dirty, and therefore builds will"
         echo ":: not be able to use a distributed cache."