$ git submodule add http://github.com/fictorial/redis-node-client.git deps/redis-node-client
this produces a commit with the following diff: diff --git a/.gitmodules b/.gitmodules
new file mode 100644
index 0000000..1695499
--- /dev/null
+++ b/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "deps/redis-node-client"]
+ path = deps/redis-node-client
+ url = http://github.com/fictorial/redis-node-client.git
diff --git a/deps/redis-node-client b/deps/redis-node-client
new file mode 160000
index 0000000..5050251
--- /dev/null
+++ b/deps/redis-node-client
@@ -0,0 +1 @@
+Subproject commit 505025187faf3cf7a211f5e6bfd261e45bd0b1dc
Later, when I want to update the subproject to a new revision, i just $ cd deps/redis-node-client
$ git checkout v2.0 # or whatever
$ cd ../..
$ git diff
diff --git a/deps/redis-node-client b/deps/redis-node-client
index bdbfb96..a98a74b 160000
--- a/deps/redis-node-client
+++ b/deps/redis-node-client
@@ -1 +1 @@
-Subproject commit bdbfb96293f868dc01917a38af2dc4b66dd86157
+Subproject commit a98a74b71c1ad90f15c58bb904d17906689c85f5
From the point of view of the parent git repository it only updated the pointer to point to another commit.
For me though, the act of thinking about a problem in terms of data and relationships helps a lot in exploring and understanding what I'm dealing with. Even more so in an agile setting, where things can and will be changed often - the schema is no exception, it can be changed. No need to cast in stone the first schema you came up with.
But that's just my preferred way of approaching the problem :-)