docs: Add docs/commit_messages.md

Initially transcribed loosely with changes from pigweed

Change-Id: I0ae35c1780c59354649c5dfebc492403f1b9bbac
Reviewed-on: https://bluetooth-review.git.corp.google.com/c/bluetooth/+/1601
Reviewed-by: Ani Ramakrishnan <aniramakri@google.com>
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f4fd39f
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+# Vim swap files.
+*.swp
diff --git a/docs/commmit_messages.md b/docs/commmit_messages.md
new file mode 100644
index 0000000..81f4127
--- /dev/null
+++ b/docs/commmit_messages.md
@@ -0,0 +1,117 @@
+
+
+# Commit message style
+
+Commit message bodies and summaries are limited to 72 characters wide to
+improve readability, and should be prefixed with the name of the module that the
+commit is affecting. The commits should describe what is changed, and why. When
+writing long commit messages, consider whether the content should go in the
+documentation or code comments instead. For example:
+
+```
+rust/bt-gatt: Short capitalized description
+Details about the change here. Include a summary of what changed, and a clear
+description of why the change is needed. Consider what parts of the commit
+message are better suited for documentation or code.
+ - Add foo to fix issue bar
+ - Improve speed of qux
+ - Refactor and extended qux's test suite
+```
+
+# Include both "what" and "why"
+
+It is important to include a "why" component in most commits. Sometimes, why is
+evident - for example, reducing memory usage, optimizing, or fixing a bug.
+Otherwise, err on the side of over-explaining why, not under-explaining why.
+When adding the "why" to a commit, also consider if that "why" content should go
+into the documentation or code comments.
+
+```
+rust/bt-common: Add debug formatting
+ Print the services in a human-readable format.
+ This makes debugging and handling the services much easier, and will allow
+ for quick glancing.
+ Though this costs performance, several bugs that went unnoticed would have
+ been caught by turning this on earlier. Take the small hit by default to
+ better catch issues going forward; see extended docs for details.
+```
+# Present imperative
+
+Use present imperative style instead of passive descriptive.
+
+```
+rust/bt-vcs: Add volume changed event
+```
+instead of
+```
+rust/bt-vcs: Adds volume changed event
+```
+
+# Documentation instead of commit content
+
+Consider whether any of the commit message content should go in the
+documentation or code comments and have the commit message reference it.
+Documentation and code comments are durable and discoverable; commit messages
+are rarely read after the change lands.
+
+# Lists instead of paragraphs
+
+Use bulleted lists when multiple changes are in a single CL. Ideally, try to
+create smaller CLs so this isn't needed, but larger CLs are a practical reality.
+
+```
+rust/bt-pacs: Add more capablities
+
+Add the suite of capabilities added in the new spec.
+ - Foo capability
+ - Bar format
+```
+
+# Subject line
+
+The subject line (first line of the commit) should take the form ``<module>:
+Short description``. The module should not be capitalized, but the description
+should (unless the first word is an identifier).
+It should not include a trailing period.
+
+## Multiple modules
+
+Sometimes it is necessary to change code across multiple modules.
+ 1. **2-5 modules**: Use ``{}`` syntax shown below
+ 1. **>5 modules changed** - Omit the module names entirely
+ 1. **Changes mostly in one module** - If the commit mostly changes the
+   code in a single module with some small changes elsewhere, only list the
+   module receiving most of the content
+
+For example, for 2 modules:
+```
+bt-{gatt, vcs}: Update names
+```
+
+# Footer
+
+We encourage a number of [git footers](https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/git-footers.html)
+in the commit message, such as `Bug:
+123` in the message below:
+
+```
+bt-gatt: Add foo and bar functions
+
+Bug: 123
+```
+
+The footer syntax is described in the [git documentation]
+(https://git-scm.com/docs/git-interpret-trailers). Note in particular that
+multi-line footers are supported.
+
+You are encouraged to use the following footers when appropriate:
+* **`Bug`**: Associates this commit with a bug (issue in our bug tracker).
+* **`Fixed`** or **`Fixes`**: Like `Bug`, but may automatically close the bug
+  when submitted.
+* **`Test`**: The author can use this field to tell the reviewer how the change
+  was tested. Typically, this will be some combination of writing new automated
+  tests, running automated tests, and manual testing.
+  Note: descriptions of manual testing procedures belong in module
+  documentation, not in the commit message. Use the `Test` field to attest
+  that tests were carried out, not to describe the procedures in detail.
+