diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000000000000000000000000000000000000..0c210b4e705aeff54e3aa3c9e0b15242cd3549b5
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1 @@
+scapy/__init__.py	export-subst
diff --git a/scapy/__init__.py b/scapy/__init__.py
index 871df95cbf7dccc86c034435c379e33297ec00a8..b3bb3d0d5e054682617edc470d883263d05bac7f 100644
--- a/scapy/__init__.py
+++ b/scapy/__init__.py
@@ -71,7 +71,17 @@ def _version():
                 tag = f.read()
             return tag
         except:
-            return 'unknown.version'
+            # Rely on git archive "export-subst" git attribute.
+            # See 'man gitattributes' for more details.
+            git_archive_id = '$Format:%h %d$'
+            sha1 = git_archive_id.strip().split()[0]
+            match = re.search(r'tag:(\S+)', git_archive_id)
+            if match:
+                return match.group(1)
+            elif sha1:
+                return sha1
+            else:
+                return 'unknown.version'
 
 VERSION = _version()