diff --git a/.gitattributes b/.gitattributes
index e0ba0f20c184467aba230b4fa6df8a72306594e7..5a71990fae7ba9ecfcbaec5511826c0e3b7e51a7 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -2,7 +2,12 @@
 # @see http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
 # @see http://drupal.org/node/1542048
 
-# Shorthand for text files.
+# Normally these settings would be done with macro attributes for improved
+# readability and easier maintenance. However macros can only be defined at the
+# repository root directory. Drupal avoids making any assumptions about where it
+# is installed.
+
+# Define text file attributes.
 # - Treat them as text.
 # - Ensure no CRLF line-endings, neither on checkout nor on checkin.
 # - Detect whitespace errors.
@@ -10,42 +15,37 @@
 #   - Validate with `git diff --check`.
 #   - Deny applying with `git apply --whitespace=error-all`.
 #   - Fix automatically with `git apply --whitespace=fix`.
-[attr]drupaltext    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
-
-# Shorthand for binary files.
-# - Do not treat them as text.
-# - Include binary diff in patches instead of "binary files differ."
-[attr]drupalbinary  -text diff
 
 # Auto-detect text files, ensure they use LF.
 *         text=auto eol=lf
 
-# Define text file attributes.
-*.css     drupaltext
-*.engine  drupaltext diff=php
-*.html    drupaltext diff=html
-*.inc     drupaltext diff=php
-*.info    drupaltext
-*.install drupaltext diff=php
-*.js      drupaltext
-*.json    drupaltext
-*.lock    drupaltext
-*.md      drupaltext
-*.module  drupaltext diff=php
-*.php     drupaltext diff=php
-*.po      drupaltext
-*.script  drupaltext
-*.sh      drupaltext diff=php
-*.sql     drupaltext
-*.test    drupaltext diff=php
-*.txt     drupaltext
-*.xml     drupaltext
-*.yml     drupaltext
+*.css     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.engine  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.html    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=html
+*.inc     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.info    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.install text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.js      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.json    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.lock    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.md      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.module  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.php     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.po      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.script  text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.sh      text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.sql     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.test    text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2 diff=php
+*.txt     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.xml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
+*.yml     text eol=lf whitespace=blank-at-eol,-blank-at-eof,-space-before-tab,tab-in-indent,tabwidth=2
 
 # Define binary file attributes.
-*.gif     drupalbinary
-*.gz      drupalbinary
-*.ico     drupalbinary
-*.jpg     drupalbinary
-*.png     drupalbinary
-*.phar    drupalbinary
+# - Do not treat them as text.
+# - Include binary diff in patches instead of "binary files differ."
+*.gif     -text diff
+*.gz      -text diff
+*.ico     -text diff
+*.jpg     -text diff
+*.png     -text diff
+*.phar    -text diff